diff --git a/bench/nanobench.cpp b/bench/nanobench.cpp
index a5a70d9..e7019dc 100644
--- a/bench/nanobench.cpp
+++ b/bench/nanobench.cpp
@@ -443,6 +443,7 @@
         GPU_CONFIG(nullgpu, kNull_GLContextType, 0, false)
 #ifdef SK_ANGLE
         GPU_CONFIG(angle, kANGLE_GLContextType, 0, false)
+        GPU_CONFIG(angle-gl, kANGLE_GL_GLContextType, 0, false)
 #endif
 #ifdef SK_COMMAND_BUFFER
         GPU_CONFIG(commandbuffer, kCommandBuffer_GLContextType, 0, false)
diff --git a/dm/DM.cpp b/dm/DM.cpp
index accc934..7d8d610 100644
--- a/dm/DM.cpp
+++ b/dm/DM.cpp
@@ -566,6 +566,7 @@
         SINK("nvprmsaa16",    GPUSink, Gr::kNVPR_GLContextType,          api, 16,  true, FLAGS_gpu_threading);
     #if SK_ANGLE
         SINK("angle",         GPUSink, Gr::kANGLE_GLContextType,         api,  0, false, FLAGS_gpu_threading);
+        SINK("angle-gl",      GPUSink, Gr::kANGLE_GL_GLContextType,      api,  0, false, FLAGS_gpu_threading);
     #endif
     #if SK_COMMAND_BUFFER
         SINK("commandbuffer", GPUSink, Gr::kCommandBuffer_GLContextType, api,  0, false, FLAGS_gpu_threading);
diff --git a/dm/DMGpuSupport.h b/dm/DMGpuSupport.h
index 0b9596e..9e10231 100644
--- a/dm/DMGpuSupport.h
+++ b/dm/DMGpuSupport.h
@@ -65,6 +65,7 @@
     typedef int GLContextType;
 
     static const GLContextType kANGLE_GLContextType         = 0,
+                               kANGLE_GL_GLContextType      = 0,
                                kCommandBuffer_GLContextType = 0,
                                kDebug_GLContextType         = 0,
                                kMESA_GLContextType          = 0,
diff --git a/include/gpu/gl/angle/SkANGLEGLContext.h b/include/gpu/gl/angle/SkANGLEGLContext.h
index 6590c76..8d5f830 100644
--- a/include/gpu/gl/angle/SkANGLEGLContext.h
+++ b/include/gpu/gl/angle/SkANGLEGLContext.h
@@ -16,11 +16,11 @@
 public:
     ~SkANGLEGLContext() override;
 
-    static SkANGLEGLContext* Create(GrGLStandard forcedGpuAPI) {
+    static SkANGLEGLContext* Create(GrGLStandard forcedGpuAPI, bool useGLBackend) {
         if (kGL_GrGLStandard == forcedGpuAPI) {
             return NULL;
         }
-        SkANGLEGLContext* ctx = new SkANGLEGLContext;
+        SkANGLEGLContext* ctx = new SkANGLEGLContext(useGLBackend);
         if (!ctx->isValid()) {
             delete ctx;
             return NULL;
@@ -29,10 +29,10 @@
     }
 
     // The param is an EGLNativeDisplayType and the return is an EGLDispay.
-    static void* GetD3DEGLDisplay(void* nativeDisplay);
+    static void* GetD3DEGLDisplay(void* nativeDisplay, bool useGLBackend);
 
 private:
-    SkANGLEGLContext();
+    SkANGLEGLContext(bool preferGLBackend);
     void destroyGLContext();
 
     void onPlatformMakeCurrent() const override;
diff --git a/src/gpu/GrContextFactory.cpp b/src/gpu/GrContextFactory.cpp
index 0fe01df..acd5d93 100755
--- a/src/gpu/GrContextFactory.cpp
+++ b/src/gpu/GrContextFactory.cpp
@@ -43,7 +43,10 @@
             break;
 #ifdef SK_ANGLE
         case kANGLE_GLContextType:
-            glCtx.reset(SkANGLEGLContext::Create(forcedGpuAPI));
+            glCtx.reset(SkANGLEGLContext::Create(forcedGpuAPI, false));
+            break;
+        case kANGLE_GL_GLContextType:
+            glCtx.reset(SkANGLEGLContext::Create(forcedGpuAPI, true));
             break;
 #endif
 #ifdef SK_COMMAND_BUFFER
diff --git a/src/gpu/GrContextFactory.h b/src/gpu/GrContextFactory.h
index 2accd73..130c333 100644
--- a/src/gpu/GrContextFactory.h
+++ b/src/gpu/GrContextFactory.h
@@ -33,6 +33,7 @@
       kNative_GLContextType,
 #if SK_ANGLE
       kANGLE_GLContextType,
+      kANGLE_GL_GLContextType,
 #endif
 #if SK_COMMAND_BUFFER
       kCommandBuffer_GLContextType,
@@ -70,6 +71,8 @@
 #if SK_ANGLE
             case kANGLE_GLContextType:
                 return "angle";
+            case kANGLE_GL_GLContextType:
+                return "angle-gl";
 #endif
 #if SK_COMMAND_BUFFER
             case kCommandBuffer_GLContextType:
diff --git a/src/gpu/gl/angle/SkANGLEGLContext.cpp b/src/gpu/gl/angle/SkANGLEGLContext.cpp
index 8ebdcb6..64a3bde 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 @@
         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 @@
         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;
diff --git a/src/views/win/SkOSWindow_win.cpp b/src/views/win/SkOSWindow_win.cpp
index 2fb9155..aba5a6f 100644
--- a/src/views/win/SkOSWindow_win.cpp
+++ b/src/views/win/SkOSWindow_win.cpp
@@ -418,7 +418,7 @@
         EGL_NONE, EGL_NONE
     };
 
-    EGLDisplay display = SkANGLEGLContext::GetD3DEGLDisplay(GetDC(hWnd));
+    EGLDisplay display = SkANGLEGLContext::GetD3DEGLDisplay(GetDC(hWnd), false);
 
     if (EGL_NO_DISPLAY == display) {
         SkDebugf("Could not create ANGLE egl display!\n");
diff --git a/tests/SkpSkGrTest.cpp b/tests/SkpSkGrTest.cpp
index da19843..98c54e0 100644
--- a/tests/SkpSkGrTest.cpp
+++ b/tests/SkpSkGrTest.cpp
@@ -260,7 +260,6 @@
 typedef GrContextFactory::GLContextType GLContextType;
 #ifdef SK_BUILD_FOR_WIN
 static const GLContextType kAngle = GrContextFactory::kANGLE_GLContextType;
-static const GLContextType kCommandBuffer = GrContextFactory::kCommandBuffer_GLContextType;
 #else
 static const GLContextType kNative = GrContextFactory::kNative_GLContextType;
 #endif
