From cb75ca645d424e0d79eb568a4270ffb9cdfc7a9c Mon Sep 17 00:00:00 2001 From: Chinmay Garde Date: Mon, 27 Jul 2015 12:15:18 -0700 Subject: [PATCH] Add bindings for "GL_NV_texture_barrier" required on Mac --- ui/gl/generate_bindings.py | 4 +++ ui/gl/gl_bindings_api_autogen_gl.h | 1 + ui/gl/gl_bindings_autogen_gl.cc | 37 ++++++++++++++++++++++++++++ ui/gl/gl_bindings_autogen_gl.h | 5 ++++ ui/gl/gl_bindings_autogen_mock.cc | 7 ++++++ ui/gl/gl_bindings_autogen_mock.h | 1 + ui/gl/gl_bindings_skia_in_process.cc | 5 ++++ ui/gl/gl_mock_autogen_gl.h | 1 + 8 files changed, 61 insertions(+) diff --git a/ui/gl/generate_bindings.py b/ui/gl/generate_bindings.py index ffd96253d96..41dc968ed98 100755 --- a/ui/gl/generate_bindings.py +++ b/ui/gl/generate_bindings.py @@ -997,6 +997,10 @@ GL_FUNCTIONS = [ # 'GLenum target, GLint level, GLint xoffset, GLint yoffset, ' # 'GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, ' # 'GLenum format, GLenum type, const void* pixels', }, +{ 'return_type': 'void', + 'versions': [{ 'name': 'glTextureBarrierNV', + 'extensions': ['GL_NV_texture_barrier'] }], + 'arguments': 'void' }, { 'return_type': 'void', 'versions': [{ 'name': 'glTransformFeedbackVaryings' }], 'arguments': 'GLuint program, GLsizei count, const char* const* varyings, ' diff --git a/ui/gl/gl_bindings_api_autogen_gl.h b/ui/gl/gl_bindings_api_autogen_gl.h index 93253008035..439d77bb928 100644 --- a/ui/gl/gl_bindings_api_autogen_gl.h +++ b/ui/gl/gl_bindings_api_autogen_gl.h @@ -619,6 +619,7 @@ void glTexSubImage2DFn(GLenum target, GLenum format, GLenum type, const void* pixels) override; +void glTextureBarrierNVFn(void) override; void glTransformFeedbackVaryingsFn(GLuint program, GLsizei count, const char* const* varyings, diff --git a/ui/gl/gl_bindings_autogen_gl.cc b/ui/gl/gl_bindings_autogen_gl.cc index f9c6ebf13b2..8581779d2e7 100644 --- a/ui/gl/gl_bindings_autogen_gl.cc +++ b/ui/gl/gl_bindings_autogen_gl.cc @@ -354,6 +354,7 @@ void DriverGL::InitializeStaticBindings() { fn.glTexStorage3DFn = 0; fn.glTexSubImage2DFn = reinterpret_cast( GetGLProcAddress("glTexSubImage2D")); + fn.glTextureBarrierNVFn = 0; fn.glTransformFeedbackVaryingsFn = 0; fn.glUniform1fFn = reinterpret_cast(GetGLProcAddress("glUniform1f")); @@ -530,6 +531,8 @@ void DriverGL::InitializeDynamicBindings(GLContext* context) { ext.b_GL_NV_fence = extensions.find("GL_NV_fence ") != std::string::npos; ext.b_GL_NV_path_rendering = extensions.find("GL_NV_path_rendering ") != std::string::npos; + ext.b_GL_NV_texture_barrier = + extensions.find("GL_NV_texture_barrier ") != std::string::npos; ext.b_GL_OES_EGL_image = extensions.find("GL_OES_EGL_image ") != std::string::npos; ext.b_GL_OES_get_program_binary = @@ -1879,6 +1882,13 @@ void DriverGL::InitializeDynamicBindings(GLContext* context) { DCHECK(fn.glTexStorage3DFn); } + debug_fn.glTextureBarrierNVFn = 0; + if (ext.b_GL_NV_texture_barrier) { + fn.glTextureBarrierNVFn = reinterpret_cast( + GetGLProcAddress("glTextureBarrierNV")); + DCHECK(fn.glTextureBarrierNVFn); + } + debug_fn.glTransformFeedbackVaryingsFn = 0; if (ver->IsAtLeastGL(3u, 0u) || ver->IsAtLeastGLES(3u, 0u)) { fn.glTransformFeedbackVaryingsFn = @@ -4403,6 +4413,13 @@ static void GL_BINDING_CALL Debug_glTexSubImage2D(GLenum target, height, format, type, pixels); } +static void GL_BINDING_CALL Debug_glTextureBarrierNV(void) { + GL_SERVICE_LOG("glTextureBarrierNV" + << "(" + << ")"); + g_driver_gl.debug_fn.glTextureBarrierNVFn(); +} + static void GL_BINDING_CALL Debug_glTransformFeedbackVaryings(GLuint program, GLsizei count, @@ -5888,6 +5905,10 @@ void DriverGL::InitializeDebugBindings() { debug_fn.glTexSubImage2DFn = fn.glTexSubImage2DFn; fn.glTexSubImage2DFn = Debug_glTexSubImage2D; } + if (!debug_fn.glTextureBarrierNVFn) { + debug_fn.glTextureBarrierNVFn = fn.glTextureBarrierNVFn; + fn.glTextureBarrierNVFn = Debug_glTextureBarrierNV; + } if (!debug_fn.glTransformFeedbackVaryingsFn) { debug_fn.glTransformFeedbackVaryingsFn = fn.glTransformFeedbackVaryingsFn; fn.glTransformFeedbackVaryingsFn = Debug_glTransformFeedbackVaryings; @@ -7501,6 +7522,10 @@ void GLApiBase::glTexSubImage2DFn(GLenum target, format, type, pixels); } +void GLApiBase::glTextureBarrierNVFn(void) { + driver_->fn.glTextureBarrierNVFn(); +} + void GLApiBase::glTransformFeedbackVaryingsFn(GLuint program, GLsizei count, const char* const* varyings, @@ -9457,6 +9482,11 @@ void TraceGLApi::glTexSubImage2DFn(GLenum target, format, type, pixels); } +void TraceGLApi::glTextureBarrierNVFn(void) { + TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glTextureBarrierNV") + gl_api_->glTextureBarrierNVFn(); +} + void TraceGLApi::glTransformFeedbackVaryingsFn(GLuint program, GLsizei count, const char* const* varyings, @@ -11729,6 +11759,13 @@ void NoContextGLApi::glTexSubImage2DFn(GLenum target, LOG(ERROR) << "Trying to call glTexSubImage2D() without current GL context"; } +void NoContextGLApi::glTextureBarrierNVFn(void) { + NOTREACHED() + << "Trying to call glTextureBarrierNV() without current GL context"; + LOG(ERROR) + << "Trying to call glTextureBarrierNV() without current GL context"; +} + void NoContextGLApi::glTransformFeedbackVaryingsFn(GLuint program, GLsizei count, const char* const* varyings, diff --git a/ui/gl/gl_bindings_autogen_gl.h b/ui/gl/gl_bindings_autogen_gl.h index 017e31a133e..34c83f90972 100644 --- a/ui/gl/gl_bindings_autogen_gl.h +++ b/ui/gl/gl_bindings_autogen_gl.h @@ -740,6 +740,7 @@ typedef void(GL_BINDING_CALL* glTexSubImage2DProc)(GLenum target, GLenum format, GLenum type, const void* pixels); +typedef void(GL_BINDING_CALL* glTextureBarrierNVProc)(void); typedef void(GL_BINDING_CALL* glTransformFeedbackVaryingsProc)( GLuint program, GLsizei count, @@ -960,6 +961,7 @@ struct ExtensionsGL { bool b_GL_NV_blend_equation_advanced; bool b_GL_NV_fence; bool b_GL_NV_path_rendering; + bool b_GL_NV_texture_barrier; bool b_GL_OES_EGL_image; bool b_GL_OES_get_program_binary; bool b_GL_OES_mapbuffer; @@ -1212,6 +1214,7 @@ struct ProcsGL { glTexStorage2DEXTProc glTexStorage2DEXTFn; glTexStorage3DProc glTexStorage3DFn; glTexSubImage2DProc glTexSubImage2DFn; + glTextureBarrierNVProc glTextureBarrierNVFn; glTransformFeedbackVaryingsProc glTransformFeedbackVaryingsFn; glUniform1fProc glUniform1fFn; glUniform1fvProc glUniform1fvFn; @@ -1911,6 +1914,7 @@ class GL_EXPORT GLApi { GLenum format, GLenum type, const void* pixels) = 0; + virtual void glTextureBarrierNVFn(void) = 0; virtual void glTransformFeedbackVaryingsFn(GLuint program, GLsizei count, const char* const* varyings, @@ -2383,6 +2387,7 @@ class GL_EXPORT GLApi { #define glTexStorage2DEXT ::gfx::g_current_gl_context->glTexStorage2DEXTFn #define glTexStorage3D ::gfx::g_current_gl_context->glTexStorage3DFn #define glTexSubImage2D ::gfx::g_current_gl_context->glTexSubImage2DFn +#define glTextureBarrierNV ::gfx::g_current_gl_context->glTextureBarrierNVFn #define glTransformFeedbackVaryings \ ::gfx::g_current_gl_context->glTransformFeedbackVaryingsFn #define glUniform1f ::gfx::g_current_gl_context->glUniform1fFn diff --git a/ui/gl/gl_bindings_autogen_mock.cc b/ui/gl/gl_bindings_autogen_mock.cc index ef6e3bb53cd..6f0a9dba8a0 100644 --- a/ui/gl/gl_bindings_autogen_mock.cc +++ b/ui/gl/gl_bindings_autogen_mock.cc @@ -2202,6 +2202,11 @@ void GL_BINDING_CALL MockGLInterface::Mock_glTexSubImage2D(GLenum target, format, type, pixels); } +void GL_BINDING_CALL MockGLInterface::Mock_glTextureBarrierNV(void) { + MakeFunctionUnique("glTextureBarrierNV"); + interface_->TextureBarrierNV(); +} + void GL_BINDING_CALL MockGLInterface::Mock_glTransformFeedbackVaryings(GLuint program, GLsizei count, @@ -3230,6 +3235,8 @@ void* GL_BINDING_CALL MockGLInterface::GetGLProcAddress(const char* name) { return reinterpret_cast(Mock_glTexStorage3D); if (strcmp(name, "glTexSubImage2D") == 0) return reinterpret_cast(Mock_glTexSubImage2D); + if (strcmp(name, "glTextureBarrierNV") == 0) + return reinterpret_cast(Mock_glTextureBarrierNV); if (strcmp(name, "glTransformFeedbackVaryings") == 0) return reinterpret_cast(Mock_glTransformFeedbackVaryings); if (strcmp(name, "glUniform1f") == 0) diff --git a/ui/gl/gl_bindings_autogen_mock.h b/ui/gl/gl_bindings_autogen_mock.h index fbe3273a991..baac41c26da 100644 --- a/ui/gl/gl_bindings_autogen_mock.h +++ b/ui/gl/gl_bindings_autogen_mock.h @@ -842,6 +842,7 @@ static void GL_BINDING_CALL Mock_glTexSubImage2D(GLenum target, GLenum format, GLenum type, const void* pixels); +static void GL_BINDING_CALL Mock_glTextureBarrierNV(void); static void GL_BINDING_CALL Mock_glTransformFeedbackVaryings(GLuint program, GLsizei count, diff --git a/ui/gl/gl_bindings_skia_in_process.cc b/ui/gl/gl_bindings_skia_in_process.cc index 8305a850b6a..3556c7788b2 100644 --- a/ui/gl/gl_bindings_skia_in_process.cc +++ b/ui/gl/gl_bindings_skia_in_process.cc @@ -699,6 +699,10 @@ GLvoid StubGLObjectLabel(GLenum identifier, GLuint name, GLsizei length, glObjectLabelKHR(identifier, name, length, label); } +GLvoid StubTextureBarrier(void) { + glTextureBarrierNV(); +} + } // extern "C" } // namespace @@ -898,6 +902,7 @@ GrGLInterface* CreateInProcessSkiaGLBinding() { functions->fPushDebugGroup = StubGLPushDebugGroup; functions->fPopDebugGroup = StubGLPopDebugGroup; functions->fObjectLabel = StubGLObjectLabel; + functions->fTextureBarrier = StubTextureBarrier; return interface; } diff --git a/ui/gl/gl_mock_autogen_gl.h b/ui/gl/gl_mock_autogen_gl.h index 832c85f5e06..ff951d8e162 100644 --- a/ui/gl/gl_mock_autogen_gl.h +++ b/ui/gl/gl_mock_autogen_gl.h @@ -625,6 +625,7 @@ MOCK_METHOD9(TexSubImage2D, GLenum format, GLenum type, const void* pixels)); +MOCK_METHOD0(TextureBarrierNV, void()); MOCK_METHOD4(TransformFeedbackVaryings, void(GLuint program, GLsizei count,