Commit 86170f33 by Jamie Madill

Add a GLES3 GoogleTest target.

BUG=510822 BUG=angleproject:1071 Change-Id: Ia2e6d0ac71e61dbed75e55994d2bf874a75fabd6 Reviewed-on: https://chromium-review.googlesource.com/286831Reviewed-by: 's avatarCorentin Wallez <cwallez@chromium.org> Reviewed-by: 's avatarKenneth Russell <kbr@chromium.org> Tested-by: 's avatarJamie Madill <jmadill@chromium.org>
parent 3cf11ff4
...@@ -1123,6 +1123,13 @@ ...@@ -1123,6 +1123,13 @@
[ [
'ANGLE_DEQP_GLES2_TESTS', 'ANGLE_DEQP_GLES2_TESTS',
], ],
'direct_dependent_settings':
{
'defines':
[
'ANGLE_DEQP_GLES2_TESTS',
],
},
'sources': 'sources':
[ [
'<@(deqp_gles2_sources)', '<@(deqp_gles2_sources)',
...@@ -1143,6 +1150,13 @@ ...@@ -1143,6 +1150,13 @@
[ [
'ANGLE_DEQP_GLES3_TESTS', 'ANGLE_DEQP_GLES3_TESTS',
], ],
'direct_dependent_settings':
{
'defines':
[
'ANGLE_DEQP_GLES3_TESTS',
],
},
'sources': 'sources':
[ [
'<@(deqp_gles3_sources)', '<@(deqp_gles3_sources)',
...@@ -1158,7 +1172,6 @@ ...@@ -1158,7 +1172,6 @@
'type': 'none', 'type': 'none',
'dependencies': 'dependencies':
[ [
'angle_deqp_libgles2',
'angle_test_support', 'angle_test_support',
'<(angle_path)/util/util.gyp:angle_util', '<(angle_path)/util/util.gyp:angle_util',
], ],
...@@ -1216,6 +1229,21 @@ ...@@ -1216,6 +1229,21 @@
], ],
}, },
}, },
'conditions':
[
['OS=="linux"',
{
'ldflags':
[
'<!@(pkg-config --libs-only-L --libs-only-other libpci)',
],
'libraries':
[
'<!@(pkg-config --libs-only-l libpci)',
],
}],
],
}, },
'conditions': 'conditions':
...@@ -1264,30 +1292,32 @@ ...@@ -1264,30 +1292,32 @@
}, },
{ {
'target_name': 'angle_deqp_googletest', 'target_name': 'angle_deqp_gtest_gles2_tests',
'type': 'executable', 'type': 'executable',
'includes': [ '../../build/common_defines.gypi', ], 'includes': [ '../../build/common_defines.gypi', ],
'dependencies': 'dependencies':
[ [
'angle_deqp_gtest_support', 'angle_deqp_gtest_support',
'angle_deqp_libgles2',
], ],
'sources': 'sources':
[ [
'deqp_support/angle_deqp_gtest_main.cpp', 'deqp_support/angle_deqp_gtest_main.cpp',
], ],
'conditions': },
{
'target_name': 'angle_deqp_gtest_gles3_tests',
'type': 'executable',
'includes': [ '../../build/common_defines.gypi', ],
'dependencies':
[ [
['OS=="linux"', 'angle_deqp_gtest_support',
{ 'angle_deqp_libgles3',
'ldflags': ],
[ 'sources':
'<!@(pkg-config --libs-only-L --libs-only-other libpci)', [
], 'deqp_support/angle_deqp_gtest_main.cpp',
'libraries':
[
'<!@(pkg-config --libs-only-l libpci)',
],
}],
], ],
}, },
], # targets ], # targets
......
...@@ -21,10 +21,22 @@ ...@@ -21,10 +21,22 @@
namespace namespace
{ {
const char *g_CaseListFiles[] =
{
"dEQP-GLES2-cases.txt.gz",
"dEQP-GLES3-cases.txt.gz",
};
const char *g_TestExpectationsFiles[] =
{
"deqp_test_expectations.txt",
"deqp_test_expectations.txt",
};
class dEQPCaseList class dEQPCaseList
{ {
public: public:
dEQPCaseList(const std::string &caseListPath, const std::string &testExpectationsPath); dEQPCaseList(size_t testModuleIndex);
struct CaseInfo struct CaseInfo
{ {
...@@ -53,42 +65,25 @@ class dEQPCaseList ...@@ -53,42 +65,25 @@ class dEQPCaseList
return mCaseInfoList.size(); return mCaseInfoList.size();
} }
static dEQPCaseList *GetInstance();
static void FreeInstance();
private: private:
std::vector<CaseInfo> mCaseInfoList; std::vector<CaseInfo> mCaseInfoList;
gpu::GPUTestExpectationsParser mTestExpectationsParser; gpu::GPUTestExpectationsParser mTestExpectationsParser;
gpu::GPUTestBotConfig mTestConfig; gpu::GPUTestBotConfig mTestConfig;
static dEQPCaseList *mInstance;
}; };
// static dEQPCaseList::dEQPCaseList(size_t testModuleIndex)
dEQPCaseList *dEQPCaseList::mInstance = nullptr;
// static
dEQPCaseList *dEQPCaseList::GetInstance()
{ {
if (mInstance == nullptr) std::string exeDir = angle::GetExecutableDirectory();
{
std::string exeDir = angle::GetExecutableDirectory();
std::string caseListPath = exeDir + "/deqp_support/dEQP-GLES2-cases.txt.gz";
std::string testExpectationsPath = exeDir + "/deqp_support/deqp_test_expectations.txt";
mInstance = new dEQPCaseList(caseListPath, testExpectationsPath);
}
return mInstance;
}
// Not currently called, assumed to be freed on program exit. std::stringstream caseListPathStr;
// static caseListPathStr << exeDir << "/deqp_support/" << g_CaseListFiles[testModuleIndex];
void dEQPCaseList::FreeInstance() std::string caseListPath = caseListPathStr.str();
{
SafeDelete(mInstance); std::stringstream testExpectationsPathStr;
} testExpectationsPathStr << exeDir << "/deqp_support/"
<< g_TestExpectationsFiles[testModuleIndex];
std::string testExpectationsPath = testExpectationsPathStr.str();
dEQPCaseList::dEQPCaseList(const std::string &caseListPath, const std::string &testExpectationsPath)
{
if (!mTestExpectationsParser.LoadTestExpectationsFromFile(testExpectationsPath)) if (!mTestExpectationsParser.LoadTestExpectationsFromFile(testExpectationsPath))
{ {
std::cerr << "Failed to load test expectations." << std::endl; std::cerr << "Failed to load test expectations." << std::endl;
...@@ -147,17 +142,29 @@ dEQPCaseList::dEQPCaseList(const std::string &caseListPath, const std::string &t ...@@ -147,17 +142,29 @@ dEQPCaseList::dEQPCaseList(const std::string &caseListPath, const std::string &t
} }
} }
class dEQP_GLES2 : public testing::TestWithParam<size_t> template <size_t TestModuleIndex>
class dEQPTest : public testing::TestWithParam<size_t>
{ {
protected: public:
dEQP_GLES2() {} static testing::internal::ParamGenerator<size_t> GetTestingRange()
{
return testing::Range<size_t>(0, GetCaseList().numCases());
}
static const dEQPCaseList &GetCaseList()
{
static dEQPCaseList sCaseList(TestModuleIndex);
return sCaseList;
}
protected:
void runTest() void runTest()
{ {
const auto &caseInfo = dEQPCaseList::GetInstance()->getCaseInfo(GetParam()); const auto &caseInfo = GetCaseList().getCaseInfo(GetParam());
std::cout << caseInfo.mDEQPName << std::endl; std::cout << caseInfo.mDEQPName << std::endl;
bool result = deqp_libtester_run(caseInfo.mDEQPName.c_str()); bool result = deqp_libtester_run(caseInfo.mDEQPName.c_str());
if (caseInfo.mExpectation == gpu::GPUTestExpectationsParser::kGpuTestPass) if (caseInfo.mExpectation == gpu::GPUTestExpectationsParser::kGpuTestPass)
{ {
EXPECT_TRUE(result); EXPECT_TRUE(result);
...@@ -169,17 +176,31 @@ class dEQP_GLES2 : public testing::TestWithParam<size_t> ...@@ -169,17 +176,31 @@ class dEQP_GLES2 : public testing::TestWithParam<size_t>
} }
}; };
class dEQP_GLES2 : public dEQPTest<0>
{
};
class dEQP_GLES3 : public dEQPTest<1>
{
};
#ifdef ANGLE_DEQP_GLES2_TESTS
// TODO(jmadill): add different platform configs, or ability to choose platform // TODO(jmadill): add different platform configs, or ability to choose platform
TEST_P(dEQP_GLES2, Default) TEST_P(dEQP_GLES2, Default)
{ {
runTest(); runTest();
} }
testing::internal::ParamGenerator<size_t> GetTestingRange() INSTANTIATE_TEST_CASE_P(, dEQP_GLES2, dEQP_GLES2::GetTestingRange());
#endif
#ifdef ANGLE_DEQP_GLES3_TESTS
TEST_P(dEQP_GLES3, Default)
{ {
return testing::Range<size_t>(0, dEQPCaseList::GetInstance()->numCases()); runTest();
} }
INSTANTIATE_TEST_CASE_P(, dEQP_GLES2, GetTestingRange()); INSTANTIATE_TEST_CASE_P(, dEQP_GLES3, dEQP_GLES3::GetTestingRange());
#endif
} // anonymous namespace } // anonymous namespace
...@@ -36,7 +36,6 @@ ANGLEPlatform::ANGLEPlatform() ...@@ -36,7 +36,6 @@ ANGLEPlatform::ANGLEPlatform()
angle::SetLowPriorityProcess(); angle::SetLowPriorityProcess();
#if (DE_OS == DE_OS_WIN32) #if (DE_OS == DE_OS_WIN32)
#if defined(ANGLE_DEQP_GLES2_TESTS) || defined(ANGLE_DEQP_GLES3_TESTS)
std::vector<eglw::EGLAttrib> d3d11Attribs; std::vector<eglw::EGLAttrib> d3d11Attribs;
d3d11Attribs.push_back(EGL_PLATFORM_ANGLE_TYPE_ANGLE); d3d11Attribs.push_back(EGL_PLATFORM_ANGLE_TYPE_ANGLE);
d3d11Attribs.push_back(EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE); d3d11Attribs.push_back(EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE);
...@@ -47,9 +46,7 @@ ANGLEPlatform::ANGLEPlatform() ...@@ -47,9 +46,7 @@ ANGLEPlatform::ANGLEPlatform()
auto *d3d11Factory = new ANGLENativeDisplayFactory( auto *d3d11Factory = new ANGLENativeDisplayFactory(
"angle-d3d11", "ANGLE D3D11 Display", d3d11Attribs, &mEvents); "angle-d3d11", "ANGLE D3D11 Display", d3d11Attribs, &mEvents);
m_nativeDisplayFactoryRegistry.registerFactory(d3d11Factory); m_nativeDisplayFactoryRegistry.registerFactory(d3d11Factory);
#endif // defined(ANGLE_DEQP_GLES2_TESTS) || defined(ANGLE_DEQP_GLES3_TESTS)
#if defined(ANGLE_DEQP_GLES2_TESTS)
std::vector<eglw::EGLAttrib> d3d9Attribs; std::vector<eglw::EGLAttrib> d3d9Attribs;
d3d9Attribs.push_back(EGL_PLATFORM_ANGLE_TYPE_ANGLE); d3d9Attribs.push_back(EGL_PLATFORM_ANGLE_TYPE_ANGLE);
d3d9Attribs.push_back(EGL_PLATFORM_ANGLE_TYPE_D3D9_ANGLE); d3d9Attribs.push_back(EGL_PLATFORM_ANGLE_TYPE_D3D9_ANGLE);
...@@ -75,10 +72,8 @@ ANGLEPlatform::ANGLEPlatform() ...@@ -75,10 +72,8 @@ ANGLEPlatform::ANGLEPlatform()
auto *d3d1193Factory = new ANGLENativeDisplayFactory( auto *d3d1193Factory = new ANGLENativeDisplayFactory(
"angle-d3d11-fl93", "ANGLE D3D11 FL9_3 Display", d3d1193Attribs, &mEvents); "angle-d3d11-fl93", "ANGLE D3D11 FL9_3 Display", d3d1193Attribs, &mEvents);
m_nativeDisplayFactoryRegistry.registerFactory(d3d1193Factory); m_nativeDisplayFactoryRegistry.registerFactory(d3d1193Factory);
#endif // defined(ANGLE_DEQP_GLES2_TESTS)
#endif // (DE_OS == DE_OS_WIN32) #endif // (DE_OS == DE_OS_WIN32)
#if defined(ANGLE_DEQP_GLES2_TESTS)
std::vector<eglw::EGLAttrib> glAttribs; std::vector<eglw::EGLAttrib> glAttribs;
glAttribs.push_back(EGL_PLATFORM_ANGLE_TYPE_ANGLE); glAttribs.push_back(EGL_PLATFORM_ANGLE_TYPE_ANGLE);
glAttribs.push_back(EGL_PLATFORM_ANGLE_TYPE_OPENGL_ANGLE); glAttribs.push_back(EGL_PLATFORM_ANGLE_TYPE_OPENGL_ANGLE);
...@@ -87,7 +82,6 @@ ANGLEPlatform::ANGLEPlatform() ...@@ -87,7 +82,6 @@ ANGLEPlatform::ANGLEPlatform()
auto *glFactory = new ANGLENativeDisplayFactory( auto *glFactory = new ANGLENativeDisplayFactory(
"angle-gl", "ANGLE OpenGL Display", glAttribs, &mEvents); "angle-gl", "ANGLE OpenGL Display", glAttribs, &mEvents);
m_nativeDisplayFactoryRegistry.registerFactory(glFactory); m_nativeDisplayFactoryRegistry.registerFactory(glFactory);
#endif // defined(ANGLE_DEQP_GLES2_TESTS)
m_contextFactoryRegistry.registerFactory(new eglu::GLContextFactory(m_nativeDisplayFactoryRegistry)); m_contextFactoryRegistry.registerFactory(new eglu::GLContextFactory(m_nativeDisplayFactoryRegistry));
......
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