diff --git a/renderdoc/driver/gl/gl_shader_refl.cpp b/renderdoc/driver/gl/gl_shader_refl.cpp index 040fe6e9b..73c9c1a58 100644 --- a/renderdoc/driver/gl/gl_shader_refl.cpp +++ b/renderdoc/driver/gl/gl_shader_refl.cpp @@ -1708,7 +1708,11 @@ void MakeShaderReflection(GLenum shadType, GLuint sepProg, ShaderReflection &ref { sort(members[ssbo]); - std::swap(rwresources[ssbos[ssbo]].variableType.members, members[ssbo][0].type.members); + if(rwresources[ssbos[ssbo]].name == members[ssbo][0].name && + members[ssbo][0].type.descriptor.arrayByteStride == 0) + std::swap(rwresources[ssbos[ssbo]].variableType.members, members[ssbo][0].type.members); + else + std::swap(rwresources[ssbos[ssbo]].variableType.members, members[ssbo]); } // patch-up reflection data. For top-level arrays use the stride & rough size to calculate the