Commit b2eda420 by Jamie Madill Committed by Commit Bot

dEQP: Add attrib init helper function.

This removes a lot of repeated code in tcuANGLEPlatform.cpp. Bug: angleproject:2552 Change-Id: Ie4cc53af2dfdf719b78d272cbd260cab5b2efd7b Reviewed-on: https://chromium-review.googlesource.com/1064196 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarYuly Novikov <ynovikov@chromium.org>
parent 3c7439b6
...@@ -28,51 +28,37 @@ ...@@ -28,51 +28,37 @@
#include "tcuANGLENativeDisplayFactory.h" #include "tcuANGLENativeDisplayFactory.h"
#include "tcuNullContextFactory.hpp" #include "tcuNullContextFactory.hpp"
static_assert(EGL_DONT_CARE == -1, "Unexpected value for EGL_DONT_CARE");
namespace tcu namespace tcu
{ {
ANGLEPlatform::ANGLEPlatform() ANGLEPlatform::ANGLEPlatform()
{ {
angle::SetLowPriorityProcess(); angle::SetLowPriorityProcess();
#if (DE_OS == DE_OS_WIN32) #if (DE_OS == DE_OS_WIN32)
{ {
std::vector<eglw::EGLAttrib> d3d11Attribs; std::vector<eglw::EGLAttrib> d3d11Attribs = initAttribs(
d3d11Attribs.push_back(EGL_PLATFORM_ANGLE_TYPE_ANGLE); EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE, EGL_PLATFORM_ANGLE_DEVICE_TYPE_HARDWARE_ANGLE);
d3d11Attribs.push_back(EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE);
d3d11Attribs.push_back(EGL_PLATFORM_ANGLE_DEVICE_TYPE_ANGLE); auto *d3d11Factory = new ANGLENativeDisplayFactory("angle-d3d11", "ANGLE D3D11 Display",
d3d11Attribs.push_back(EGL_PLATFORM_ANGLE_DEVICE_TYPE_HARDWARE_ANGLE); d3d11Attribs, &mEvents);
d3d11Attribs.push_back(EGL_NONE);
auto *d3d11Factory = new ANGLENativeDisplayFactory(
"angle-d3d11", "ANGLE D3D11 Display", d3d11Attribs, &mEvents);
m_nativeDisplayFactoryRegistry.registerFactory(d3d11Factory); m_nativeDisplayFactoryRegistry.registerFactory(d3d11Factory);
} }
{ {
std::vector<eglw::EGLAttrib> d3d9Attribs; std::vector<eglw::EGLAttrib> d3d9Attribs = initAttribs(
d3d9Attribs.push_back(EGL_PLATFORM_ANGLE_TYPE_ANGLE); EGL_PLATFORM_ANGLE_TYPE_D3D9_ANGLE, EGL_PLATFORM_ANGLE_DEVICE_TYPE_HARDWARE_ANGLE);
d3d9Attribs.push_back(EGL_PLATFORM_ANGLE_TYPE_D3D9_ANGLE);
d3d9Attribs.push_back(EGL_PLATFORM_ANGLE_DEVICE_TYPE_ANGLE); auto *d3d9Factory = new ANGLENativeDisplayFactory("angle-d3d9", "ANGLE D3D9 Display",
d3d9Attribs.push_back(EGL_PLATFORM_ANGLE_DEVICE_TYPE_HARDWARE_ANGLE); d3d9Attribs, &mEvents);
d3d9Attribs.push_back(EGL_NONE);
auto *d3d9Factory = new ANGLENativeDisplayFactory(
"angle-d3d9", "ANGLE D3D9 Display", d3d9Attribs, &mEvents);
m_nativeDisplayFactoryRegistry.registerFactory(d3d9Factory); m_nativeDisplayFactoryRegistry.registerFactory(d3d9Factory);
} }
{ {
std::vector<eglw::EGLAttrib> d3d1193Attribs; std::vector<eglw::EGLAttrib> d3d1193Attribs =
d3d1193Attribs.push_back(EGL_PLATFORM_ANGLE_TYPE_ANGLE); initAttribs(EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE,
d3d1193Attribs.push_back(EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE); EGL_PLATFORM_ANGLE_DEVICE_TYPE_HARDWARE_ANGLE, 9, 3);
d3d1193Attribs.push_back(EGL_PLATFORM_ANGLE_DEVICE_TYPE_ANGLE);
d3d1193Attribs.push_back(EGL_PLATFORM_ANGLE_DEVICE_TYPE_HARDWARE_ANGLE);
d3d1193Attribs.push_back(EGL_PLATFORM_ANGLE_MAX_VERSION_MAJOR_ANGLE);
d3d1193Attribs.push_back(9);
d3d1193Attribs.push_back(EGL_PLATFORM_ANGLE_MAX_VERSION_MINOR_ANGLE);
d3d1193Attribs.push_back(3);
d3d1193Attribs.push_back(EGL_NONE);
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);
...@@ -82,34 +68,26 @@ ANGLEPlatform::ANGLEPlatform() ...@@ -82,34 +68,26 @@ ANGLEPlatform::ANGLEPlatform()
#if defined(ANGLE_USE_OZONE) || (DE_OS == DE_OS_ANDROID) || (DE_OS == DE_OS_WIN32) #if defined(ANGLE_USE_OZONE) || (DE_OS == DE_OS_ANDROID) || (DE_OS == DE_OS_WIN32)
{ {
std::vector<eglw::EGLAttrib> glesAttribs; std::vector<eglw::EGLAttrib> glesAttribs =
glesAttribs.push_back(EGL_PLATFORM_ANGLE_TYPE_ANGLE); initAttribs(EGL_PLATFORM_ANGLE_TYPE_OPENGLES_ANGLE);
glesAttribs.push_back(EGL_PLATFORM_ANGLE_TYPE_OPENGLES_ANGLE);
glesAttribs.push_back(EGL_NONE);
auto *glesFactory = new ANGLENativeDisplayFactory( auto *glesFactory = new ANGLENativeDisplayFactory("angle-gles", "ANGLE OpenGL ES Display",
"angle-gles", "ANGLE OpenGL ES Display", glesAttribs, &mEvents); glesAttribs, &mEvents);
m_nativeDisplayFactoryRegistry.registerFactory(glesFactory); m_nativeDisplayFactoryRegistry.registerFactory(glesFactory);
} }
#endif #endif
{ {
std::vector<eglw::EGLAttrib> glAttribs; std::vector<eglw::EGLAttrib> glAttribs = initAttribs(EGL_PLATFORM_ANGLE_TYPE_OPENGL_ANGLE);
glAttribs.push_back(EGL_PLATFORM_ANGLE_TYPE_ANGLE);
glAttribs.push_back(EGL_PLATFORM_ANGLE_TYPE_OPENGL_ANGLE);
glAttribs.push_back(EGL_NONE);
auto *glFactory = new ANGLENativeDisplayFactory( auto *glFactory =
"angle-gl", "ANGLE OpenGL Display", glAttribs, &mEvents); new ANGLENativeDisplayFactory("angle-gl", "ANGLE OpenGL Display", glAttribs, &mEvents);
m_nativeDisplayFactoryRegistry.registerFactory(glFactory); m_nativeDisplayFactoryRegistry.registerFactory(glFactory);
} }
#if (DE_OS == DE_OS_ANDROID) || (DE_OS == DE_OS_WIN32) || (DE_OS == DE_OS_UNIX) #if (DE_OS == DE_OS_ANDROID) || (DE_OS == DE_OS_WIN32) || (DE_OS == DE_OS_UNIX)
{ {
std::vector<eglw::EGLAttrib> vkAttribs; std::vector<eglw::EGLAttrib> vkAttribs = initAttribs(EGL_PLATFORM_ANGLE_TYPE_VULKAN_ANGLE);
vkAttribs.push_back(EGL_PLATFORM_ANGLE_TYPE_ANGLE);
vkAttribs.push_back(EGL_PLATFORM_ANGLE_TYPE_VULKAN_ANGLE);
vkAttribs.push_back(EGL_NONE);
auto *vkFactory = new ANGLENativeDisplayFactory("angle-vulkan", "ANGLE Vulkan Display", auto *vkFactory = new ANGLENativeDisplayFactory("angle-vulkan", "ANGLE Vulkan Display",
vkAttribs, &mEvents); vkAttribs, &mEvents);
...@@ -118,13 +96,10 @@ ANGLEPlatform::ANGLEPlatform() ...@@ -118,13 +96,10 @@ ANGLEPlatform::ANGLEPlatform()
#endif #endif
{ {
std::vector<eglw::EGLAttrib> nullAttribs; std::vector<eglw::EGLAttrib> nullAttribs = initAttribs(EGL_PLATFORM_ANGLE_TYPE_NULL_ANGLE);
nullAttribs.push_back(EGL_PLATFORM_ANGLE_TYPE_ANGLE);
nullAttribs.push_back(EGL_PLATFORM_ANGLE_TYPE_NULL_ANGLE);
nullAttribs.push_back(EGL_NONE);
auto *nullFactory = new ANGLENativeDisplayFactory( auto *nullFactory = new ANGLENativeDisplayFactory("angle-null", "ANGLE NULL Display",
"angle-null", "ANGLE NULL Display", nullAttribs, &mEvents); nullAttribs, &mEvents);
m_nativeDisplayFactoryRegistry.registerFactory(nullFactory); m_nativeDisplayFactoryRegistry.registerFactory(nullFactory);
} }
...@@ -143,7 +118,38 @@ bool ANGLEPlatform::processEvents() ...@@ -143,7 +118,38 @@ bool ANGLEPlatform::processEvents()
return !mEvents.quitSignaled(); return !mEvents.quitSignaled();
} }
} // tcu std::vector<eglw::EGLAttrib> ANGLEPlatform::initAttribs(eglw::EGLAttrib type,
eglw::EGLAttrib deviceType,
eglw::EGLAttrib majorVersion,
eglw::EGLAttrib minorVersion)
{
std::vector<eglw::EGLAttrib> attribs;
attribs.push_back(EGL_PLATFORM_ANGLE_TYPE_ANGLE);
attribs.push_back(type);
if (deviceType != EGL_DONT_CARE)
{
attribs.push_back(EGL_PLATFORM_ANGLE_DEVICE_TYPE_ANGLE);
attribs.push_back(deviceType);
}
if (majorVersion != EGL_DONT_CARE)
{
attribs.push_back(EGL_PLATFORM_ANGLE_MAX_VERSION_MAJOR_ANGLE);
attribs.push_back(majorVersion);
}
if (minorVersion != EGL_DONT_CARE)
{
attribs.push_back(EGL_PLATFORM_ANGLE_MAX_VERSION_MINOR_ANGLE);
attribs.push_back(minorVersion);
}
attribs.push_back(EGL_NONE);
return attribs;
}
} // namespace tcu
// Create platform // Create platform
tcu::Platform *createPlatform() tcu::Platform *createPlatform()
......
...@@ -48,6 +48,12 @@ class ANGLEPlatform : public tcu::Platform, ...@@ -48,6 +48,12 @@ class ANGLEPlatform : public tcu::Platform,
const eglu::Platform &getEGLPlatform() const override { return static_cast<const eglu::Platform&>(*this); } const eglu::Platform &getEGLPlatform() const override { return static_cast<const eglu::Platform&>(*this); }
private: private:
// Note: -1 represents EGL_DONT_CARE, but we don't have the EGL headers here.
std::vector<eglw::EGLAttrib> initAttribs(eglw::EGLAttrib type,
eglw::EGLAttrib deviceType = -1,
eglw::EGLAttrib majorVersion = -1,
eglw::EGLAttrib minorVersion = -1);
EventState mEvents; EventState mEvents;
}; };
......
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