diff --git a/renderdoc/driver/gl/gl_shader_refl.cpp b/renderdoc/driver/gl/gl_shader_refl.cpp index 90f50243f..43fad6552 100644 --- a/renderdoc/driver/gl/gl_shader_refl.cpp +++ b/renderdoc/driver/gl/gl_shader_refl.cpp @@ -1795,6 +1795,10 @@ void MakeShaderReflection(GLenum shadType, GLuint sepProg, ShaderReflection &ref (GLint *)&cblock.byteSize); sort(ubos[i]); + + for(ShaderConstant &member : ubos[i]) + MakeChildByteOffsetsRelative(member); + std::swap(cblock.variables, ubos[i]); refl.constantBlocks.push_back(cblock); diff --git a/renderdoc/driver/gl/wrappers/gl_emulated.cpp b/renderdoc/driver/gl/wrappers/gl_emulated.cpp index bb4689002..cc750bae6 100644 --- a/renderdoc/driver/gl/wrappers/gl_emulated.cpp +++ b/renderdoc/driver/gl/wrappers/gl_emulated.cpp @@ -3942,7 +3942,7 @@ void main() { const ShaderConstant &submember = member.type.members[0]; INFO("UBO submember: " << submember.name.c_str()); - CHECK(submember.byteOffset == 192); + CHECK(submember.byteOffset == 0); CHECK(submember.type.members.empty()); CHECK(submember.type.descriptor.type == VarType::Float); CHECK(submember.type.descriptor.rows == 1); @@ -3955,7 +3955,7 @@ void main() { const ShaderConstant &submember = member.type.members[1]; INFO("UBO submember: " << submember.name.c_str()); - CHECK(submember.byteOffset == 196); + CHECK(submember.byteOffset == 4); CHECK(submember.type.members.empty()); CHECK(submember.type.descriptor.type == VarType::SInt); CHECK(submember.type.descriptor.rows == 1); @@ -3968,7 +3968,7 @@ void main() { const ShaderConstant &submember = member.type.members[2]; INFO("UBO submember: " << submember.name.c_str()); - CHECK(submember.byteOffset == 208); + CHECK(submember.byteOffset == 16); CHECK(submember.type.members.empty()); CHECK(submember.type.descriptor.type == VarType::Float); CHECK(submember.type.descriptor.rows == 2);