Commit dd323e95 by Geoff Lang

Only run tests that the current hardware can support.

For each config, determine if a context can be created at test instantiation time. This allows skipping of ES3 tests when the hardware does not support ES3. Updated the perf_tests to use the EGLPlatformParameters struct so that they can be filtered in the same way. Change-Id: If664604b057cec4005eb4b63bebd83cd4964b7b2 Reviewed-on: https://chromium-review.googlesource.com/276460Reviewed-by: 's avatarCorentin Wallez <cwallez@chromium.org> Tested-by: 's avatarGeoff Lang <geofflang@chromium.org>
parent 34482831
...@@ -58,7 +58,9 @@ ...@@ -58,7 +58,9 @@
'<(angle_path)/src/tests/egl_tests/EGLSurfaceTest.cpp', '<(angle_path)/src/tests/egl_tests/EGLSurfaceTest.cpp',
'<(angle_path)/src/tests/test_utils/ANGLETest.cpp', '<(angle_path)/src/tests/test_utils/ANGLETest.cpp',
'<(angle_path)/src/tests/test_utils/ANGLETest.h', '<(angle_path)/src/tests/test_utils/ANGLETest.h',
'<(angle_path)/src/tests/test_utils/angle_test_configs.cpp',
'<(angle_path)/src/tests/test_utils/angle_test_configs.h', '<(angle_path)/src/tests/test_utils/angle_test_configs.h',
'<(angle_path)/src/tests/test_utils/angle_test_instantiate.cpp',
'<(angle_path)/src/tests/test_utils/angle_test_instantiate.h', '<(angle_path)/src/tests/test_utils/angle_test_instantiate.h',
], ],
'angle_end2end_tests_win_sources': 'angle_end2end_tests_win_sources':
......
...@@ -25,6 +25,9 @@ ...@@ -25,6 +25,9 @@
'<(angle_path)/src/tests/perf_tests/TexSubImage.cpp', '<(angle_path)/src/tests/perf_tests/TexSubImage.cpp',
'<(angle_path)/src/tests/perf_tests/third_party/perf/perf_test.cc', '<(angle_path)/src/tests/perf_tests/third_party/perf/perf_test.cc',
'<(angle_path)/src/tests/perf_tests/third_party/perf/perf_test.h', '<(angle_path)/src/tests/perf_tests/third_party/perf/perf_test.h',
'<(angle_path)/src/tests/test_utils/angle_test_configs.cpp',
'<(angle_path)/src/tests/test_utils/angle_test_configs.h',
'<(angle_path)/src/tests/test_utils/angle_test_instantiate.cpp',
'<(angle_path)/src/tests/test_utils/angle_test_instantiate.h', '<(angle_path)/src/tests/test_utils/angle_test_instantiate.h',
], ],
'angle_perf_tests_win_sources': 'angle_perf_tests_win_sources':
......
...@@ -46,7 +46,7 @@ class EGLContextCompatibilityTest : public testing::TestWithParam<PlatformParame ...@@ -46,7 +46,7 @@ class EGLContextCompatibilityTest : public testing::TestWithParam<PlatformParame
EGLint dispattrs[] = EGLint dispattrs[] =
{ {
EGL_PLATFORM_ANGLE_TYPE_ANGLE, GetParam().mEGLPlatformParameters.renderer, EGL_PLATFORM_ANGLE_TYPE_ANGLE, GetParam().getRenderer(),
EGL_NONE EGL_NONE
}; };
mDisplay = eglGetPlatformDisplayEXT(EGL_PLATFORM_ANGLE_ANGLE, EGL_DEFAULT_DISPLAY, dispattrs); mDisplay = eglGetPlatformDisplayEXT(EGL_PLATFORM_ANGLE_ANGLE, EGL_DEFAULT_DISPLAY, dispattrs);
......
...@@ -18,14 +18,14 @@ class EGLQueryContextTest : public testing::TestWithParam<PlatformParameters> ...@@ -18,14 +18,14 @@ class EGLQueryContextTest : public testing::TestWithParam<PlatformParameters>
public: public:
void SetUp() override void SetUp() override
{ {
int clientVersion = GetParam().mClientVersion; int clientVersion = GetParam().majorVersion;
PFNEGLGETPLATFORMDISPLAYEXTPROC eglGetPlatformDisplayEXT = reinterpret_cast<PFNEGLGETPLATFORMDISPLAYEXTPROC>(eglGetProcAddress("eglGetPlatformDisplayEXT")); PFNEGLGETPLATFORMDISPLAYEXTPROC eglGetPlatformDisplayEXT = reinterpret_cast<PFNEGLGETPLATFORMDISPLAYEXTPROC>(eglGetProcAddress("eglGetPlatformDisplayEXT"));
EXPECT_TRUE(eglGetPlatformDisplayEXT != NULL); EXPECT_TRUE(eglGetPlatformDisplayEXT != NULL);
EGLint dispattrs[] = EGLint dispattrs[] =
{ {
EGL_PLATFORM_ANGLE_TYPE_ANGLE, GetParam().mEGLPlatformParameters.renderer, EGL_PLATFORM_ANGLE_TYPE_ANGLE, GetParam().getRenderer(),
EGL_NONE EGL_NONE
}; };
mDisplay = eglGetPlatformDisplayEXT(EGL_PLATFORM_ANGLE_ANGLE, EGL_DEFAULT_DISPLAY, dispattrs); mDisplay = eglGetPlatformDisplayEXT(EGL_PLATFORM_ANGLE_ANGLE, EGL_DEFAULT_DISPLAY, dispattrs);
...@@ -96,7 +96,7 @@ TEST_P(EGLQueryContextTest, GetClientVersion) ...@@ -96,7 +96,7 @@ TEST_P(EGLQueryContextTest, GetClientVersion)
{ {
EGLint clientVersion; EGLint clientVersion;
EXPECT_TRUE(eglQueryContext(mDisplay, mContext, EGL_CONTEXT_CLIENT_VERSION, &clientVersion) != EGL_FALSE); EXPECT_TRUE(eglQueryContext(mDisplay, mContext, EGL_CONTEXT_CLIENT_VERSION, &clientVersion) != EGL_FALSE);
EXPECT_TRUE(clientVersion == GetParam().mClientVersion); EXPECT_TRUE(clientVersion == GetParam().majorVersion);
} }
TEST_P(EGLQueryContextTest, GetRenderBufferNoSurface) TEST_P(EGLQueryContextTest, GetRenderBufferNoSurface)
......
...@@ -26,7 +26,7 @@ protected: ...@@ -26,7 +26,7 @@ protected:
TEST_P(DiscardFramebufferEXTTest, ExtensionEnabled) TEST_P(DiscardFramebufferEXTTest, ExtensionEnabled)
{ {
EGLPlatformParameters platform = GetParam().mEGLPlatformParameters; EGLPlatformParameters platform = GetParam().eglParameters;
if (platform.renderer == EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE) if (platform.renderer == EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE)
{ {
......
...@@ -77,7 +77,7 @@ class FramebufferFormatsTest : public ANGLETest ...@@ -77,7 +77,7 @@ class FramebufferFormatsTest : public ANGLETest
return; return;
} }
GLint clientVersion = GetParam().mClientVersion; int clientVersion = getClientVersion();
if (clientVersion < minESVersion) if (clientVersion < minESVersion)
{ {
return; return;
...@@ -220,7 +220,7 @@ TEST_P(FramebufferFormatsTest, RenderbufferMultisample_DEPTH32F_STENCIL8) ...@@ -220,7 +220,7 @@ TEST_P(FramebufferFormatsTest, RenderbufferMultisample_DEPTH32F_STENCIL8)
TEST_P(FramebufferFormatsTest, RenderbufferMultisample_STENCIL_INDEX8) TEST_P(FramebufferFormatsTest, RenderbufferMultisample_STENCIL_INDEX8)
{ {
// TODO(geofflang): Figure out how to support GLSTENCIL_INDEX8 on desktop GL // TODO(geofflang): Figure out how to support GLSTENCIL_INDEX8 on desktop GL
if (GetParam().mEGLPlatformParameters.renderer == EGL_PLATFORM_ANGLE_TYPE_OPENGL_ANGLE) if (GetParam().getRenderer() == EGL_PLATFORM_ANGLE_TYPE_OPENGL_ANGLE)
{ {
std::cout << "Test skipped on Desktop OpenGL." << std::endl; std::cout << "Test skipped on Desktop OpenGL." << std::endl;
return; return;
......
...@@ -551,7 +551,7 @@ TEST_P(GLSLTest, InvariantVaryingOut) ...@@ -551,7 +551,7 @@ TEST_P(GLSLTest, InvariantVaryingOut)
TEST_P(GLSLTest, FrontFacingAndVarying) TEST_P(GLSLTest, FrontFacingAndVarying)
{ {
EGLPlatformParameters platform = GetParam().mEGLPlatformParameters; EGLPlatformParameters platform = GetParam().eglParameters;
// Disable this test on D3D11 feature level 9_3, since gl_FrontFacing isn't supported. // Disable this test on D3D11 feature level 9_3, since gl_FrontFacing isn't supported.
if (platform.renderer == EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE) if (platform.renderer == EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE)
......
...@@ -33,7 +33,7 @@ TEST_P(RendererTest, RequestedRendererCreated) ...@@ -33,7 +33,7 @@ TEST_P(RendererTest, RequestedRendererCreated)
std::string versionString = std::string(reinterpret_cast<const char*>(glGetString(GL_VERSION))); std::string versionString = std::string(reinterpret_cast<const char*>(glGetString(GL_VERSION)));
std::transform(versionString.begin(), versionString.end(), versionString.begin(), ::tolower); std::transform(versionString.begin(), versionString.end(), versionString.begin(), ::tolower);
const EGLPlatformParameters &platform = GetParam().mEGLPlatformParameters; const EGLPlatformParameters &platform = GetParam().eglParameters;
// Ensure that the renderer string contains D3D11, if we requested a D3D11 renderer. // Ensure that the renderer string contains D3D11, if we requested a D3D11 renderer.
if (platform.renderer == EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE) if (platform.renderer == EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE)
...@@ -101,7 +101,7 @@ TEST_P(RendererTest, RequestedRendererCreated) ...@@ -101,7 +101,7 @@ TEST_P(RendererTest, RequestedRendererCreated)
ASSERT_TRUE(found); ASSERT_TRUE(found);
} }
EGLint glesMajorVersion = GetParam().mClientVersion; EGLint glesMajorVersion = GetParam().majorVersion;
// Ensure that the renderer string contains GL ES 3.0, if we requested a GL ES 3.0 // Ensure that the renderer string contains GL ES 3.0, if we requested a GL ES 3.0
if (glesMajorVersion == 3) if (glesMajorVersion == 3)
......
...@@ -70,7 +70,7 @@ void ANGLEPerfTest::TearDown() ...@@ -70,7 +70,7 @@ void ANGLEPerfTest::TearDown()
std::string RenderTestParams::suffix() const std::string RenderTestParams::suffix() const
{ {
switch (requestedRenderer) switch (getRenderer())
{ {
case EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE: return "_d3d11"; case EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE: return "_d3d11";
case EGL_PLATFORM_ANGLE_TYPE_D3D9_ANGLE: return "_d3d9"; case EGL_PLATFORM_ANGLE_TYPE_D3D9_ANGLE: return "_d3d9";
...@@ -81,11 +81,6 @@ std::string RenderTestParams::suffix() const ...@@ -81,11 +81,6 @@ std::string RenderTestParams::suffix() const
} }
} }
EGLint RenderTestParams::getRenderer() const
{
return requestedRenderer;
}
ANGLERenderTest::ANGLERenderTest(const std::string &name, const RenderTestParams &testParams) ANGLERenderTest::ANGLERenderTest(const std::string &name, const RenderTestParams &testParams)
: ANGLEPerfTest(name, testParams.suffix()), : ANGLEPerfTest(name, testParams.suffix()),
mTestParams(testParams), mTestParams(testParams),
...@@ -104,16 +99,11 @@ ANGLERenderTest::~ANGLERenderTest() ...@@ -104,16 +99,11 @@ ANGLERenderTest::~ANGLERenderTest()
void ANGLERenderTest::SetUp() void ANGLERenderTest::SetUp()
{ {
EGLPlatformParameters platformParams(mTestParams.requestedRenderer,
EGL_DONT_CARE,
EGL_DONT_CARE,
mTestParams.deviceType);
mOSWindow = CreateOSWindow(); mOSWindow = CreateOSWindow();
mEGLWindow = new EGLWindow(mTestParams.widowWidth, mEGLWindow = new EGLWindow(mTestParams.widowWidth,
mTestParams.windowHeight, mTestParams.windowHeight,
mTestParams.glesMajorVersion, mTestParams.majorVersion,
platformParams); mTestParams.eglParameters);
mEGLWindow->setSwapInterval(0); mEGLWindow->setSwapInterval(0);
if (!mOSWindow->initialize(mName, mEGLWindow->getWidth(), mEGLWindow->getHeight())) if (!mOSWindow->initialize(mName, mEGLWindow->getWidth(), mEGLWindow->getHeight()))
......
...@@ -21,6 +21,7 @@ ...@@ -21,6 +21,7 @@
#include "Timer.h" #include "Timer.h"
#include "common/angleutils.h" #include "common/angleutils.h"
#include "common/debug.h" #include "common/debug.h"
#include "test_utils/angle_test_configs.h"
#include "test_utils/angle_test_instantiate.h" #include "test_utils/angle_test_instantiate.h"
class Event; class Event;
...@@ -52,15 +53,10 @@ class ANGLEPerfTest : public testing::Test, angle::NonCopyable ...@@ -52,15 +53,10 @@ class ANGLEPerfTest : public testing::Test, angle::NonCopyable
int mNumFrames; int mNumFrames;
}; };
struct RenderTestParams struct RenderTestParams : public angle::PlatformParameters
{ {
virtual std::string suffix() const; virtual std::string suffix() const;
EGLint getRenderer() const;
EGLint requestedRenderer;
EGLint deviceType;
EGLint glesMajorVersion;
EGLint widowWidth; EGLint widowWidth;
EGLint windowHeight; EGLint windowHeight;
}; };
......
...@@ -12,6 +12,8 @@ ...@@ -12,6 +12,8 @@
#include "ANGLEPerfTest.h" #include "ANGLEPerfTest.h"
#include "shader_utils.h" #include "shader_utils.h"
using namespace angle;
namespace namespace
{ {
...@@ -20,7 +22,8 @@ struct BufferSubDataParams final : public RenderTestParams ...@@ -20,7 +22,8 @@ struct BufferSubDataParams final : public RenderTestParams
BufferSubDataParams() BufferSubDataParams()
{ {
// Common default values // Common default values
glesMajorVersion = 2; majorVersion = 2;
minorVersion = 0;
widowWidth = 512; widowWidth = 512;
windowHeight = 512; windowHeight = 512;
updateSize = 3000; updateSize = 3000;
...@@ -336,8 +339,7 @@ void BufferSubDataBenchmark::drawBenchmark() ...@@ -336,8 +339,7 @@ void BufferSubDataBenchmark::drawBenchmark()
BufferSubDataParams BufferUpdateD3D11Params() BufferSubDataParams BufferUpdateD3D11Params()
{ {
BufferSubDataParams params; BufferSubDataParams params;
params.requestedRenderer = EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE; params.eglParameters = egl_platform::D3D11();
params.deviceType = EGL_PLATFORM_ANGLE_DEVICE_TYPE_HARDWARE_ANGLE;
params.vertexType = GL_FLOAT; params.vertexType = GL_FLOAT;
params.vertexComponentCount = 4; params.vertexComponentCount = 4;
params.vertexNormalized = GL_FALSE; params.vertexNormalized = GL_FALSE;
...@@ -347,8 +349,7 @@ BufferSubDataParams BufferUpdateD3D11Params() ...@@ -347,8 +349,7 @@ BufferSubDataParams BufferUpdateD3D11Params()
BufferSubDataParams BufferUpdateD3D9Params() BufferSubDataParams BufferUpdateD3D9Params()
{ {
BufferSubDataParams params; BufferSubDataParams params;
params.requestedRenderer = EGL_PLATFORM_ANGLE_TYPE_D3D9_ANGLE; params.eglParameters = egl_platform::D3D9();
params.deviceType = EGL_PLATFORM_ANGLE_DEVICE_TYPE_HARDWARE_ANGLE;
params.vertexType = GL_FLOAT; params.vertexType = GL_FLOAT;
params.vertexComponentCount = 4; params.vertexComponentCount = 4;
params.vertexNormalized = GL_FALSE; params.vertexNormalized = GL_FALSE;
...@@ -358,8 +359,7 @@ BufferSubDataParams BufferUpdateD3D9Params() ...@@ -358,8 +359,7 @@ BufferSubDataParams BufferUpdateD3D9Params()
BufferSubDataParams BufferUpdateOpenGLParams() BufferSubDataParams BufferUpdateOpenGLParams()
{ {
BufferSubDataParams params; BufferSubDataParams params;
params.requestedRenderer = EGL_PLATFORM_ANGLE_TYPE_OPENGL_ANGLE; params.eglParameters = egl_platform::OPENGL();
params.deviceType = EGL_DONT_CARE;
params.vertexType = GL_FLOAT; params.vertexType = GL_FLOAT;
params.vertexComponentCount = 4; params.vertexComponentCount = 4;
params.vertexNormalized = GL_FALSE; params.vertexNormalized = GL_FALSE;
......
...@@ -12,6 +12,8 @@ ...@@ -12,6 +12,8 @@
#include "ANGLEPerfTest.h" #include "ANGLEPerfTest.h"
#include "shader_utils.h" #include "shader_utils.h"
using namespace angle;
namespace namespace
{ {
...@@ -25,7 +27,8 @@ struct DrawCallPerfParams final : public RenderTestParams ...@@ -25,7 +27,8 @@ struct DrawCallPerfParams final : public RenderTestParams
// Common default options // Common default options
DrawCallPerfParams() DrawCallPerfParams()
{ {
glesMajorVersion = 2; majorVersion = 2;
minorVersion = 0;
widowWidth = 256; widowWidth = 256;
windowHeight = 256; windowHeight = 256;
iterations = 50; iterations = 50;
...@@ -44,7 +47,7 @@ struct DrawCallPerfParams final : public RenderTestParams ...@@ -44,7 +47,7 @@ struct DrawCallPerfParams final : public RenderTestParams
strstr << "_validation_only"; strstr << "_validation_only";
} }
if (deviceType == EGL_PLATFORM_ANGLE_DEVICE_TYPE_NULL_ANGLE) if (eglParameters.deviceType == EGL_PLATFORM_ANGLE_DEVICE_TYPE_NULL_ANGLE)
{ {
strstr << "_null"; strstr << "_null";
} }
...@@ -189,32 +192,28 @@ void DrawCallPerfBenchmark::drawBenchmark() ...@@ -189,32 +192,28 @@ void DrawCallPerfBenchmark::drawBenchmark()
DrawCallPerfParams DrawCallPerfD3D11Params(bool useNullDevice) DrawCallPerfParams DrawCallPerfD3D11Params(bool useNullDevice)
{ {
DrawCallPerfParams params; DrawCallPerfParams params;
params.requestedRenderer = EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE; params.eglParameters = egl_platform::D3D11_NULL();
params.deviceType = NullDeviceType(useNullDevice);
return params; return params;
} }
DrawCallPerfParams DrawCallPerfD3D9Params(bool useNullDevice) DrawCallPerfParams DrawCallPerfD3D9Params(bool useNullDevice)
{ {
DrawCallPerfParams params; DrawCallPerfParams params;
params.requestedRenderer = EGL_PLATFORM_ANGLE_TYPE_D3D9_ANGLE; params.eglParameters = egl_platform::DEFAULT_NULL();
params.deviceType = NullDeviceType(useNullDevice);
return params; return params;
} }
DrawCallPerfParams DrawCallPerfOpenGLParams(bool useNullDevice) DrawCallPerfParams DrawCallPerfOpenGLParams(bool useNullDevice)
{ {
DrawCallPerfParams params; DrawCallPerfParams params;
params.requestedRenderer = EGL_PLATFORM_ANGLE_TYPE_OPENGL_ANGLE; params.eglParameters = egl_platform::D3D9_NULL();
params.deviceType = NullDeviceType(useNullDevice);
return params; return params;
} }
DrawCallPerfParams DrawCallPerfValidationOnly() DrawCallPerfParams DrawCallPerfValidationOnly()
{ {
DrawCallPerfParams params; DrawCallPerfParams params;
params.requestedRenderer = EGL_PLATFORM_ANGLE_TYPE_DEFAULT_ANGLE; params.eglParameters = egl_platform::OPENGL();
params.deviceType = EGL_PLATFORM_ANGLE_DEVICE_TYPE_NULL_ANGLE;
params.iterations = 100; params.iterations = 100;
params.numTris = 0; params.numTris = 0;
params.runTimeSeconds = 5.0; params.runTimeSeconds = 5.0;
......
...@@ -35,7 +35,7 @@ EGLInitializePerfTest::EGLInitializePerfTest() ...@@ -35,7 +35,7 @@ EGLInitializePerfTest::EGLInitializePerfTest()
mOSWindow(nullptr), mOSWindow(nullptr),
mDisplay(EGL_NO_DISPLAY) mDisplay(EGL_NO_DISPLAY)
{ {
auto platform = GetParam().mEGLPlatformParameters; auto platform = GetParam().eglParameters;
std::vector<EGLint> displayAttributes; std::vector<EGLint> displayAttributes;
displayAttributes.push_back(EGL_PLATFORM_ANGLE_TYPE_ANGLE); displayAttributes.push_back(EGL_PLATFORM_ANGLE_TYPE_ANGLE);
......
...@@ -12,6 +12,8 @@ ...@@ -12,6 +12,8 @@
#include "ANGLEPerfTest.h" #include "ANGLEPerfTest.h"
#include "shader_utils.h" #include "shader_utils.h"
using namespace angle;
namespace namespace
{ {
...@@ -180,11 +182,11 @@ void IndexConversionPerfTest::drawBenchmark() ...@@ -180,11 +182,11 @@ void IndexConversionPerfTest::drawBenchmark()
IndexConversionPerfParams IndexConversionPerfD3D11Params() IndexConversionPerfParams IndexConversionPerfD3D11Params()
{ {
IndexConversionPerfParams params; IndexConversionPerfParams params;
params.glesMajorVersion = 2; params.eglParameters = egl_platform::D3D11_NULL();
params.majorVersion = 2;
params.minorVersion = 0;
params.widowWidth = 256; params.widowWidth = 256;
params.windowHeight = 256; params.windowHeight = 256;
params.requestedRenderer = EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE;
params.deviceType = EGL_PLATFORM_ANGLE_DEVICE_TYPE_NULL_ANGLE;
params.iterations = 15; params.iterations = 15;
params.numIndexTris = 3000; params.numIndexTris = 3000;
return params; return params;
......
...@@ -14,6 +14,8 @@ ...@@ -14,6 +14,8 @@
#include "shader_utils.h" #include "shader_utils.h"
#include "random_utils.h" #include "random_utils.h"
using namespace angle;
namespace namespace
{ {
...@@ -22,7 +24,8 @@ struct PointSpritesParams final : public RenderTestParams ...@@ -22,7 +24,8 @@ struct PointSpritesParams final : public RenderTestParams
PointSpritesParams() PointSpritesParams()
{ {
// Common default params // Common default params
glesMajorVersion = 2; majorVersion = 2;
minorVersion = 0;
widowWidth = 1280; widowWidth = 1280;
windowHeight = 720; windowHeight = 720;
iterations = 10; iterations = 10;
...@@ -202,24 +205,21 @@ void PointSpritesBenchmark::drawBenchmark() ...@@ -202,24 +205,21 @@ void PointSpritesBenchmark::drawBenchmark()
PointSpritesParams D3D11Params() PointSpritesParams D3D11Params()
{ {
PointSpritesParams params; PointSpritesParams params;
params.requestedRenderer = EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE; params.eglParameters = egl_platform::D3D11();
params.deviceType = EGL_PLATFORM_ANGLE_DEVICE_TYPE_HARDWARE_ANGLE;
return params; return params;
} }
PointSpritesParams D3D9Params() PointSpritesParams D3D9Params()
{ {
PointSpritesParams params; PointSpritesParams params;
params.requestedRenderer = EGL_PLATFORM_ANGLE_TYPE_D3D9_ANGLE; params.eglParameters = egl_platform::D3D9();
params.deviceType = EGL_PLATFORM_ANGLE_DEVICE_TYPE_HARDWARE_ANGLE;
return params; return params;
} }
PointSpritesParams OpenGLParams() PointSpritesParams OpenGLParams()
{ {
PointSpritesParams params; PointSpritesParams params;
params.requestedRenderer = EGL_PLATFORM_ANGLE_TYPE_OPENGL_ANGLE; params.eglParameters = egl_platform::OPENGL();
params.deviceType = EGL_DONT_CARE;
return params; return params;
} }
......
...@@ -12,6 +12,8 @@ ...@@ -12,6 +12,8 @@
#include "ANGLEPerfTest.h" #include "ANGLEPerfTest.h"
#include "shader_utils.h" #include "shader_utils.h"
using namespace angle;
namespace namespace
{ {
...@@ -20,7 +22,8 @@ struct TexSubImageParams final : public RenderTestParams ...@@ -20,7 +22,8 @@ struct TexSubImageParams final : public RenderTestParams
TexSubImageParams() TexSubImageParams()
{ {
// Common default parameters // Common default parameters
glesMajorVersion = 2; majorVersion = 2;
minorVersion = 0;
widowWidth = 512; widowWidth = 512;
windowHeight = 512; windowHeight = 512;
...@@ -271,24 +274,21 @@ void TexSubImageBenchmark::drawBenchmark() ...@@ -271,24 +274,21 @@ void TexSubImageBenchmark::drawBenchmark()
TexSubImageParams D3D11Params() TexSubImageParams D3D11Params()
{ {
TexSubImageParams params; TexSubImageParams params;
params.requestedRenderer = EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE; params.eglParameters = egl_platform::D3D11();
params.deviceType = EGL_PLATFORM_ANGLE_DEVICE_TYPE_HARDWARE_ANGLE;
return params; return params;
} }
TexSubImageParams D3D9Params() TexSubImageParams D3D9Params()
{ {
TexSubImageParams params; TexSubImageParams params;
params.requestedRenderer = EGL_PLATFORM_ANGLE_TYPE_D3D9_ANGLE; params.eglParameters = egl_platform::D3D9();
params.deviceType = EGL_PLATFORM_ANGLE_DEVICE_TYPE_HARDWARE_ANGLE;
return params; return params;
} }
TexSubImageParams OpenGLParams() TexSubImageParams OpenGLParams()
{ {
TexSubImageParams params; TexSubImageParams params;
params.requestedRenderer = EGL_PLATFORM_ANGLE_TYPE_OPENGL_ANGLE; params.eglParameters = egl_platform::OPENGL();
params.deviceType = EGL_DONT_CARE;
return params; return params;
} }
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
ANGLETest::ANGLETest() ANGLETest::ANGLETest()
: mEGLWindow(nullptr) : mEGLWindow(nullptr)
{ {
mEGLWindow = new EGLWindow(1280, 720, GetParam().mClientVersion, GetParam().mEGLPlatformParameters); mEGLWindow = new EGLWindow(1280, 720, GetParam().majorVersion, GetParam().eglParameters);
} }
ANGLETest::~ANGLETest() ANGLETest::~ANGLETest()
......
//
// Copyright (c) 2014 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// angle_test_instantiate.cpp: Adds support for filtering parameterized
// tests by platform, so we skip unsupported configs.
#include "test_utils/angle_test_instantiate.h"
#include <map>
#include <iostream>
#include "EGLWindow.h"
#include "OSWindow.h"
#include "test_utils/angle_test_configs.h"
namespace angle
{
bool IsPlatformAvailable(const PlatformParameters &param)
{
switch (param.getRenderer())
{
case EGL_PLATFORM_ANGLE_TYPE_DEFAULT_ANGLE:
break;
case EGL_PLATFORM_ANGLE_TYPE_D3D9_ANGLE:
#ifndef ANGLE_ENABLE_D3D9
return false;
#endif
break;
case EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE:
#ifndef ANGLE_ENABLE_D3D11
return false;
#endif
break;
case EGL_PLATFORM_ANGLE_TYPE_OPENGL_ANGLE:
case EGL_PLATFORM_ANGLE_TYPE_OPENGLES_ANGLE:
#ifndef ANGLE_ENABLE_OPENGL
return false;
#endif
break;
default:
UNREACHABLE();
break;
}
static std::map<PlatformParameters, bool> paramAvailabilityCache;
auto iter = paramAvailabilityCache.find(param);
if (iter != paramAvailabilityCache.end())
{
return iter->second;
}
else
{
OSWindow *osWindow = CreateOSWindow();
bool result = osWindow->initialize("CONFIG_TESTER", 1, 1);
if (result)
{
EGLWindow *eglWindow = new EGLWindow(1, 1, param.majorVersion, param.eglParameters);
result = eglWindow->initializeGL(osWindow);
eglWindow->destroyGL();
SafeDelete(eglWindow);
}
osWindow->destroy();
SafeDelete(osWindow);
paramAvailabilityCache[param] = result;
if (!result)
{
std::cout << "Skipping tests using configuration " << param << " because it is not available." << std::endl;
}
return result;
}
}
}
...@@ -15,9 +15,12 @@ ...@@ -15,9 +15,12 @@
namespace angle namespace angle
{ {
struct PlatformParameters;
bool IsPlatformAvailable(const PlatformParameters &param);
// This functions is used to filter which tests should be registered, // This functions is used to filter which tests should be registered,
// internally it T::getRenderer() const that should be implemented for test // T must be or inherit from angle::PlatformParameters.
// parameter types.
template <typename T> template <typename T>
std::vector<T> FilterTestParams(const T *params, size_t numParams) std::vector<T> FilterTestParams(const T *params, size_t numParams)
{ {
...@@ -25,34 +28,9 @@ std::vector<T> FilterTestParams(const T *params, size_t numParams) ...@@ -25,34 +28,9 @@ std::vector<T> FilterTestParams(const T *params, size_t numParams)
for (size_t i = 0; i < numParams; i++) for (size_t i = 0; i < numParams; i++)
{ {
switch (params[i].getRenderer()) if (IsPlatformAvailable(params[i]))
{ {
case EGL_PLATFORM_ANGLE_TYPE_DEFAULT_ANGLE:
filtered.push_back(params[i]); filtered.push_back(params[i]);
break;
case EGL_PLATFORM_ANGLE_TYPE_D3D9_ANGLE:
#if defined(ANGLE_ENABLE_D3D9)
filtered.push_back(params[i]);
#endif
break;
case EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE:
#if defined(ANGLE_ENABLE_D3D11)
filtered.push_back(params[i]);
#endif
break;
case EGL_PLATFORM_ANGLE_TYPE_OPENGL_ANGLE:
case EGL_PLATFORM_ANGLE_TYPE_OPENGLES_ANGLE:
#if defined(ANGLE_ENABLE_OPENGL)
filtered.push_back(params[i]);
#endif
break;
default:
UNREACHABLE();
break;
} }
} }
......
...@@ -47,6 +47,25 @@ EGLPlatformParameters::EGLPlatformParameters(EGLint renderer, EGLint majorVersio ...@@ -47,6 +47,25 @@ EGLPlatformParameters::EGLPlatformParameters(EGLint renderer, EGLint majorVersio
{ {
} }
bool operator<(const EGLPlatformParameters &a, const EGLPlatformParameters &b)
{
if (a.renderer != b.renderer)
{
return a.renderer < b.renderer;
}
if (a.majorVersion != b.majorVersion)
{
return a.majorVersion < b.majorVersion;
}
if (a.minorVersion != b.minorVersion)
{
return a.minorVersion < b.minorVersion;
}
return a.deviceType < b.deviceType;
}
EGLWindow::EGLWindow(size_t width, size_t height, EGLint glesMajorVersion, const EGLPlatformParameters &platform) EGLWindow::EGLWindow(size_t width, size_t height, EGLint glesMajorVersion, const EGLPlatformParameters &platform)
: mDisplay(EGL_NO_DISPLAY), : mDisplay(EGL_NO_DISPLAY),
......
...@@ -43,6 +43,8 @@ struct EGLPlatformParameters ...@@ -43,6 +43,8 @@ struct EGLPlatformParameters
EGLPlatformParameters(EGLint renderer, EGLint majorVersion, EGLint minorVersion, EGLint deviceType); EGLPlatformParameters(EGLint renderer, EGLint majorVersion, EGLint minorVersion, EGLint deviceType);
}; };
bool operator<(const EGLPlatformParameters &a, const EGLPlatformParameters &b);
class EGLWindow : angle::NonCopyable class EGLWindow : angle::NonCopyable
{ {
public: public:
......
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