From adbf24da773139b82db5e7c082c1f18c7cba29de Mon Sep 17 00:00:00 2001 From: baldurk Date: Wed, 16 Jan 2019 13:23:40 +0000 Subject: [PATCH] Use latest set of shaders attached to program for initial states * If multiple shaders are attached to a program only use the latest set as they override anything that came before. --- renderdoc/driver/gl/gl_initstate.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/renderdoc/driver/gl/gl_initstate.cpp b/renderdoc/driver/gl/gl_initstate.cpp index 4043e4d96..8102053d8 100644 --- a/renderdoc/driver/gl/gl_initstate.cpp +++ b/renderdoc/driver/gl/gl_initstate.cpp @@ -1187,10 +1187,17 @@ bool GLResourceManager::Serialise_InitialState(SerialiserType &ser, ResourceId r GLuint initProg = GL.glCreateProgram(); + uint32_t numShaders = 0; + std::vector vertexOutputs; - for(size_t i = 0; i < details.shaders.size(); i++) + for(size_t i = 0; i < ARRAY_COUNT(details.stageShaders); i++) { - const auto &shadDetails = m_Driver->m_Shaders[details.shaders[i]]; + if(details.stageShaders[i] == ResourceId()) + continue; + + numShaders++; + + const auto &shadDetails = m_Driver->m_Shaders[details.stageShaders[i]]; GLuint shad = GL.glCreateShader(shadDetails.type); @@ -1282,7 +1289,7 @@ bool GLResourceManager::Serialise_InitialState(SerialiserType &ser, ResourceId r if(status == 0) { - if(details.shaders.size() == 0) + if(numShaders == 0) { RDCWARN("No shaders attached to program"); }