Store parent-relative byte offset in UBOs from GLSL reflection

This commit is contained in:
baldurk
2019-08-16 16:12:01 +01:00
parent 8ec76b1e44
commit 9d9aa49330
2 changed files with 7 additions and 3 deletions
+4
View File
@@ -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);
+3 -3
View File
@@ -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);