Bug 1260944 - Fix WARP. - r?jrmuizel
From 76f7ec498a4ad8b5f3d4fd7975eae6897811dfc2 Mon Sep 17 00:00:00 2001
---
gfx/gl/GLDefs.h | 40 +++++++++++++++++++++++++---------------
gfx/gl/GLLibraryEGL.cpp | 15 ++++++++++++---
2 files changed, 37 insertions(+), 18 deletions(-)
MozReview-Commit-ID: DsQG1PdugAI
--- a/gfx/gl/GLDefs.h
+++ b/gfx/gl/GLDefs.h
@@ -45,34 +45,44 @@
#define LOCAL_GL_ATC_RGBA_INTERPOLATED_ALPHA 0x87EE
// EGL_ANDROID_image_crop
#define LOCAL_EGL_IMAGE_CROP_LEFT_ANDROID 0x3148
#define LOCAL_EGL_IMAGE_CROP_TOP_ANDROID 0x3149
#define LOCAL_EGL_IMAGE_CROP_RIGHT_ANDROID 0x314A
#define LOCAL_EGL_IMAGE_CROP_BOTTOM_ANDROID 0x314B
+// EGL_ANGLE_platform_angle
+#define LOCAL_EGL_PLATFORM_ANGLE_ANGLE 0x3202
+#define LOCAL_EGL_PLATFORM_ANGLE_TYPE_ANGLE 0x3203
+#define LOCAL_EGL_PLATFORM_ANGLE_MAX_VERSION_MAJOR_ANGLE 0x3204
+#define LOCAL_EGL_PLATFORM_ANGLE_MAX_VERSION_MINOR_ANGLE 0x3205
+#define LOCAL_EGL_PLATFORM_ANGLE_TYPE_DEFAULT_ANGLE 0x3206
+
+// EGL_ANGLE_platform_angle_d3d
+#define LOCAL_EGL_PLATFORM_ANGLE_TYPE_D3D9_ANGLE 0x3207
+#define LOCAL_EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE 0x3208
+#define LOCAL_EGL_PLATFORM_ANGLE_DEVICE_TYPE_ANGLE 0x3209
+#define LOCAL_EGL_PLATFORM_ANGLE_DEVICE_TYPE_HARDWARE_ANGLE 0x320A
+#define LOCAL_EGL_PLATFORM_ANGLE_DEVICE_TYPE_WARP_ANGLE 0x320B
+#define LOCAL_EGL_PLATFORM_ANGLE_DEVICE_TYPE_REFERENCE_ANGLE 0x320C
+#define LOCAL_EGL_PLATFORM_ANGLE_ENABLE_AUTOMATIC_TRIM_ANGLE 0x320F
+
+// EGL_ANGLE_direct3d_display
+#define LOCAL_EGL_D3D11_ELSE_D3D9_DISPLAY_ANGLE ((EGLNativeDisplayType)-2)
+#define LOCAL_EGL_D3D11_ONLY_DISPLAY_ANGLE ((EGLNativeDisplayType)-3)
+
+// WGL_NV_DX_interop
+#define LOCAL_WGL_ACCESS_READ_ONLY 0x0000
+#define LOCAL_WGL_ACCESS_READ_WRITE 0x0001
+#define LOCAL_WGL_ACCESS_WRITE_DISCARD 0x0002
+
// Others
#define LOCAL_EGL_PRESERVED_RESOURCES 0x3030
#define LOCAL_EGL_CONTEXT_RESET_NOTIFICATION_STRATEGY_EXT 0x3138
-
-// ANGLE_platform_angle_d3d
-#define LOCAL_EGL_PLATFORM_ANGLE_ANGLE 0x3201
-#define LOCAL_EGL_PLATFORM_ANGLE_TYPE_ANGLE 0x3202
-#define LOCAL_EGL_PLATFORM_ANGLE_TYPE_D3D11_WARP_ANGLE 0x3206
-
#define LOCAL_GL_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB 0x8256
#define LOCAL_GL_CONTEXT_LOST 0x9242
#define LOCAL_GL_CONTEXT_FLAGS_ARB 0x2094
#define LOCAL_GL_CONTEXT_CORE_PROFILE_BIT_ARB 0x00000001
#define LOCAL_GL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 0x00000002
#define LOCAL_GL_CONTEXT_ROBUST_ACCESS_BIT_ARB 0x00000004
-
-#define LOCAL_EGL_D3D11_ELSE_D3D9_DISPLAY_ANGLE ((EGLNativeDisplayType)-2)
-#define LOCAL_EGL_D3D11_ONLY_DISPLAY_ANGLE ((EGLNativeDisplayType)-3)
-
-// WGL_NV_DX_interop
-#define LOCAL_WGL_ACCESS_READ_ONLY 0x0000
-#define LOCAL_WGL_ACCESS_READ_WRITE 0x0001
-#define LOCAL_WGL_ACCESS_WRITE_DISCARD 0x0002
-
#endif
--- a/gfx/gl/GLLibraryEGL.cpp
+++ b/gfx/gl/GLLibraryEGL.cpp
@@ -109,25 +109,34 @@ LoadLibraryForEGLOnWindows(const nsAStri
return lib;
}
#endif // XP_WIN
static EGLDisplay
GetAndInitWARPDisplay(GLLibraryEGL& egl, void* displayType)
{
- EGLint attrib_list[] = { LOCAL_EGL_PLATFORM_ANGLE_TYPE_ANGLE,
- LOCAL_EGL_PLATFORM_ANGLE_TYPE_D3D11_WARP_ANGLE,
+ EGLint attrib_list[] = { LOCAL_EGL_PLATFORM_ANGLE_DEVICE_TYPE_ANGLE,
+ LOCAL_EGL_PLATFORM_ANGLE_DEVICE_TYPE_WARP_ANGLE,
+ // Requires:
+ LOCAL_EGL_PLATFORM_ANGLE_TYPE_ANGLE,
+ LOCAL_EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE,
LOCAL_EGL_NONE };
EGLDisplay display = egl.fGetPlatformDisplayEXT(LOCAL_EGL_PLATFORM_ANGLE_ANGLE,
displayType,
attrib_list);
- if (display == EGL_NO_DISPLAY)
+ if (display == EGL_NO_DISPLAY) {
+ const EGLint err = egl.fGetError();
+ if (err != LOCAL_EGL_SUCCESS) {
+ printf_stderr("Unexpected error: 0x%04x", err);
+ MOZ_CRASH("Unexpected error.");
+ }
return EGL_NO_DISPLAY;
+ }
if (!egl.fInitialize(display, nullptr, nullptr))
return EGL_NO_DISPLAY;
return display;
}
static bool