Index: ui/gl/gl_bindings_autogen_egl.cc |
diff --git a/ui/gl/gl_bindings_autogen_egl.cc b/ui/gl/gl_bindings_autogen_egl.cc |
index bc748883080a55a85449e568ecad7ae25c981dd1..ed91c834ab88dd19d4a78345d726c5c017ff34c5 100644 |
--- a/ui/gl/gl_bindings_autogen_egl.cc |
+++ b/ui/gl/gl_bindings_autogen_egl.cc |
@@ -78,6 +78,7 @@ void DriverEGL::InitializeStaticBindings() { |
fn.eglGetSyncAttribKHRFn = reinterpret_cast<eglGetSyncAttribKHRProc>( |
GetGLProcAddress("eglGetSyncAttribKHR")); |
fn.eglGetSyncValuesCHROMIUMFn = 0; |
+ fn.eglImageFlushExternalEXTFn = 0; |
fn.eglInitializeFn = |
reinterpret_cast<eglInitializeProc>(GetGLProcAddress("eglInitialize")); |
fn.eglMakeCurrentFn = |
@@ -152,6 +153,8 @@ void DriverEGL::InitializeExtensionBindings() { |
std::string::npos; |
ext.b_EGL_CHROMIUM_sync_control = |
extensions.find("EGL_CHROMIUM_sync_control ") != std::string::npos; |
+ ext.b_EGL_EXT_image_flush_external = |
+ extensions.find("EGL_EXT_image_flush_external ") != std::string::npos; |
ext.b_EGL_KHR_fence_sync = |
extensions.find("EGL_KHR_fence_sync ") != std::string::npos; |
ext.b_EGL_KHR_gl_texture_2D_image = |
@@ -216,6 +219,13 @@ void DriverEGL::InitializeExtensionBindings() { |
GetGLProcAddress("eglGetSyncValuesCHROMIUM")); |
} |
+ debug_fn.eglImageFlushExternalEXTFn = 0; |
+ if (ext.b_EGL_EXT_image_flush_external) { |
+ fn.eglImageFlushExternalEXTFn = |
+ reinterpret_cast<eglImageFlushExternalEXTProc>( |
+ GetGLProcAddress("eglImageFlushExternalEXT")); |
+ } |
+ |
debug_fn.eglPostSubBufferNVFn = 0; |
if (ext.b_EGL_NV_post_sub_buffer) { |
fn.eglPostSubBufferNVFn = reinterpret_cast<eglPostSubBufferNVProc>( |
@@ -681,6 +691,20 @@ Debug_eglGetSyncValuesCHROMIUM(EGLDisplay dpy, |
return result; |
} |
+static EGLBoolean GL_BINDING_CALL |
+Debug_eglImageFlushExternalEXT(EGLDisplay dpy, |
+ EGLImageKHR image, |
+ const EGLAttrib* attrib_list) { |
+ GL_SERVICE_LOG("eglImageFlushExternalEXT" |
+ << "(" << dpy << ", " << image << ", " |
+ << static_cast<const void*>(attrib_list) << ")"); |
+ DCHECK(g_driver_egl.debug_fn.eglImageFlushExternalEXTFn != nullptr); |
+ EGLBoolean result = |
+ g_driver_egl.debug_fn.eglImageFlushExternalEXTFn(dpy, image, attrib_list); |
+ GL_SERVICE_LOG("GL_RESULT: " << result); |
+ return result; |
+} |
+ |
static EGLBoolean GL_BINDING_CALL Debug_eglInitialize(EGLDisplay dpy, |
EGLint* major, |
EGLint* minor) { |
@@ -1128,6 +1152,10 @@ void DriverEGL::InitializeDebugBindings() { |
debug_fn.eglGetSyncValuesCHROMIUMFn = fn.eglGetSyncValuesCHROMIUMFn; |
fn.eglGetSyncValuesCHROMIUMFn = Debug_eglGetSyncValuesCHROMIUM; |
} |
+ if (!debug_fn.eglImageFlushExternalEXTFn) { |
+ debug_fn.eglImageFlushExternalEXTFn = fn.eglImageFlushExternalEXTFn; |
+ fn.eglImageFlushExternalEXTFn = Debug_eglImageFlushExternalEXT; |
+ } |
if (!debug_fn.eglInitializeFn) { |
debug_fn.eglInitializeFn = fn.eglInitializeFn; |
fn.eglInitializeFn = Debug_eglInitialize; |
@@ -1424,6 +1452,13 @@ EGLBoolean EGLApiBase::eglGetSyncValuesCHROMIUMFn(EGLDisplay dpy, |
return driver_->fn.eglGetSyncValuesCHROMIUMFn(dpy, surface, ust, msc, sbc); |
} |
+EGLBoolean EGLApiBase::eglImageFlushExternalEXTFn( |
+ EGLDisplay dpy, |
+ EGLImageKHR image, |
+ const EGLAttrib* attrib_list) { |
+ return driver_->fn.eglImageFlushExternalEXTFn(dpy, image, attrib_list); |
+} |
+ |
EGLBoolean EGLApiBase::eglInitializeFn(EGLDisplay dpy, |
EGLint* major, |
EGLint* minor) { |
@@ -1789,6 +1824,14 @@ EGLBoolean TraceEGLApi::eglGetSyncValuesCHROMIUMFn(EGLDisplay dpy, |
return egl_api_->eglGetSyncValuesCHROMIUMFn(dpy, surface, ust, msc, sbc); |
} |
+EGLBoolean TraceEGLApi::eglImageFlushExternalEXTFn( |
+ EGLDisplay dpy, |
+ EGLImageKHR image, |
+ const EGLAttrib* attrib_list) { |
+ TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::eglImageFlushExternalEXT") |
+ return egl_api_->eglImageFlushExternalEXTFn(dpy, image, attrib_list); |
+} |
+ |
EGLBoolean TraceEGLApi::eglInitializeFn(EGLDisplay dpy, |
EGLint* major, |
EGLint* minor) { |