Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(161)

Unified Diff: tools/gpu/gl/angle/GLTestContext_angle.cpp

Issue 2381033002: Explicit control in tools of ANGLE frontend and backend (Closed)
Patch Set: rebase infra training Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tools/gpu/gl/angle/GLTestContext_angle.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/gpu/gl/angle/GLTestContext_angle.cpp
diff --git a/tools/gpu/gl/angle/GLTestContext_angle.cpp b/tools/gpu/gl/angle/GLTestContext_angle.cpp
index 8cc6f99c9fde814e8989c31fb5ebfdaee42e06cf..449e14c8f8d64da1f118155c7d1ede085caf8b3a 100644
--- a/tools/gpu/gl/angle/GLTestContext_angle.cpp
+++ b/tools/gpu/gl/angle/GLTestContext_angle.cpp
@@ -26,6 +26,9 @@
#define EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE 0x3208
#define EGL_PLATFORM_ANGLE_TYPE_OPENGL_ANGLE 0x320D
+using sk_gpu_test::ANGLEBackend;
+using sk_gpu_test::ANGLEContextVersion;
+
namespace {
struct Libs {
void* fGLLib;
@@ -45,7 +48,7 @@ static GrGLFuncPtr angle_get_gl_proc(void* ctx, const char name[]) {
return eglGetProcAddress(name);
}
-void* get_angle_egl_display(void* nativeDisplay, bool useGLBackend) {
+void* get_angle_egl_display(void* nativeDisplay, ANGLEBackend type) {
PFNEGLGETPLATFORMDISPLAYEXTPROC eglGetPlatformDisplayEXT;
eglGetPlatformDisplayEXT =
(PFNEGLGETPLATFORMDISPLAYEXTPROC)eglGetProcAddress("eglGetPlatformDisplayEXT");
@@ -55,38 +58,25 @@ void* get_angle_egl_display(void* nativeDisplay, bool useGLBackend) {
return EGL_NO_DISPLAY;
}
- EGLDisplay display = EGL_NO_DISPLAY;
- if (useGLBackend) {
- EGLint attribs[3] = {
- EGL_PLATFORM_ANGLE_TYPE_ANGLE,
- EGL_PLATFORM_ANGLE_TYPE_OPENGL_ANGLE,
- EGL_NONE
- };
- display = eglGetPlatformDisplayEXT(EGL_PLATFORM_ANGLE_ANGLE, nativeDisplay, attribs);
- } else {
- // Try for an ANGLE D3D11 context, fall back to D3D9.
- EGLint attribs[3][3] = {
- {
- EGL_PLATFORM_ANGLE_TYPE_ANGLE,
- EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE,
- EGL_NONE
- },
- {
- EGL_PLATFORM_ANGLE_TYPE_ANGLE,
- EGL_PLATFORM_ANGLE_TYPE_D3D9_ANGLE,
- EGL_NONE
- },
- };
- for (int i = 0; i < 3 && display == EGL_NO_DISPLAY; ++i) {
- display = eglGetPlatformDisplayEXT(EGL_PLATFORM_ANGLE_ANGLE,nativeDisplay, attribs[i]);
- }
+ EGLint typeNum = 0;
+ switch (type) {
+ case ANGLEBackend::kD3D9:
+ typeNum = EGL_PLATFORM_ANGLE_TYPE_D3D9_ANGLE;
+ break;
+ case ANGLEBackend::kD3D11:
+ typeNum = EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE;
+ break;
+ case ANGLEBackend::kOpenGL:
+ typeNum = EGL_PLATFORM_ANGLE_TYPE_OPENGL_ANGLE;
+ break;
}
- return display;
+ const EGLint attribs[] = { EGL_PLATFORM_ANGLE_TYPE_ANGLE, typeNum, EGL_NONE };
+ return eglGetPlatformDisplayEXT(EGL_PLATFORM_ANGLE_ANGLE, nativeDisplay, attribs);
}
class ANGLEGLContext : public sk_gpu_test::GLTestContext {
public:
- ANGLEGLContext(bool preferGLBackend);
+ ANGLEGLContext(ANGLEBackend, ANGLEContextVersion);
~ANGLEGLContext() override;
GrEGLImage texture2DToEGLImage(GrGLuint texID) const override;
@@ -101,16 +91,19 @@ private:
void onPlatformSwapBuffers() const override;
GrGLFuncPtr onPlatformGetProcAddress(const char* name) const override;
- void* fContext;
- void* fDisplay;
- void* fSurface;
- bool fIsGLBackend;
+ void* fContext;
+ void* fDisplay;
+ void* fSurface;
+ ANGLEBackend fType;
+ ANGLEContextVersion fVersion;
};
-ANGLEGLContext::ANGLEGLContext(bool useGLBackend)
+ANGLEGLContext::ANGLEGLContext(ANGLEBackend type, ANGLEContextVersion version)
: fContext(EGL_NO_CONTEXT)
, fDisplay(EGL_NO_DISPLAY)
- , fSurface(EGL_NO_SURFACE) {
+ , fSurface(EGL_NO_SURFACE)
+ , fType(type)
+ , fVersion(version) {
EGLint numConfigs;
static const EGLint configAttribs[] = {
@@ -123,8 +116,7 @@ ANGLEGLContext::ANGLEGLContext(bool useGLBackend)
EGL_NONE
};
- fIsGLBackend = useGLBackend;
- fDisplay = get_angle_egl_display(EGL_DEFAULT_DISPLAY, useGLBackend);
+ fDisplay = get_angle_egl_display(EGL_DEFAULT_DISPLAY, type);
if (EGL_NO_DISPLAY == fDisplay) {
SkDebugf("Could not create EGL display!");
return;
@@ -137,8 +129,9 @@ ANGLEGLContext::ANGLEGLContext(bool useGLBackend)
EGLConfig surfaceConfig;
eglChooseConfig(fDisplay, configAttribs, &surfaceConfig, 1, &numConfigs);
- static const EGLint contextAttribs[] = {
- EGL_CONTEXT_CLIENT_VERSION, 2,
+ int versionNum = ANGLEContextVersion::kES2 == version ? 2 : 3;
+ const EGLint contextAttribs[] = {
+ EGL_CONTEXT_CLIENT_VERSION, versionNum,
EGL_NONE
};
fContext = eglCreateContext(fDisplay, surfaceConfig, nullptr, contextAttribs);
@@ -224,13 +217,7 @@ GrGLuint ANGLEGLContext::eglImageToExternalTexture(GrEGLImage image) const {
}
sk_gpu_test::GLTestContext* ANGLEGLContext::createNew() const {
-#ifdef SK_BUILD_FOR_WIN
- sk_gpu_test::GLTestContext* ctx = fIsGLBackend
- ? sk_gpu_test::CreateANGLEOpenGLGLTestContext()
- : sk_gpu_test::CreateANGLEDirect3DGLTestContext();
-#else
- sk_gpu_test::GLTestContext* ctx = sk_gpu_test::CreateANGLEOpenGLGLTestContext();
-#endif
+ sk_gpu_test::GLTestContext* ctx = sk_gpu_test::CreateANGLETestContext(fType, fVersion);
if (ctx) {
ctx->makeCurrent();
}
@@ -299,19 +286,9 @@ const GrGLInterface* CreateANGLEGLInterface() {
return GrGLAssembleGLESInterface(&gLibs, angle_get_gl_proc);
}
-#ifdef SK_BUILD_FOR_WIN
-GLTestContext* CreateANGLEDirect3DGLTestContext() {
- ANGLEGLContext* ctx = new ANGLEGLContext(false);
- if (!ctx->isValid()) {
- delete ctx;
- return NULL;
- }
- return ctx;
- }
-#endif
-
-GLTestContext* CreateANGLEOpenGLGLTestContext() {
- ANGLEGLContext* ctx = new ANGLEGLContext(true);
+GLTestContext* CreateANGLETestContext(ANGLEBackend type,
+ ANGLEContextVersion version) {
+ ANGLEGLContext* ctx = new ANGLEGLContext(type, version);
if (!ctx->isValid()) {
delete ctx;
return NULL;
« no previous file with comments | « tools/gpu/gl/angle/GLTestContext_angle.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698