Commit 7825f619 by Geoff Lang

Update ANGLE_platform_angle_d3d to use a device type enum instead of WARP bool.

BUG=angle:490 Change-Id: I1555e7f09b23138753e52ddf720d088587f7cadb Reviewed-on: https://chromium-review.googlesource.com/232104Reviewed-by: 's avatarShannon Woods <shannonwoods@chromium.org> Tested-by: 's avatarGeoff Lang <geofflang@chromium.org>
parent 2fa660ba
...@@ -22,7 +22,7 @@ Status ...@@ -22,7 +22,7 @@ Status
Version Version
Version 2, 2014-06-05 Version 3, 2014-10-20
Number Number
...@@ -62,18 +62,18 @@ New Tokens ...@@ -62,18 +62,18 @@ New Tokens
Accepted as the <platform> argument of eglGetPlatformDisplayEXT: Accepted as the <platform> argument of eglGetPlatformDisplayEXT:
EGL_PLATFORM_ANGLE_ANGLE 0x3201 EGL_PLATFORM_ANGLE_ANGLE 0x3202
Accepted as an attribute name in the <attrib_list> argument of Accepted as an attribute name in the <attrib_list> argument of
eglGetPlatformDisplayEXT: eglGetPlatformDisplayEXT:
EGL_PLATFORM_ANGLE_TYPE_ANGLE 0x3202 EGL_PLATFORM_ANGLE_TYPE_ANGLE 0x3203
EGL_PLATFORM_ANGLE_MAX_VERSION_MAJOR_ANGLE 0x3203 EGL_PLATFORM_ANGLE_MAX_VERSION_MAJOR_ANGLE 0x3204
EGL_PLATFORM_ANGLE_MAX_VERSION_MINOR_ANGLE 0x3204 EGL_PLATFORM_ANGLE_MAX_VERSION_MINOR_ANGLE 0x3205
Accepted as values for the EGL_PLATFORM_ANGLE_TYPE_ANGLE attribute: Accepted as values for the EGL_PLATFORM_ANGLE_TYPE_ANGLE attribute:
EGL_PLATFORM_ANGLE_TYPE_DEFAULT_ANGLE 0x3205 EGL_PLATFORM_ANGLE_TYPE_DEFAULT_ANGLE 0x3206
Additions to the EGL Specification Additions to the EGL Specification
......
...@@ -21,7 +21,7 @@ Status ...@@ -21,7 +21,7 @@ Status
Version Version
Version 1, 2014-06-05 Version 3, 2014-11-26
Number Number
...@@ -51,13 +51,19 @@ New Tokens ...@@ -51,13 +51,19 @@ New Tokens
Accepted as values for the EGL_PLATFORM_ANGLE_TYPE_ANGLE attribute: Accepted as values for the EGL_PLATFORM_ANGLE_TYPE_ANGLE attribute:
EGL_PLATFORM_ANGLE_TYPE_D3D9_ANGLE 0x3206 EGL_PLATFORM_ANGLE_TYPE_D3D9_ANGLE 0x3207
EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE 0x3207 EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE 0x3208
Accepted as an attribute name in the <attrib_list> argument of Accepted as an attribute name in the <attrib_list> argument of
eglGetPlatformDisplayEXT: eglGetPlatformDisplayEXT:
EGL_PLATFORM_ANGLE_USE_WARP_ANGLE 0x3208 EGL_PLATFORM_ANGLE_DEVICE_TYPE_ANGLE 0x3209
Accepted as values for the EGL_PLATFORM_ANGLE_DEVICE_TYPE_ANGLE attribute:
EGL_PLATFORM_ANGLE_DEVICE_TYPE_HARDWARE_ANGLE 0x320A
EGL_PLATFORM_ANGLE_DEVICE_TYPE_WARP_ANGLE 0x320B
EGL_PLATFORM_ANGLE_DEVICE_TYPE_REFERENCE_ANGLE 0x320C
Additions to the EGL Specification Additions to the EGL Specification
...@@ -80,16 +86,20 @@ New Behavior ...@@ -80,16 +86,20 @@ New Behavior
a D3D9 display. a D3D9 display.
If no <attrib_list> is specified to eglGetPlatformDisplayEXT, the value of If no <attrib_list> is specified to eglGetPlatformDisplayEXT, the value of
EGL_PLATFORM_ANGLE_USE_WARP_ANGLE is implicitly set to EGL_PLATFORM_ANGLE_DEVICE_TYPE_ANGLE is implicitly set to
EGL_FALSE. Otherwise, the value of EGL_PLATFORM_ANGLE_USE_WARP_ANGLE should EGL_PLATFORM_ANGLE_DEVICE_TYPE_HARDWARE_ANGLE. Otherwise, the value of
be: EGL_PLATFORM_ANGLE_DEVICE_TYPE_ANGLE should be:
- EGL_TRUE to request a WARP device. - EGL_PLATFORM_ANGLE_DEVICE_TYPE_HARDWARE_ANGLE to request a hardware
- EGL_FALSE to request a hardware accelerated device. accelerated device.
- EGL_PLATFORM_ANGLE_DEVICE_TYPE_WARP_ANGLE to request an
If EGL_PLATFORM_ANGLE_USE_WARP_ANGLE is set to EGL_TRUE and optimized software rasterizer.
EGL_PLATFORM_ANGLE_TYPE_ANGLE is not set to - EGL_PLATFORM_ANGLE_DEVICE_TYPE_REFERENCE_ANGLE to request a
EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE then an EGL_BAD_ATTRIBUTE error is reference rasterizer.
generated and EGL_NO_DISPLAY is returned.
If EGL_PLATFORM_ANGLE_DEVICE_TYPE_ANGLE is set to
EGL_PLATFORM_ANGLE_DEVICE_TYPE_WARP_ANGLE and EGL_PLATFORM_ANGLE_TYPE_ANGLE
is not set to EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE, an EGL_BAD_ATTRIBUTE
error is generated and EGL_NO_DISPLAY is returned.
Issues Issues
...@@ -103,3 +113,5 @@ Revision History ...@@ -103,3 +113,5 @@ Revision History
- Separate WARP devices into a new attribute instead of a platform type. - Separate WARP devices into a new attribute instead of a platform type.
- Moved descriptions of platforms and major/minor versions from - Moved descriptions of platforms and major/minor versions from
EGL_ANGLE_platform_angle spec to EGL_ANGLE_platform_angle_d3d. EGL_ANGLE_platform_angle spec to EGL_ANGLE_platform_angle_d3d.
Version 3, 2014-11-26 (Geoff Lang)
- Remove the USE_WARP bool and replace it with a DEVICE_TYPE enum.
...@@ -21,7 +21,7 @@ Status ...@@ -21,7 +21,7 @@ Status
Version Version
Version 1, 2014-06-05 Version 3, 2014-11-26
Number Number
...@@ -51,8 +51,8 @@ New Tokens ...@@ -51,8 +51,8 @@ New Tokens
Accepted as values for the EGL_PLATFORM_ANGLE_TYPE_ANGLE attribute: Accepted as values for the EGL_PLATFORM_ANGLE_TYPE_ANGLE attribute:
EGL_PLATFORM_ANGLE_TYPE_OPENGL_ANGLE 0x3209 EGL_PLATFORM_ANGLE_TYPE_OPENGL_ANGLE 0x320D
EGL_PLATFORM_ANGLE_TYPE_OPENGLES_ANGLE 0x320A EGL_PLATFORM_ANGLE_TYPE_OPENGLES_ANGLE 0x320E
Additions to the EGL Specification Additions to the EGL Specification
...@@ -80,3 +80,5 @@ Revision History ...@@ -80,3 +80,5 @@ Revision History
Version 2, 2014-10-27 (Geoff Lang) Version 2, 2014-10-27 (Geoff Lang)
- Moved descriptions of platforms and major/minor versions from - Moved descriptions of platforms and major/minor versions from
EGL_ANGLE_platform_angle spec to EGL_ANGLE_platform_angle_opengl. EGL_ANGLE_platform_angle spec to EGL_ANGLE_platform_angle_opengl.
Version 3, 2014-11-26 (Geoff Lang)
- Updated enum values.
...@@ -53,7 +53,7 @@ New Tokens ...@@ -53,7 +53,7 @@ New Tokens
Accepted as an attribute name in the <*attrib_list> argument to Accepted as an attribute name in the <*attrib_list> argument to
eglCreateContext: eglCreateContext:
EGL_CONTEXT_OPENGL_ROBUST_RESOURCE_INITIALIZATION_ANGLE 0x320D EGL_CONTEXT_OPENGL_ROBUST_RESOURCE_INITIALIZATION_ANGLE 0x320F
Additions to the EGL 1.5 Specification Additions to the EGL 1.5 Specification
......
...@@ -440,24 +440,27 @@ EGLAPI EGLBoolean EGLAPIENTRY eglQuerySurfacePointerANGLE (EGLDisplay dpy, EGLSu ...@@ -440,24 +440,27 @@ EGLAPI EGLBoolean EGLAPIENTRY eglQuerySurfacePointerANGLE (EGLDisplay dpy, EGLSu
#ifndef EGL_ANGLE_platform_angle #ifndef EGL_ANGLE_platform_angle
#define EGL_ANGLE_platform_angle 1 #define EGL_ANGLE_platform_angle 1
#define EGL_PLATFORM_ANGLE_ANGLE 0x3201 #define EGL_PLATFORM_ANGLE_ANGLE 0x3202
#define EGL_PLATFORM_ANGLE_TYPE_ANGLE 0x3202 #define EGL_PLATFORM_ANGLE_TYPE_ANGLE 0x3203
#define EGL_PLATFORM_ANGLE_MAX_VERSION_MAJOR_ANGLE 0x3203 #define EGL_PLATFORM_ANGLE_MAX_VERSION_MAJOR_ANGLE 0x3204
#define EGL_PLATFORM_ANGLE_MAX_VERSION_MINOR_ANGLE 0x3204 #define EGL_PLATFORM_ANGLE_MAX_VERSION_MINOR_ANGLE 0x3205
#define EGL_PLATFORM_ANGLE_TYPE_DEFAULT_ANGLE 0x3205 #define EGL_PLATFORM_ANGLE_TYPE_DEFAULT_ANGLE 0x3206
#endif /* EGL_ANGLE_platform_angle */ #endif /* EGL_ANGLE_platform_angle */
#ifndef EGL_ANGLE_platform_angle_d3d #ifndef EGL_ANGLE_platform_angle_d3d
#define EGL_ANGLE_platform_angle_d3d 1 #define EGL_ANGLE_platform_angle_d3d 1
#define EGL_PLATFORM_ANGLE_TYPE_D3D9_ANGLE 0x3206 #define EGL_PLATFORM_ANGLE_TYPE_D3D9_ANGLE 0x3207
#define EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE 0x3207 #define EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE 0x3208
#define EGL_PLATFORM_ANGLE_USE_WARP_ANGLE 0x3208 #define EGL_PLATFORM_ANGLE_DEVICE_TYPE_ANGLE 0x3209
#define EGL_PLATFORM_ANGLE_DEVICE_TYPE_HARDWARE_ANGLE 0x320A
#define EGL_PLATFORM_ANGLE_DEVICE_TYPE_WARP_ANGLE 0x320B
#define EGL_PLATFORM_ANGLE_DEVICE_TYPE_REFERENCE_ANGLE 0x320C
#endif /* EGL_ANGLE_platform_angle_d3d */ #endif /* EGL_ANGLE_platform_angle_d3d */
#ifndef EGL_ANGLE_platform_angle_opengl #ifndef EGL_ANGLE_platform_angle_opengl
#define EGL_ANGLE_platform_angle_opengl 1 #define EGL_ANGLE_platform_angle_opengl 1
#define EGL_PLATFORM_ANGLE_TYPE_OPENGL_ANGLE 0x3209 #define EGL_PLATFORM_ANGLE_TYPE_OPENGL_ANGLE 0x320D
#define EGL_PLATFORM_ANGLE_TYPE_OPENGLES_ANGLE 0x320A #define EGL_PLATFORM_ANGLE_TYPE_OPENGLES_ANGLE 0x320E
#endif /* EGL_ANGLE_platform_angle_opengl */ #endif /* EGL_ANGLE_platform_angle_opengl */
#ifndef EGL_ARM_pixmap_multisample_discard #ifndef EGL_ARM_pixmap_multisample_discard
......
...@@ -157,4 +157,7 @@ std::string FormatString(const char *fmt, ...); ...@@ -157,4 +157,7 @@ std::string FormatString(const char *fmt, ...);
#define GL_INT_64_ANGLEX 0x6ABE #define GL_INT_64_ANGLEX 0x6ABE
#define GL_STRUCT_ANGLEX 0x6ABF #define GL_STRUCT_ANGLEX 0x6ABF
// Hidden enum for the NULL D3D device type.
#define EGL_PLATFORM_ANGLE_DEVICE_TYPE_NULL_ANGLE 0x6AC0
#endif // COMMON_ANGLEUTILS_H_ #endif // COMMON_ANGLEUTILS_H_
...@@ -212,8 +212,29 @@ Renderer11::Renderer11(egl::Display *display) ...@@ -212,8 +212,29 @@ Renderer11::Renderer11(egl::Display *display)
mAvailableFeatureLevels.push_back(D3D_FEATURE_LEVEL_9_3); mAvailableFeatureLevels.push_back(D3D_FEATURE_LEVEL_9_3);
} }
mDriverType = (attributes.get(EGL_PLATFORM_ANGLE_USE_WARP_ANGLE, EGL_FALSE) == EGL_TRUE) ? D3D_DRIVER_TYPE_WARP EGLint requestedDeviceType = attributes.get(EGL_PLATFORM_ANGLE_DEVICE_TYPE_ANGLE,
: D3D_DRIVER_TYPE_HARDWARE; EGL_PLATFORM_ANGLE_DEVICE_TYPE_HARDWARE_ANGLE);
switch (requestedDeviceType)
{
case EGL_PLATFORM_ANGLE_DEVICE_TYPE_HARDWARE_ANGLE:
mDriverType = D3D_DRIVER_TYPE_HARDWARE;
break;
case EGL_PLATFORM_ANGLE_DEVICE_TYPE_WARP_ANGLE:
mDriverType = D3D_DRIVER_TYPE_WARP;
break;
case EGL_PLATFORM_ANGLE_DEVICE_TYPE_REFERENCE_ANGLE:
mDriverType = D3D_DRIVER_TYPE_REFERENCE;
break;
case EGL_PLATFORM_ANGLE_DEVICE_TYPE_NULL_ANGLE:
mDriverType = D3D_DRIVER_TYPE_NULL;
break;
default:
UNREACHABLE();
}
} }
Renderer11::~Renderer11() Renderer11::~Renderer11()
......
...@@ -50,8 +50,7 @@ ...@@ -50,8 +50,7 @@
#include <sstream> #include <sstream>
// Can also be enabled by defining FORCE_REF_RAST in the project's predefined macros #include <EGL/eglext.h>
#define REF_RAST 0
#if !defined(ANGLE_COMPILE_OPTIMIZATION_LEVEL) #if !defined(ANGLE_COMPILE_OPTIMIZATION_LEVEL)
#define ANGLE_COMPILE_OPTIMIZATION_LEVEL D3DCOMPILE_OPTIMIZATION_LEVEL3 #define ANGLE_COMPILE_OPTIMIZATION_LEVEL D3DCOMPILE_OPTIMIZATION_LEVEL3
...@@ -91,11 +90,26 @@ Renderer9::Renderer9(egl::Display *display) ...@@ -91,11 +90,26 @@ Renderer9::Renderer9(egl::Display *display)
mAdapter = D3DADAPTER_DEFAULT; mAdapter = D3DADAPTER_DEFAULT;
#if REF_RAST == 1 || defined(FORCE_REF_RAST) const egl::AttributeMap &attributes = display->getAttributeMap();
mDeviceType = D3DDEVTYPE_REF; EGLint requestedDeviceType = attributes.get(EGL_PLATFORM_ANGLE_DEVICE_TYPE_ANGLE,
#else EGL_PLATFORM_ANGLE_DEVICE_TYPE_HARDWARE_ANGLE);
switch (requestedDeviceType)
{
case EGL_PLATFORM_ANGLE_DEVICE_TYPE_HARDWARE_ANGLE:
mDeviceType = D3DDEVTYPE_HAL; mDeviceType = D3DDEVTYPE_HAL;
#endif break;
case EGL_PLATFORM_ANGLE_DEVICE_TYPE_REFERENCE_ANGLE:
mDeviceType = D3DDEVTYPE_REF;
break;
case EGL_PLATFORM_ANGLE_DEVICE_TYPE_NULL_ANGLE:
mDeviceType = D3DDEVTYPE_NULLREF;
break;
default:
UNREACHABLE();
}
mMaskedClearSavedState = NULL; mMaskedClearSavedState = NULL;
......
...@@ -143,9 +143,9 @@ EGLDisplay EGLAPIENTRY GetPlatformDisplayEXT(EGLenum platform, void *native_disp ...@@ -143,9 +143,9 @@ EGLDisplay EGLAPIENTRY GetPlatformDisplayEXT(EGLenum platform, void *native_disp
} }
EGLint platformType = EGL_PLATFORM_ANGLE_TYPE_DEFAULT_ANGLE; EGLint platformType = EGL_PLATFORM_ANGLE_TYPE_DEFAULT_ANGLE;
EGLint deviceType = EGL_PLATFORM_ANGLE_DEVICE_TYPE_HARDWARE_ANGLE;
bool majorVersionSpecified = false; bool majorVersionSpecified = false;
bool minorVersionSpecified = false; bool minorVersionSpecified = false;
bool requestedWARP = false;
if (attrib_list) if (attrib_list)
{ {
...@@ -198,7 +198,7 @@ EGLDisplay EGLAPIENTRY GetPlatformDisplayEXT(EGLenum platform, void *native_disp ...@@ -198,7 +198,7 @@ EGLDisplay EGLAPIENTRY GetPlatformDisplayEXT(EGLenum platform, void *native_disp
} }
break; break;
case EGL_PLATFORM_ANGLE_USE_WARP_ANGLE: case EGL_PLATFORM_ANGLE_DEVICE_TYPE_ANGLE:
if (!clientExtensions.platformANGLED3D) if (!clientExtensions.platformANGLED3D)
{ {
SetGlobalError(Error(EGL_SUCCESS)); SetGlobalError(Error(EGL_SUCCESS));
...@@ -207,16 +207,17 @@ EGLDisplay EGLAPIENTRY GetPlatformDisplayEXT(EGLenum platform, void *native_disp ...@@ -207,16 +207,17 @@ EGLDisplay EGLAPIENTRY GetPlatformDisplayEXT(EGLenum platform, void *native_disp
switch (curAttrib[1]) switch (curAttrib[1])
{ {
case EGL_FALSE: case EGL_PLATFORM_ANGLE_DEVICE_TYPE_HARDWARE_ANGLE:
case EGL_TRUE: case EGL_PLATFORM_ANGLE_DEVICE_TYPE_WARP_ANGLE:
case EGL_PLATFORM_ANGLE_DEVICE_TYPE_REFERENCE_ANGLE:
case EGL_PLATFORM_ANGLE_DEVICE_TYPE_NULL_ANGLE:
break; break;
default: default:
SetGlobalError(Error(EGL_SUCCESS)); SetGlobalError(Error(EGL_SUCCESS));
return EGL_NO_DISPLAY; return EGL_NO_DISPLAY;
} }
deviceType = curAttrib[1];
requestedWARP = (curAttrib[1] == EGL_TRUE);
break; break;
default: default:
...@@ -231,9 +232,11 @@ EGLDisplay EGLAPIENTRY GetPlatformDisplayEXT(EGLenum platform, void *native_disp ...@@ -231,9 +232,11 @@ EGLDisplay EGLAPIENTRY GetPlatformDisplayEXT(EGLenum platform, void *native_disp
return EGL_NO_DISPLAY; return EGL_NO_DISPLAY;
} }
if (platformType != EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE && requestedWARP) if (deviceType == EGL_PLATFORM_ANGLE_DEVICE_TYPE_WARP_ANGLE &&
platformType != EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE)
{ {
SetGlobalError(Error(EGL_BAD_ATTRIBUTE)); SetGlobalError(Error(EGL_BAD_ATTRIBUTE, "EGL_PLATFORM_ANGLE_DEVICE_TYPE_WARP_ANGLE requires a device type of "
"EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE."));
return EGL_NO_DISPLAY; return EGL_NO_DISPLAY;
} }
......
...@@ -5,11 +5,12 @@ ...@@ -5,11 +5,12 @@
// For example, they might be using the D3D11 renderer when the test is meant to be using the D3D9 renderer. // For example, they might be using the D3D11 renderer when the test is meant to be using the D3D9 renderer.
// Use this to select which configurations (e.g. which renderer, which GLES major version) these tests should be run against. // Use this to select which configurations (e.g. which renderer, which GLES major version) these tests should be run against.
ANGLE_TYPED_TEST_CASE(RendererTest, ES2_D3D9, ES2_D3D11, ES2_D3D11_WARP, ES3_D3D11, ES3_D3D11_WARP,
ES2_D3D11_FL11_0, ES2_D3D11_FL11_0_WARP, ES3_D3D11_FL11_0, ES3_D3D11_FL11_0_WARP, ANGLE_TYPED_TEST_CASE(RendererTest, ES2_D3D9, ES2_D3D11, ES2_D3D11_WARP, ES2_D3D11_REFERENCE, ES3_D3D11, ES3_D3D11_WARP, ES3_D3D11_REFERENCE,
ES2_D3D11_FL10_1, ES2_D3D11_FL10_1_WARP, ES3_D3D11_FL10_1, ES3_D3D11_FL10_1_WARP, ES2_D3D9_REFERENCE, ES2_D3D11_FL11_0, ES2_D3D11_FL11_0_WARP, ES2_D3D11_FL11_0_REFERENCE, ES3_D3D11_FL11_0, ES3_D3D11_FL11_0_WARP, ES3_D3D11_FL11_0_REFERENCE,
ES2_D3D11_FL10_0, ES2_D3D11_FL10_0_WARP, ES3_D3D11_FL10_0, ES3_D3D11_FL10_0_WARP, ES2_D3D11_FL10_1, ES2_D3D11_FL10_1_WARP, ES2_D3D11_FL10_1_REFERENCE, ES3_D3D11_FL10_1, ES3_D3D11_FL10_1_WARP, ES3_D3D11_FL10_1_REFERENCE,
ES2_D3D11_FL9_3, ES2_D3D11_FL9_3_WARP); ES2_D3D11_FL10_0, ES2_D3D11_FL10_0_WARP, ES2_D3D11_FL10_0_REFERENCE, ES3_D3D11_FL10_0, ES3_D3D11_FL10_0_WARP, ES3_D3D11_FL10_0_REFERENCE,
ES2_D3D11_FL9_3, ES2_D3D11_FL9_3_WARP, ES2_D3D11_FL9_3_REFERENCE);
template<typename T> template<typename T>
class RendererTest : public ANGLETest class RendererTest : public ANGLETest
...@@ -46,17 +47,17 @@ TYPED_TEST(RendererTest, RequestedRendererCreated) ...@@ -46,17 +47,17 @@ TYPED_TEST(RendererTest, RequestedRendererCreated)
ASSERT_NE(rendererString.find(std::string("direct3d9")), std::string::npos); ASSERT_NE(rendererString.find(std::string("direct3d9")), std::string::npos);
} }
// Ensure that the renderer uses WARP, if we requested it.
if (platform.useWarp == EGL_TRUE)
{
auto basicRenderPos = rendererString.find(std::string("microsoft basic render"));
auto softwareAdapterPos = rendererString.find(std::string("software adapter"));
ASSERT_TRUE(basicRenderPos != std::string::npos || softwareAdapterPos != std::string::npos);
}
// Ensure that the major and minor versions trigger expected behavior in D3D11 // Ensure that the major and minor versions trigger expected behavior in D3D11
if (platform.renderer == EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE) if (platform.renderer == EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE)
{ {
// Ensure that the renderer uses WARP, if we requested it.
if (platform.deviceType == EGL_PLATFORM_ANGLE_DEVICE_TYPE_WARP_ANGLE)
{
auto basicRenderPos = rendererString.find(std::string("microsoft basic render"));
auto softwareAdapterPos = rendererString.find(std::string("software adapter"));
ASSERT_TRUE(basicRenderPos != std::string::npos || softwareAdapterPos != std::string::npos);
}
std::vector<std::string> acceptableShaderModels; std::vector<std::string> acceptableShaderModels;
// When no specific major/minor version is requested, then ANGLE should return the highest possible feature level by default. // When no specific major/minor version is requested, then ANGLE should return the highest possible feature level by default.
...@@ -114,3 +115,11 @@ TYPED_TEST(RendererTest, RequestedRendererCreated) ...@@ -114,3 +115,11 @@ TYPED_TEST(RendererTest, RequestedRendererCreated)
ASSERT_NE(versionString.find(std::string("es 2.0")), std::string::npos); ASSERT_NE(versionString.find(std::string("es 2.0")), std::string::npos);
} }
} }
// Perform a simple operation (clear and read pixels) to verify the device is working
TYPED_TEST(RendererTest, SimpleOperation)
{
glClearColor(0.0f, 1.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
EXPECT_PIXEL_EQ(0, 0, 0, 255, 0, 255);
}
...@@ -21,7 +21,7 @@ EGLPlatformParameters::EGLPlatformParameters() ...@@ -21,7 +21,7 @@ EGLPlatformParameters::EGLPlatformParameters()
: renderer(EGL_PLATFORM_ANGLE_TYPE_DEFAULT_ANGLE), : renderer(EGL_PLATFORM_ANGLE_TYPE_DEFAULT_ANGLE),
majorVersion(EGL_DONT_CARE), majorVersion(EGL_DONT_CARE),
minorVersion(EGL_DONT_CARE), minorVersion(EGL_DONT_CARE),
useWarp(EGL_FALSE) deviceType(EGL_PLATFORM_ANGLE_DEVICE_TYPE_HARDWARE_ANGLE)
{ {
} }
...@@ -29,7 +29,7 @@ EGLPlatformParameters::EGLPlatformParameters(EGLint renderer) ...@@ -29,7 +29,7 @@ EGLPlatformParameters::EGLPlatformParameters(EGLint renderer)
: renderer(renderer), : renderer(renderer),
majorVersion(EGL_DONT_CARE), majorVersion(EGL_DONT_CARE),
minorVersion(EGL_DONT_CARE), minorVersion(EGL_DONT_CARE),
useWarp(EGL_FALSE) deviceType(EGL_PLATFORM_ANGLE_DEVICE_TYPE_HARDWARE_ANGLE)
{ {
} }
...@@ -37,7 +37,7 @@ EGLPlatformParameters::EGLPlatformParameters(EGLint renderer, EGLint majorVersio ...@@ -37,7 +37,7 @@ EGLPlatformParameters::EGLPlatformParameters(EGLint renderer, EGLint majorVersio
: renderer(renderer), : renderer(renderer),
majorVersion(majorVersion), majorVersion(majorVersion),
minorVersion(minorVersion), minorVersion(minorVersion),
useWarp(useWarp) deviceType(useWarp)
{ {
} }
...@@ -104,7 +104,7 @@ bool EGLWindow::initializeGL(OSWindow *osWindow) ...@@ -104,7 +104,7 @@ bool EGLWindow::initializeGL(OSWindow *osWindow)
EGL_PLATFORM_ANGLE_TYPE_ANGLE, mPlatform.renderer, EGL_PLATFORM_ANGLE_TYPE_ANGLE, mPlatform.renderer,
EGL_PLATFORM_ANGLE_MAX_VERSION_MAJOR_ANGLE, mPlatform.majorVersion, EGL_PLATFORM_ANGLE_MAX_VERSION_MAJOR_ANGLE, mPlatform.majorVersion,
EGL_PLATFORM_ANGLE_MAX_VERSION_MINOR_ANGLE, mPlatform.minorVersion, EGL_PLATFORM_ANGLE_MAX_VERSION_MINOR_ANGLE, mPlatform.minorVersion,
EGL_PLATFORM_ANGLE_USE_WARP_ANGLE, mPlatform.useWarp, EGL_PLATFORM_ANGLE_DEVICE_TYPE_ANGLE, mPlatform.deviceType,
EGL_NONE, EGL_NONE,
}; };
......
...@@ -30,11 +30,11 @@ struct EGLPlatformParameters ...@@ -30,11 +30,11 @@ struct EGLPlatformParameters
EGLint renderer; EGLint renderer;
EGLint majorVersion; EGLint majorVersion;
EGLint minorVersion; EGLint minorVersion;
EGLint useWarp; EGLint deviceType;
EGLPlatformParameters(); EGLPlatformParameters();
explicit EGLPlatformParameters(EGLint renderer); explicit EGLPlatformParameters(EGLint renderer);
EGLPlatformParameters(EGLint renderer, EGLint majorVersion, EGLint minorVersion, EGLint useWarp); EGLPlatformParameters(EGLint renderer, EGLint majorVersion, EGLint minorVersion, EGLint deviceType);
}; };
class EGLWindow class EGLWindow
......
...@@ -25,19 +25,26 @@ struct Platform ...@@ -25,19 +25,26 @@ struct Platform
#define DEFINE_ANGLE_TEST_PLATFORM(name, platform, majorVersion, minorVersion, useWarp) \ #define DEFINE_ANGLE_TEST_PLATFORM(name, platform, majorVersion, minorVersion, useWarp) \
struct name : public Platform<platform, majorVersion, minorVersion, useWarp> { } struct name : public Platform<platform, majorVersion, minorVersion, useWarp> { }
DEFINE_ANGLE_TEST_PLATFORM(D3D9, EGL_PLATFORM_ANGLE_TYPE_D3D9_ANGLE, EGL_DONT_CARE, EGL_DONT_CARE, EGL_FALSE); DEFINE_ANGLE_TEST_PLATFORM(D3D9, EGL_PLATFORM_ANGLE_TYPE_D3D9_ANGLE, EGL_DONT_CARE, EGL_DONT_CARE, EGL_PLATFORM_ANGLE_DEVICE_TYPE_HARDWARE_ANGLE);
DEFINE_ANGLE_TEST_PLATFORM(D3D9_REFERENCE, EGL_PLATFORM_ANGLE_TYPE_D3D9_ANGLE, EGL_DONT_CARE, EGL_DONT_CARE, EGL_PLATFORM_ANGLE_DEVICE_TYPE_REFERENCE_ANGLE);
DEFINE_ANGLE_TEST_PLATFORM(D3D11, EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE, EGL_DONT_CARE, EGL_DONT_CARE, EGL_FALSE);
DEFINE_ANGLE_TEST_PLATFORM(D3D11_FL11_0, EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE, 11, 0, EGL_FALSE); DEFINE_ANGLE_TEST_PLATFORM(D3D11, EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE, EGL_DONT_CARE, EGL_DONT_CARE, EGL_PLATFORM_ANGLE_DEVICE_TYPE_HARDWARE_ANGLE);
DEFINE_ANGLE_TEST_PLATFORM(D3D11_FL10_1, EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE, 10, 1, EGL_FALSE); DEFINE_ANGLE_TEST_PLATFORM(D3D11_FL11_0, EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE, 11, 0, EGL_PLATFORM_ANGLE_DEVICE_TYPE_HARDWARE_ANGLE);
DEFINE_ANGLE_TEST_PLATFORM(D3D11_FL10_0, EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE, 10, 0, EGL_FALSE); DEFINE_ANGLE_TEST_PLATFORM(D3D11_FL10_1, EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE, 10, 1, EGL_PLATFORM_ANGLE_DEVICE_TYPE_HARDWARE_ANGLE);
DEFINE_ANGLE_TEST_PLATFORM(D3D11_FL9_3, EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE, 9, 3, EGL_FALSE); DEFINE_ANGLE_TEST_PLATFORM(D3D11_FL10_0, EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE, 10, 0, EGL_PLATFORM_ANGLE_DEVICE_TYPE_HARDWARE_ANGLE);
DEFINE_ANGLE_TEST_PLATFORM(D3D11_FL9_3, EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE, 9, 3, EGL_PLATFORM_ANGLE_DEVICE_TYPE_HARDWARE_ANGLE);
DEFINE_ANGLE_TEST_PLATFORM(D3D11_WARP, EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE, EGL_DONT_CARE, EGL_DONT_CARE, EGL_TRUE);
DEFINE_ANGLE_TEST_PLATFORM(D3D11_FL11_0_WARP, EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE, 11, 0, EGL_TRUE); DEFINE_ANGLE_TEST_PLATFORM(D3D11_WARP, EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE, EGL_DONT_CARE, EGL_DONT_CARE, EGL_PLATFORM_ANGLE_DEVICE_TYPE_WARP_ANGLE);
DEFINE_ANGLE_TEST_PLATFORM(D3D11_FL10_1_WARP, EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE, 10, 1, EGL_TRUE); DEFINE_ANGLE_TEST_PLATFORM(D3D11_FL11_0_WARP, EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE, 11, 0, EGL_PLATFORM_ANGLE_DEVICE_TYPE_WARP_ANGLE);
DEFINE_ANGLE_TEST_PLATFORM(D3D11_FL10_0_WARP, EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE, 10, 0, EGL_TRUE); DEFINE_ANGLE_TEST_PLATFORM(D3D11_FL10_1_WARP, EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE, 10, 1, EGL_PLATFORM_ANGLE_DEVICE_TYPE_WARP_ANGLE);
DEFINE_ANGLE_TEST_PLATFORM(D3D11_FL9_3_WARP, EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE, 9, 3, EGL_TRUE); DEFINE_ANGLE_TEST_PLATFORM(D3D11_FL10_0_WARP, EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE, 10, 0, EGL_PLATFORM_ANGLE_DEVICE_TYPE_WARP_ANGLE);
DEFINE_ANGLE_TEST_PLATFORM(D3D11_FL9_3_WARP, EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE, 9, 3, EGL_PLATFORM_ANGLE_DEVICE_TYPE_WARP_ANGLE);
DEFINE_ANGLE_TEST_PLATFORM(D3D11_REFERENCE, EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE, EGL_DONT_CARE, EGL_DONT_CARE, EGL_PLATFORM_ANGLE_DEVICE_TYPE_REFERENCE_ANGLE);
DEFINE_ANGLE_TEST_PLATFORM(D3D11_FL11_0_REFERENCE, EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE, 11, 0, EGL_PLATFORM_ANGLE_DEVICE_TYPE_REFERENCE_ANGLE);
DEFINE_ANGLE_TEST_PLATFORM(D3D11_FL10_1_REFERENCE, EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE, 10, 1, EGL_PLATFORM_ANGLE_DEVICE_TYPE_REFERENCE_ANGLE);
DEFINE_ANGLE_TEST_PLATFORM(D3D11_FL10_0_REFERENCE, EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE, 10, 0, EGL_PLATFORM_ANGLE_DEVICE_TYPE_REFERENCE_ANGLE);
DEFINE_ANGLE_TEST_PLATFORM(D3D11_FL9_3_REFERENCE, EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE, 9, 3, EGL_PLATFORM_ANGLE_DEVICE_TYPE_REFERENCE_ANGLE);
#undef DEFINE_ANGLE_TEST_PLATFORM #undef DEFINE_ANGLE_TEST_PLATFORM
...@@ -57,29 +64,41 @@ struct TestFixture ...@@ -57,29 +64,41 @@ struct TestFixture
}; };
// Typedefs of common fixture types // Typedefs of common fixture types
typedef TestFixture<2, D3D9> ES2_D3D9; typedef TestFixture<2, D3D9> ES2_D3D9;
typedef TestFixture<2, D3D9_REFERENCE> ES2_D3D9_REFERENCE;
typedef TestFixture<2, D3D11> ES2_D3D11;
typedef TestFixture<2, D3D11_FL11_0> ES2_D3D11_FL11_0; typedef TestFixture<2, D3D11> ES2_D3D11;
typedef TestFixture<2, D3D11_FL10_1> ES2_D3D11_FL10_1; typedef TestFixture<2, D3D11_FL11_0> ES2_D3D11_FL11_0;
typedef TestFixture<2, D3D11_FL10_0> ES2_D3D11_FL10_0; typedef TestFixture<2, D3D11_FL10_1> ES2_D3D11_FL10_1;
typedef TestFixture<2, D3D11_FL9_3> ES2_D3D11_FL9_3; typedef TestFixture<2, D3D11_FL10_0> ES2_D3D11_FL10_0;
typedef TestFixture<2, D3D11_FL9_3> ES2_D3D11_FL9_3;
typedef TestFixture<2, D3D11_WARP> ES2_D3D11_WARP;
typedef TestFixture<2, D3D11_FL11_0_WARP> ES2_D3D11_FL11_0_WARP; typedef TestFixture<2, D3D11_WARP> ES2_D3D11_WARP;
typedef TestFixture<2, D3D11_FL10_1_WARP> ES2_D3D11_FL10_1_WARP; typedef TestFixture<2, D3D11_FL11_0_WARP> ES2_D3D11_FL11_0_WARP;
typedef TestFixture<2, D3D11_FL10_0_WARP> ES2_D3D11_FL10_0_WARP; typedef TestFixture<2, D3D11_FL10_1_WARP> ES2_D3D11_FL10_1_WARP;
typedef TestFixture<2, D3D11_FL9_3_WARP> ES2_D3D11_FL9_3_WARP; typedef TestFixture<2, D3D11_FL10_0_WARP> ES2_D3D11_FL10_0_WARP;
typedef TestFixture<2, D3D11_FL9_3_WARP> ES2_D3D11_FL9_3_WARP;
typedef TestFixture<3, D3D11> ES3_D3D11;
typedef TestFixture<3, D3D11_FL11_0> ES3_D3D11_FL11_0; typedef TestFixture<2, D3D11_REFERENCE> ES2_D3D11_REFERENCE;
typedef TestFixture<3, D3D11_FL10_1> ES3_D3D11_FL10_1; typedef TestFixture<2, D3D11_FL11_0_REFERENCE> ES2_D3D11_FL11_0_REFERENCE;
typedef TestFixture<3, D3D11_FL10_0> ES3_D3D11_FL10_0; typedef TestFixture<2, D3D11_FL10_1_REFERENCE> ES2_D3D11_FL10_1_REFERENCE;
typedef TestFixture<2, D3D11_FL10_0_REFERENCE> ES2_D3D11_FL10_0_REFERENCE;
typedef TestFixture<3, D3D11_WARP> ES3_D3D11_WARP; typedef TestFixture<2, D3D11_FL9_3_REFERENCE> ES2_D3D11_FL9_3_REFERENCE;
typedef TestFixture<3, D3D11_FL11_0_WARP> ES3_D3D11_FL11_0_WARP;
typedef TestFixture<3, D3D11_FL10_1_WARP> ES3_D3D11_FL10_1_WARP; typedef TestFixture<3, D3D11> ES3_D3D11;
typedef TestFixture<3, D3D11_FL10_0_WARP> ES3_D3D11_FL10_0_WARP; typedef TestFixture<3, D3D11_FL11_0> ES3_D3D11_FL11_0;
typedef TestFixture<3, D3D11_FL10_1> ES3_D3D11_FL10_1;
typedef TestFixture<3, D3D11_FL10_0> ES3_D3D11_FL10_0;
typedef TestFixture<3, D3D11_WARP> ES3_D3D11_WARP;
typedef TestFixture<3, D3D11_FL11_0_WARP> ES3_D3D11_FL11_0_WARP;
typedef TestFixture<3, D3D11_FL10_1_WARP> ES3_D3D11_FL10_1_WARP;
typedef TestFixture<3, D3D11_FL10_0_WARP> ES3_D3D11_FL10_0_WARP;
typedef TestFixture<3, D3D11_REFERENCE> ES3_D3D11_REFERENCE;
typedef TestFixture<3, D3D11_FL11_0_REFERENCE> ES3_D3D11_FL11_0_REFERENCE;
typedef TestFixture<3, D3D11_FL10_1_REFERENCE> ES3_D3D11_FL10_1_REFERENCE;
typedef TestFixture<3, D3D11_FL10_0_REFERENCE> ES3_D3D11_FL10_0_REFERENCE;
#define ANGLE_TYPED_TEST_CASE(testName, ...) \ #define ANGLE_TYPED_TEST_CASE(testName, ...) \
typedef ::testing::Types<__VA_ARGS__> Helper##testName; \ typedef ::testing::Types<__VA_ARGS__> Helper##testName; \
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment