| 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;
|
|
|