aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/gl/angle/SkANGLEGLContext.cpp
diff options
context:
space:
mode:
authorGravatar hendrikw <hendrikw@chromium.org>2015-09-11 13:07:29 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2015-09-11 13:07:29 -0700
commiteddbefb4a5794b1d9f4e58a7cdf4e768b837c17f (patch)
tree1eebce01f8a1338110f5a171209e144ed503b86f /src/gpu/gl/angle/SkANGLEGLContext.cpp
parent102081aba2525230fb1d904add4f66c5f46403b5 (diff)
skia: Add ANGLE with GL backend to nanobench/DM
This will allow us to test this without hacking it in, might be useful for others too. Review URL: https://codereview.chromium.org/1338003002
Diffstat (limited to 'src/gpu/gl/angle/SkANGLEGLContext.cpp')
-rw-r--r--src/gpu/gl/angle/SkANGLEGLContext.cpp54
1 files changed, 35 insertions, 19 deletions
diff --git a/src/gpu/gl/angle/SkANGLEGLContext.cpp b/src/gpu/gl/angle/SkANGLEGLContext.cpp
index 8ebdcb661e..64a3bdec74 100644
--- a/src/gpu/gl/angle/SkANGLEGLContext.cpp
+++ b/src/gpu/gl/angle/SkANGLEGLContext.cpp
@@ -15,8 +15,9 @@
#define EGL_PLATFORM_ANGLE_TYPE_ANGLE 0x3203
#define EGL_PLATFORM_ANGLE_TYPE_D3D9_ANGLE 0x3207
#define EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE 0x3208
+#define EGL_PLATFORM_ANGLE_TYPE_OPENGL_ANGLE 0x320D
-void* SkANGLEGLContext::GetD3DEGLDisplay(void* nativeDisplay) {
+void* SkANGLEGLContext::GetD3DEGLDisplay(void* nativeDisplay, bool useGLBackend) {
PFNEGLGETPLATFORMDISPLAYEXTPROC eglGetPlatformDisplayEXT;
eglGetPlatformDisplayEXT =
(PFNEGLGETPLATFORMDISPLAYEXTPROC)eglGetProcAddress("eglGetPlatformDisplayEXT");
@@ -25,29 +26,44 @@ void* SkANGLEGLContext::GetD3DEGLDisplay(void* nativeDisplay) {
return eglGetDisplay(static_cast<EGLNativeDisplayType>(nativeDisplay));
}
- // Try for an ANGLE D3D11 context, fall back to D3D9.
- EGLint attribs[2][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
- }
- };
-
EGLDisplay display = EGL_NO_DISPLAY;
- for (int i = 0; i < 2 && display == EGL_NO_DISPLAY; ++i) {
+ if (useGLBackend) {
+ // Try for an ANGLE D3D11 context, fall back to D3D9.
+ EGLint attribs[3] = {
+ EGL_PLATFORM_ANGLE_TYPE_ANGLE,
+ EGL_PLATFORM_ANGLE_TYPE_OPENGL_ANGLE,
+ EGL_NONE
+ };
display = eglGetPlatformDisplayEXT(EGL_PLATFORM_ANGLE_ANGLE,
- nativeDisplay, attribs[i]);
+ nativeDisplay, attribs);
+ } else {
+ // Try for an ANGLE D3D11 context, fall back to D3D9, and finally GL.
+ 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
+ },
+ {
+ EGL_PLATFORM_ANGLE_TYPE_ANGLE,
+ EGL_PLATFORM_ANGLE_TYPE_OPENGL_ANGLE,
+ EGL_NONE
+ }
+ };
+ for (int i = 0; i < 3 && display == EGL_NO_DISPLAY; ++i) {
+ display = eglGetPlatformDisplayEXT(EGL_PLATFORM_ANGLE_ANGLE,
+ nativeDisplay, attribs[i]);
+ }
}
return display;
}
-SkANGLEGLContext::SkANGLEGLContext()
+SkANGLEGLContext::SkANGLEGLContext(bool useGLBackend)
: fContext(EGL_NO_CONTEXT)
, fDisplay(EGL_NO_DISPLAY)
, fSurface(EGL_NO_SURFACE) {
@@ -63,7 +79,7 @@ SkANGLEGLContext::SkANGLEGLContext()
EGL_NONE
};
- fDisplay = GetD3DEGLDisplay(EGL_DEFAULT_DISPLAY);
+ fDisplay = GetD3DEGLDisplay(EGL_DEFAULT_DISPLAY, useGLBackend);
if (EGL_NO_DISPLAY == fDisplay) {
SkDebugf("Could not create EGL display!");
return;