Commit a2f043d8 by Jamie Madill Committed by Commit Bot

dEQP: Implement platform error handling.

Also downgrades several Vulkan UNIMPLEMENTED() to WARN(). Also downgrades a couple D3D-specific errors to warnings. Also downgrades an undefined behaviour integer clear error to warning. Also includes suppressions for failing D3D11 ES 3.1 SSBO tests. Also includes suppressions for failing Android GLES format tests. Also includes suppressions for failing Android Vulkan buffer tests. Bug: angleproject:2552 Bug: angleproject:2567 Bug: angleproject:1951 Bug: angleproject:2405 Change-Id: Ie619085021d42012cd578b669f7ff4252ca41a58 Reviewed-on: https://chromium-review.googlesource.com/1062791 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarYuly Novikov <ynovikov@chromium.org>
parent 569b9cb9
...@@ -526,11 +526,11 @@ gl::Error Clear11::clearFramebuffer(const gl::Context *context, ...@@ -526,11 +526,11 @@ gl::Error Clear11::clearFramebuffer(const gl::Context *context,
formatInfo.componentType == GL_UNSIGNED_NORMALIZED || formatInfo.componentType == GL_UNSIGNED_NORMALIZED ||
formatInfo.componentType == GL_SIGNED_NORMALIZED)) formatInfo.componentType == GL_SIGNED_NORMALIZED))
{ {
ERR() << "It is undefined behaviour to clear a render buffer which is not " WARN() << "It is undefined behaviour to clear a render buffer which is not "
"normalized fixed point or floating-point to floating point values (color " "normalized fixed point or floating-point to floating point values (color "
"attachment " "attachment "
<< colorAttachmentIndex << " has internal format " << attachment.getFormat() << colorAttachmentIndex << " has internal format " << attachment.getFormat()
<< ")."; << ").";
} }
if ((formatInfo.redBits == 0 || !clearParams.colorMaskRed) && if ((formatInfo.redBits == 0 || !clearParams.colorMaskRed) &&
......
...@@ -116,12 +116,12 @@ gl::Error ContextVk::initialize() ...@@ -116,12 +116,12 @@ gl::Error ContextVk::initialize()
gl::Error ContextVk::flush(const gl::Context *context) gl::Error ContextVk::flush(const gl::Context *context)
{ {
// TODO(jmadill): Flush will need to insert a semaphore for the next flush to wait on. // TODO(jmadill): Multiple flushes will need to insert semaphores. http://anglebug.com/2504
UNIMPLEMENTED();
// dEQP tests rely on having no errors thrown at the end of the test and they always call // dEQP tests rely on having no errors thrown at the end of the test and they always call
// flush at the end of the their tests. Just returning NoError until we implement flush // flush at the end of the their tests. Just returning NoError until we implement flush
// allow us to work on enabling many tests in the meantime. // allow us to work on enabling many tests in the meantime.
WARN() << "Flush is unimplemented. http://anglebug.com/2504";
return gl::NoError(); return gl::NoError();
} }
......
...@@ -255,7 +255,7 @@ void VertexArrayVk::syncDirtyAttrib(const gl::VertexAttribute &attrib, ...@@ -255,7 +255,7 @@ void VertexArrayVk::syncDirtyAttrib(const gl::VertexAttribute &attrib,
} }
else else
{ {
UNIMPLEMENTED(); WARN() << "Default vertex attributes unimplemented. http://anglebug.com/2444";
} }
} }
...@@ -319,7 +319,7 @@ void VertexArrayVk::updatePackedInputDescriptions(const RendererVk *rendererVk) ...@@ -319,7 +319,7 @@ void VertexArrayVk::updatePackedInputDescriptions(const RendererVk *rendererVk)
} }
else else
{ {
UNIMPLEMENTED(); WARN() << "Default vertex attributes unimplemented. http://anglebug.com/2444";
} }
} }
......
...@@ -2720,8 +2720,8 @@ bool ValidateDrawBase(Context *context, PrimitiveMode mode, GLsizei count) ...@@ -2720,8 +2720,8 @@ bool ValidateDrawBase(Context *context, PrimitiveMode mode, GLsizei count)
{ {
if (!extensions.webglCompatibility) if (!extensions.webglCompatibility)
{ {
ERR() << "This ANGLE implementation does not support separate front/back " WARN() << "This ANGLE implementation does not support separate front/back "
"stencil writemasks, reference values, or stencil mask values."; "stencil writemasks, reference values, or stencil mask values.";
} }
ANGLE_VALIDATION_ERR(context, InvalidOperation(), StencilReferenceMaskOrMismatch); ANGLE_VALIDATION_ERR(context, InvalidOperation(), StencilReferenceMaskOrMismatch);
return false; return false;
......
...@@ -4644,7 +4644,7 @@ bool ValidateBlendFuncSeparate(Context *context, ...@@ -4644,7 +4644,7 @@ bool ValidateBlendFuncSeparate(Context *context,
"Simultaneous use of GL_CONSTANT_ALPHA/GL_ONE_MINUS_CONSTANT_ALPHA and " "Simultaneous use of GL_CONSTANT_ALPHA/GL_ONE_MINUS_CONSTANT_ALPHA and "
"GL_CONSTANT_COLOR/GL_ONE_MINUS_CONSTANT_COLOR not supported by this " "GL_CONSTANT_COLOR/GL_ONE_MINUS_CONSTANT_COLOR not supported by this "
"implementation."; "implementation.";
ERR() << msg; WARN() << msg;
} }
context->handleError(InvalidOperation() << msg); context->handleError(InvalidOperation() << msg);
return false; return false;
......
...@@ -518,7 +518,6 @@ if (build_angle_gles1_conform_tests) { ...@@ -518,7 +518,6 @@ if (build_angle_gles1_conform_tests) {
### dEQP tests ### dEQP tests
###----------------------------------------------------- ###-----------------------------------------------------
# TODO(jmadill): Other platforms.
if (build_angle_deqp_tests) { if (build_angle_deqp_tests) {
deqp_gypi = deqp_gypi =
exec_script("//build/gypi_to_gn.py", exec_script("//build/gypi_to_gn.py",
...@@ -618,8 +617,10 @@ if (build_angle_deqp_tests) { ...@@ -618,8 +617,10 @@ if (build_angle_deqp_tests) {
angle_root + ":angle_common", angle_root + ":angle_common",
angle_root + ":angle_util", angle_root + ":angle_util",
angle_root + ":libEGL${angle_libs_suffix}", angle_root + ":libEGL${angle_libs_suffix}",
angle_root + ":libGLESv2${angle_libs_suffix}",
"//third_party/libpng:libpng", "//third_party/libpng:libpng",
] ]
defines = [ "ANGLE_EGL_LIBRARY_NAME=\"libEGL${angle_libs_suffix}\"" ] defines = [ "ANGLE_EGL_LIBRARY_NAME=\"libEGL${angle_libs_suffix}\"" ]
configs -= deqp_undefine_configs configs -= deqp_undefine_configs
......
...@@ -20,10 +20,23 @@ ...@@ -20,10 +20,23 @@
#include "common/platform.h" #include "common/platform.h"
#include "common/string_utils.h" #include "common/string_utils.h"
#include "gpu_test_expectations_parser.h" #include "gpu_test_expectations_parser.h"
#include "platform/Platform.h"
#include "system_utils.h" #include "system_utils.h"
namespace namespace
{ {
bool gGlobalError = false;
bool gExpectError = false;
void HandlePlatformError(angle::PlatformMethods *platform, const char *errorMessage)
{
if (!gExpectError)
{
FAIL() << errorMessage;
}
gGlobalError = true;
}
std::string DrawElementsToGoogleTestName(const std::string &dEQPName) std::string DrawElementsToGoogleTestName(const std::string &dEQPName)
{ {
std::string gTestName = dEQPName.substr(dEQPName.find('.') + 1); std::string gTestName = dEQPName.substr(dEQPName.find('.') + 1);
...@@ -332,10 +345,18 @@ class dEQPTest : public testing::TestWithParam<size_t> ...@@ -332,10 +345,18 @@ class dEQPTest : public testing::TestWithParam<size_t>
const auto &caseInfo = GetCaseList().getCaseInfo(GetParam()); const auto &caseInfo = GetCaseList().getCaseInfo(GetParam());
std::cout << caseInfo.mDEQPName << std::endl; std::cout << caseInfo.mDEQPName << std::endl;
gExpectError = (caseInfo.mExpectation != gpu::GPUTestExpectationsParser::kGpuTestPass);
TestResult result = deqp_libtester_run(caseInfo.mDEQPName.c_str()); TestResult result = deqp_libtester_run(caseInfo.mDEQPName.c_str());
bool testPassed = TestPassed(result); bool testPassed = TestPassed(result);
// Check the global error flag for unexpected platform errors.
if (gGlobalError)
{
testPassed = false;
gGlobalError = false;
}
if (caseInfo.mExpectation == gpu::GPUTestExpectationsParser::kGpuTestPass) if (caseInfo.mExpectation == gpu::GPUTestExpectationsParser::kGpuTestPass)
{ {
EXPECT_TRUE(testPassed); EXPECT_TRUE(testPassed);
...@@ -397,7 +418,8 @@ void dEQPTest<TestModuleIndex>::SetUpTestCase() ...@@ -397,7 +418,8 @@ void dEQPTest<TestModuleIndex>::SetUpTestCase()
argv.push_back(configArgString.c_str()); argv.push_back(configArgString.c_str());
// Init the platform. // Init the platform.
if (!deqp_libtester_init_platform(static_cast<int>(argv.size()), argv.data())) if (!deqp_libtester_init_platform(static_cast<int>(argv.size()), argv.data(),
reinterpret_cast<void *>(&HandlePlatformError)))
{ {
std::cout << "Aborting test due to dEQP initialization error." << std::endl; std::cout << "Aborting test due to dEQP initialization error." << std::endl;
exit(1); exit(1);
......
...@@ -37,7 +37,9 @@ enum class TestResult ...@@ -37,7 +37,9 @@ enum class TestResult
// Exported to the tester app. // Exported to the tester app.
ANGLE_LIBTESTER_EXPORT int deqp_libtester_main(int argc, const char *argv[]); ANGLE_LIBTESTER_EXPORT int deqp_libtester_main(int argc, const char *argv[]);
ANGLE_LIBTESTER_EXPORT bool deqp_libtester_init_platform(int argc, const char *argv[]); ANGLE_LIBTESTER_EXPORT bool deqp_libtester_init_platform(int argc,
const char *argv[],
void *logErrorFunc);
ANGLE_LIBTESTER_EXPORT void deqp_libtester_shutdown_platform(); ANGLE_LIBTESTER_EXPORT void deqp_libtester_shutdown_platform();
ANGLE_LIBTESTER_EXPORT TestResult deqp_libtester_run(const char *caseName); ANGLE_LIBTESTER_EXPORT TestResult deqp_libtester_run(const char *caseName);
......
...@@ -12,6 +12,8 @@ ...@@ -12,6 +12,8 @@
#include "common/angleutils.h" #include "common/angleutils.h"
#include "deMath.h" #include "deMath.h"
#include "deUniquePtr.hpp" #include "deUniquePtr.hpp"
#include "platform/Platform.h"
#include "system_utils.h"
#include "tcuApp.hpp" #include "tcuApp.hpp"
#include "tcuCommandLine.hpp" #include "tcuCommandLine.hpp"
#include "tcuDefs.hpp" #include "tcuDefs.hpp"
...@@ -19,7 +21,6 @@ ...@@ -19,7 +21,6 @@
#include "tcuRandomOrderExecutor.h" #include "tcuRandomOrderExecutor.h"
#include "tcuResource.hpp" #include "tcuResource.hpp"
#include "tcuTestLog.hpp" #include "tcuTestLog.hpp"
#include "system_utils.h"
#if (DE_OS == DE_OS_WIN32) #if (DE_OS == DE_OS_WIN32)
#include <Windows.h> #include <Windows.h>
...@@ -31,7 +32,7 @@ ...@@ -31,7 +32,7 @@
#include <sys/stat.h> #include <sys/stat.h>
#endif #endif
tcu::Platform *createPlatform(); tcu::Platform *CreateANGLEPlatform(angle::LogErrorFunc logErrorFunc);
namespace namespace
{ {
...@@ -118,7 +119,9 @@ std::string GetLogFileName(std::string deqpDataDir) ...@@ -118,7 +119,9 @@ std::string GetLogFileName(std::string deqpDataDir)
} // anonymous namespace } // anonymous namespace
ANGLE_LIBTESTER_EXPORT bool deqp_libtester_init_platform(int argc, const char *argv[]) ANGLE_LIBTESTER_EXPORT bool deqp_libtester_init_platform(int argc,
const char *argv[],
void *logErrorFunc)
{ {
try try
{ {
...@@ -126,7 +129,7 @@ ANGLE_LIBTESTER_EXPORT bool deqp_libtester_init_platform(int argc, const char *a ...@@ -126,7 +129,7 @@ ANGLE_LIBTESTER_EXPORT bool deqp_libtester_init_platform(int argc, const char *a
// Set stdout to line-buffered mode (will be fully buffered by default if stdout is pipe). // Set stdout to line-buffered mode (will be fully buffered by default if stdout is pipe).
setvbuf(stdout, DE_NULL, _IOLBF, 4 * 1024); setvbuf(stdout, DE_NULL, _IOLBF, 4 * 1024);
#endif #endif
g_platform = createPlatform(); g_platform = CreateANGLEPlatform(reinterpret_cast<angle::LogErrorFunc>(logErrorFunc));
if (!deSetRoundingMode(DE_ROUNDINGMODE_TO_NEAREST_EVEN)) if (!deSetRoundingMode(DE_ROUNDINGMODE_TO_NEAREST_EVEN))
{ {
...@@ -160,7 +163,7 @@ ANGLE_LIBTESTER_EXPORT bool deqp_libtester_init_platform(int argc, const char *a ...@@ -160,7 +163,7 @@ ANGLE_LIBTESTER_EXPORT bool deqp_libtester_init_platform(int argc, const char *a
// Exported to the tester app. // Exported to the tester app.
ANGLE_LIBTESTER_EXPORT int deqp_libtester_main(int argc, const char *argv[]) ANGLE_LIBTESTER_EXPORT int deqp_libtester_main(int argc, const char *argv[])
{ {
if (!deqp_libtester_init_platform(argc, argv)) if (!deqp_libtester_init_platform(argc, argv, nullptr))
{ {
tcu::die("Could not initialize the dEQP platform"); tcu::die("Could not initialize the dEQP platform");
} }
...@@ -207,7 +210,7 @@ ANGLE_LIBTESTER_EXPORT void deqp_libtester_shutdown_platform() ...@@ -207,7 +210,7 @@ ANGLE_LIBTESTER_EXPORT void deqp_libtester_shutdown_platform()
ANGLE_LIBTESTER_EXPORT TestResult deqp_libtester_run(const char *caseName) ANGLE_LIBTESTER_EXPORT TestResult deqp_libtester_run(const char *caseName)
{ {
const char *emptyString = ""; const char *emptyString = "";
if (g_platform == nullptr && !deqp_libtester_init_platform(1, &emptyString)) if (g_platform == nullptr && !deqp_libtester_init_platform(1, &emptyString, nullptr))
{ {
tcu::die("Failed to initialize platform."); tcu::die("Failed to initialize platform.");
} }
......
...@@ -256,6 +256,11 @@ ...@@ -256,6 +256,11 @@
2405 VULKAN ANDROID : dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_32_short* = SKIP 2405 VULKAN ANDROID : dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_32_short* = SKIP
2405 VULKAN ANDROID : dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_4_short* = SKIP 2405 VULKAN ANDROID : dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_4_short* = SKIP
2567 GLES ANDROID : dEQP-GLES2.functional.fbo.completeness.renderable.texture.depth.red_unsigned_byte = FAIL
2567 GLES ANDROID : dEQP-GLES2.functional.fbo.completeness.renderable.texture.depth.rg_unsigned_byte = FAIL
2567 GLES ANDROID : dEQP-GLES2.functional.fbo.completeness.renderable.texture.stencil.red_unsigned_byte = FAIL
2567 GLES ANDROID : dEQP-GLES2.functional.fbo.completeness.renderable.texture.stencil.rg_unsigned_byte = FAIL
// Windows Linux and Mac failures // Windows Linux and Mac failures
1028 WIN LINUX MAC : dEQP-GLES2.functional.fbo.completeness.renderable.texture.color0.srgb8 = FAIL 1028 WIN LINUX MAC : dEQP-GLES2.functional.fbo.completeness.renderable.texture.color0.srgb8 = FAIL
1028 WIN LINUX MAC : dEQP-GLES2.functional.fbo.completeness.renderable.texture.stencil.srgb8 = FAIL 1028 WIN LINUX MAC : dEQP-GLES2.functional.fbo.completeness.renderable.texture.stencil.srgb8 = FAIL
...@@ -381,3 +386,10 @@ ...@@ -381,3 +386,10 @@
2405 VULKAN WIN AMD : dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_17_byte* = SKIP 2405 VULKAN WIN AMD : dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_17_byte* = SKIP
2405 VULKAN WIN AMD : dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_32_byte* = SKIP 2405 VULKAN WIN AMD : dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_32_byte* = SKIP
2405 VULKAN WIN AMD : dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_32_short* = SKIP 2405 VULKAN WIN AMD : dEQP-GLES2.functional.vertex_arrays.single_attribute.usages.buffer_0_32_short* = SKIP
// Failures because of unsupported vertex formats on Android.
2405 VULKAN ANDROID : dEQP-GLES2.functional.buffer.write.* = FAIL
2405 VULKAN ANDROID : dEQP-GLES2.functional.vertex_arrays.single_attribute.normalize.user_ptr_0_0_byte3_normalized_vec4_dynamic_draw_quads_1 = FAIL
2405 VULKAN ANDROID : dEQP-GLES2.functional.vertex_arrays.single_attribute.normalize.user_ptr_0_0_byte3_normalized_vec4_dynamic_draw_quads_256 = FAIL
2405 VULKAN ANDROID : dEQP-GLES2.functional.vertex_arrays.single_attribute.normalize.user_ptr_0_0_unsigned_byte3_normalized_vec4_dynamic_draw_quads_1 = FAIL
2405 VULKAN ANDROID : dEQP-GLES2.functional.vertex_arrays.single_attribute.normalize.user_ptr_0_0_unsigned_byte3_normalized_vec4_dynamic_draw_quads_256 = FAIL
...@@ -1644,3 +1644,8 @@ ...@@ -1644,3 +1644,8 @@
2324 DEBUG RELEASE : dEQP-GLES31.functional.debug.negative_coverage.get_error.shader_storage.block_number_limits = FAIL 2324 DEBUG RELEASE : dEQP-GLES31.functional.debug.negative_coverage.get_error.shader_storage.block_number_limits = FAIL
2324 DEBUG RELEASE : dEQP-GLES31.functional.debug.negative_coverage.log.shader_storage.block_number_limits = FAIL 2324 DEBUG RELEASE : dEQP-GLES31.functional.debug.negative_coverage.log.shader_storage.block_number_limits = FAIL
2324 DEBUG RELEASE : dEQP-GLES31.functional.debug.negative_coverage.callbacks.shader_storage.block_number_limits = FAIL 2324 DEBUG RELEASE : dEQP-GLES31.functional.debug.negative_coverage.callbacks.shader_storage.block_number_limits = FAIL
// These tests are failing because of compile errors with SSBOs in compute shaders.
1951 D3D11 : dEQP-GLES31.functional.debug.negative_coverage.callbacks.compute.exceed_shared_memory_size_limit = FAIL
1951 D3D11 : dEQP-GLES31.functional.debug.negative_coverage.get_error.compute.exceed_shared_memory_size_limit = FAIL
1951 D3D11 : dEQP-GLES31.functional.debug.negative_coverage.log.compute.exceed_shared_memory_size_limit = FAIL
...@@ -466,3 +466,8 @@ ...@@ -466,3 +466,8 @@
2628 ANDROID : dEQP-GLES3.functional.shaders.indexing.moredynamic.user_defined_fncall_inout_parameter_with_index_with_side_effects_fragment = FAIL 2628 ANDROID : dEQP-GLES3.functional.shaders.indexing.moredynamic.user_defined_fncall_inout_parameter_with_index_with_side_effects_fragment = FAIL
2628 ANDROID : dEQP-GLES3.functional.shaders.indexing.moredynamic.user_defined_fncall_out_parameter_fragment = FAIL 2628 ANDROID : dEQP-GLES3.functional.shaders.indexing.moredynamic.user_defined_fncall_out_parameter_fragment = FAIL
2627 ANDROID : dEQP-GLES3.functional.shaders.loops.short_circuit.* = FAIL 2627 ANDROID : dEQP-GLES3.functional.shaders.loops.short_circuit.* = FAIL
2567 GLES ANDROID : dEQP-GLES3.functional.fbo.completeness.renderable.texture.depth.red_unsigned_byte = FAIL
2567 GLES ANDROID : dEQP-GLES3.functional.fbo.completeness.renderable.texture.depth.rg_unsigned_byte = FAIL
2567 GLES ANDROID : dEQP-GLES3.functional.fbo.completeness.renderable.texture.stencil.red_unsigned_byte = FAIL
2567 GLES ANDROID : dEQP-GLES3.functional.fbo.completeness.renderable.texture.stencil.rg_unsigned_byte = FAIL
...@@ -30,12 +30,17 @@ ...@@ -30,12 +30,17 @@
static_assert(EGL_DONT_CARE == -1, "Unexpected value for EGL_DONT_CARE"); static_assert(EGL_DONT_CARE == -1, "Unexpected value for EGL_DONT_CARE");
// We should clean this up at some point by making it a properly exposed enum.
#define EGL_PLATFORM_ANGLE_PLATFORM_METHODS_ANGLEX 0x9999
namespace tcu namespace tcu
{ {
ANGLEPlatform::ANGLEPlatform() ANGLEPlatform::ANGLEPlatform(angle::LogErrorFunc logErrorFunc)
{ {
angle::SetLowPriorityProcess(); angle::SetLowPriorityProcess();
mPlatformMethods.logError = logErrorFunc;
#if (DE_OS == DE_OS_WIN32) #if (DE_OS == DE_OS_WIN32)
{ {
std::vector<eglw::EGLAttrib> d3d11Attribs = initAttribs( std::vector<eglw::EGLAttrib> d3d11Attribs = initAttribs(
...@@ -146,13 +151,23 @@ std::vector<eglw::EGLAttrib> ANGLEPlatform::initAttribs(eglw::EGLAttrib type, ...@@ -146,13 +151,23 @@ std::vector<eglw::EGLAttrib> ANGLEPlatform::initAttribs(eglw::EGLAttrib type,
attribs.push_back(minorVersion); attribs.push_back(minorVersion);
} }
static_assert(sizeof(eglw::EGLAttrib) == sizeof(angle::PlatformMethods *),
"Unexpected pointer size");
attribs.push_back(EGL_PLATFORM_ANGLE_PLATFORM_METHODS_ANGLEX);
attribs.push_back(reinterpret_cast<eglw::EGLAttrib>(&mPlatformMethods));
attribs.push_back(EGL_NONE); attribs.push_back(EGL_NONE);
return attribs; return attribs;
} }
} // namespace tcu } // namespace tcu
// Create platform // Create platform
tcu::Platform *CreateANGLEPlatform(angle::LogErrorFunc logErrorFunc)
{
return new tcu::ANGLEPlatform(logErrorFunc);
}
tcu::Platform *createPlatform() tcu::Platform *createPlatform()
{ {
return new tcu::ANGLEPlatform(); return CreateANGLEPlatform(nullptr);
} }
...@@ -29,6 +29,7 @@ ...@@ -29,6 +29,7 @@
# include "egluPlatform.hpp" # include "egluPlatform.hpp"
#endif #endif
#include "platform/Platform.h"
#include "tcuANGLENativeDisplayFactory.h" #include "tcuANGLENativeDisplayFactory.h"
namespace tcu namespace tcu
...@@ -39,7 +40,7 @@ class ANGLEPlatform : public tcu::Platform, ...@@ -39,7 +40,7 @@ class ANGLEPlatform : public tcu::Platform,
private eglu::Platform private eglu::Platform
{ {
public: public:
ANGLEPlatform(); ANGLEPlatform(angle::LogErrorFunc logErrorFunc);
~ANGLEPlatform(); ~ANGLEPlatform();
bool processEvents() override; bool processEvents() override;
...@@ -55,6 +56,7 @@ class ANGLEPlatform : public tcu::Platform, ...@@ -55,6 +56,7 @@ class ANGLEPlatform : public tcu::Platform,
eglw::EGLAttrib minorVersion = -1); eglw::EGLAttrib minorVersion = -1);
EventState mEvents; EventState mEvents;
angle::PlatformMethods mPlatformMethods;
}; };
} // tcu } // tcu
......
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