diff --git a/renderdoc/driver/gl/wrappers/gl_shader_funcs.cpp b/renderdoc/driver/gl/wrappers/gl_shader_funcs.cpp index e3a8d342e..d7674deb4 100644 --- a/renderdoc/driver/gl/wrappers/gl_shader_funcs.cpp +++ b/renderdoc/driver/gl/wrappers/gl_shader_funcs.cpp @@ -1756,20 +1756,25 @@ void WrappedOpenGL::glBindProgramPipeline(GLuint pipeline) Serialise_glBindProgramPipeline(ser, pipeline); GetContextRecord()->AddChunk(scope.Get()); - GetResourceManager()->MarkResourceFrameReferenced(ProgramPipeRes(GetCtx(), pipeline), - eFrameRef_Read); - // mark all the sub programs referenced - GLenum programBinds[] = { - eGL_VERTEX_SHADER, eGL_FRAGMENT_SHADER, eGL_GEOMETRY_SHADER, - eGL_TESS_CONTROL_SHADER, eGL_TESS_EVALUATION_SHADER, eGL_COMPUTE_SHADER, - }; - for(GLenum progbind : programBinds) + if(pipeline != 0) { - GLuint prog = 0; - GL.glGetProgramPipelineiv(pipeline, progbind, (GLint *)&prog); - if(prog) - GetResourceManager()->MarkResourceFrameReferenced(ProgramRes(GetCtx(), prog), eFrameRef_Read); + GetResourceManager()->MarkResourceFrameReferenced(ProgramPipeRes(GetCtx(), pipeline), + eFrameRef_Read); + // mark all the sub programs referenced + GLenum programBinds[] = { + eGL_VERTEX_SHADER, eGL_FRAGMENT_SHADER, eGL_GEOMETRY_SHADER, + eGL_TESS_CONTROL_SHADER, eGL_TESS_EVALUATION_SHADER, eGL_COMPUTE_SHADER, + }; + + for(GLenum progbind : programBinds) + { + GLuint prog = 0; + GL.glGetProgramPipelineiv(pipeline, progbind, (GLint *)&prog); + if(prog) + GetResourceManager()->MarkResourceFrameReferenced(ProgramRes(GetCtx(), prog), + eFrameRef_Read); + } } } }