From ed3c50db87b0d51f0cd341a3606b7e4f1013f70a Mon Sep 17 00:00:00 2001 From: baldurk Date: Tue, 23 Dec 2014 23:11:25 +0000 Subject: [PATCH] Leave enum alone for passing to glGetProgramStageiv * We can't pass GL_COMPUTE_SHADER to glGetProgramPipelineiv in some cases, but if we have a program (not pipeline) and want to query, we need the enum intact even if the AMD bug workaround is active. --- renderdoc/driver/gl/gl_renderstate.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/renderdoc/driver/gl/gl_renderstate.cpp b/renderdoc/driver/gl/gl_renderstate.cpp index 24372b199..0e103fce8 100644 --- a/renderdoc/driver/gl/gl_renderstate.cpp +++ b/renderdoc/driver/gl/gl_renderstate.cpp @@ -154,15 +154,19 @@ void GLRenderState::FetchState(void *ctx, WrappedOpenGL *gl) eGL_TESS_EVALUATION_SHADER, eGL_GEOMETRY_SHADER, eGL_FRAGMENT_SHADER, - VendorCheck[VendorCheck_AMD_pipeline_compute_query] ? eGL_NONE : eGL_COMPUTE_SHADER, + eGL_COMPUTE_SHADER, }; RDCCOMPILE_ASSERT(ARRAY_COUNT(shs) == ARRAY_COUNT(Subroutines), "Subroutine array not the right size"); for(size_t s=0; s < ARRAY_COUNT(shs); s++) { GLuint prog = Program; - if(prog == 0 && Pipeline != 0 && shs[s] != eGL_NONE) - m_Real->glGetProgramPipelineiv(Pipeline, shs[s], (GLint *)&prog); + if(prog == 0 && Pipeline != 0) + { + // can't query for GL_COMPUTE_SHADER on some AMD cards + if(shs[s] != eGL_COMPUTE_SHADER || !VendorCheck[VendorCheck_AMD_pipeline_compute_query]) + m_Real->glGetProgramPipelineiv(Pipeline, shs[s], (GLint *)&prog); + } if(prog == 0) continue;