diff --git a/renderdoc/driver/gl/gl_driver.h b/renderdoc/driver/gl/gl_driver.h index 6353a4df8..cce4a071f 100644 --- a/renderdoc/driver/gl/gl_driver.h +++ b/renderdoc/driver/gl/gl_driver.h @@ -517,6 +517,8 @@ class WrappedOpenGL IMPLEMENT_FUNCTION_SERIALISED(void, glUseProgram(GLuint program)); IMPLEMENT_FUNCTION_SERIALISED(void, glUseProgramStages(GLuint pipeline, GLbitfield stages, GLuint program)); IMPLEMENT_FUNCTION_SERIALISED(void, glValidateProgram(GLuint program)); + IMPLEMENT_FUNCTION_SERIALISED(void, glShaderBinary(GLsizei count, const GLuint *shaders, GLenum binaryformat, const void *binary, GLsizei length)); + IMPLEMENT_FUNCTION_SERIALISED(void, glProgramBinary(GLuint program, GLenum binaryFormat, const void *binary, GLsizei length)); IMPLEMENT_FUNCTION_SERIALISED(void, glGenProgramPipelines(GLsizei n, GLuint *pipelines)); IMPLEMENT_FUNCTION_SERIALISED(void, glBindProgramPipeline(GLuint pipeline)); IMPLEMENT_FUNCTION_SERIALISED(void, glActiveShaderProgram(GLuint pipeline, GLuint program)); diff --git a/renderdoc/driver/gl/gl_hookset.h b/renderdoc/driver/gl/gl_hookset.h index 00d75f9f2..17a37039a 100644 --- a/renderdoc/driver/gl/gl_hookset.h +++ b/renderdoc/driver/gl/gl_hookset.h @@ -266,6 +266,8 @@ struct GLHookSet PFNGLLINKPROGRAMPROC glLinkProgram; PFNGLPROGRAMPARAMETERIPROC glProgramParameteri; PFNGLUSEPROGRAMPROC glUseProgram; + PFNGLSHADERBINARYPROC glShaderBinary; + PFNGLPROGRAMBINARYPROC glProgramBinary; PFNGLUSEPROGRAMSTAGESPROC glUseProgramStages; PFNGLVALIDATEPROGRAMPROC glValidateProgram; PFNGLGENPROGRAMPIPELINESPROC glGenProgramPipelines; diff --git a/renderdoc/driver/gl/gl_hookset_defs.h b/renderdoc/driver/gl/gl_hookset_defs.h index bbeadc364..0b1125139 100644 --- a/renderdoc/driver/gl/gl_hookset_defs.h +++ b/renderdoc/driver/gl/gl_hookset_defs.h @@ -286,6 +286,8 @@ HookExtension(PFNGLLINKPROGRAMPROC, glLinkProgram); \ HookExtension(PFNGLPROGRAMPARAMETERIPROC, glProgramParameteri); \ HookExtension(PFNGLUSEPROGRAMPROC, glUseProgram); \ + HookExtension(PFNGLSHADERBINARYPROC, glShaderBinary); \ + HookExtension(PFNGLPROGRAMBINARYPROC, glProgramBinary); \ HookExtension(PFNGLUSEPROGRAMSTAGESPROC, glUseProgramStages); \ HookExtension(PFNGLVALIDATEPROGRAMPROC, glValidateProgram); \ HookExtension(PFNGLGENPROGRAMPIPELINESPROC, glGenProgramPipelines); \ @@ -962,6 +964,8 @@ HookWrapper1(void, glLinkProgram, GLuint, program); \ HookWrapper3(void, glProgramParameteri, GLuint, program, GLenum, pname, GLint, value); \ HookWrapper1(void, glUseProgram, GLuint, program); \ + HookWrapper5(void, glShaderBinary, GLsizei, count, const GLuint *, shaders, GLenum, binaryformat, const void *, binary, GLsizei, length); \ + HookWrapper4(void, glProgramBinary, GLuint, program, GLenum, binaryFormat, const void *, binary, GLsizei, length); \ HookWrapper3(void, glUseProgramStages, GLuint, pipeline, GLbitfield, stages, GLuint, program); \ HookWrapper1(void, glValidateProgram, GLuint, program); \ HookWrapper2(void, glGenProgramPipelines, GLsizei, n, GLuint *, pipelines); \ diff --git a/renderdoc/driver/gl/wrappers/gl_shader_funcs.cpp b/renderdoc/driver/gl/wrappers/gl_shader_funcs.cpp index c65959a33..b5b276c37 100644 --- a/renderdoc/driver/gl/wrappers/gl_shader_funcs.cpp +++ b/renderdoc/driver/gl/wrappers/gl_shader_funcs.cpp @@ -690,6 +690,24 @@ void WrappedOpenGL::glValidateProgramPipeline(GLuint pipeline) m_Real.glValidateProgramPipeline(pipeline); } +void WrappedOpenGL::glShaderBinary(GLsizei count, const GLuint *shaders, GLenum binaryformat, const void *binary, GLsizei length) +{ + // deliberately don't forward on this call when writing, since we want to coax the app into providing non-binary shaders. + if(m_State < WRITING) + { + m_Real.glShaderBinary(count, shaders, binaryformat, binary, length); + } +} + +void WrappedOpenGL::glProgramBinary(GLuint program, GLenum binaryFormat, const void *binary, GLsizei length) +{ + // deliberately don't forward on this call when writing, since we want to coax the app into providing non-binary shaders. + if(m_State < WRITING) + { + m_Real.glProgramBinary(program, binaryFormat, binary, length); + } +} + #pragma endregion #pragma region Program Pipelines