From 63383e58b25321188cbc65bf9a6bc7e2a0faaabb Mon Sep 17 00:00:00 2001 From: Mikko Rasa Date: Fri, 2 Apr 2021 12:48:46 +0300 Subject: [PATCH] Fix an error in calculating SPIR-V uniform offsets --- source/core/program.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/source/core/program.cpp b/source/core/program.cpp index f28736bd..6fdf747d 100644 --- a/source/core/program.cpp +++ b/source/core/program.cpp @@ -495,15 +495,16 @@ void Program::collect_block_uniforms(UniformBlockInfo &block, const SpirVModule: { for(vector::const_iterator i=strct.members.begin(); i!=strct.members.end(); ++i) { + unsigned offset = base_offset+i->offset; if(i->struct_type) { if(i->array_size) { - for(unsigned j=0; jarray_size; ++j) - collect_block_uniforms(block, *i->struct_type, format("%s%s[%d].", prefix, i->name, j), base_offset+i->offset+i->array_stride*j); + for(unsigned j=0; jarray_size; ++j, offset+=i->array_stride) + collect_block_uniforms(block, *i->struct_type, format("%s%s[%d].", prefix, i->name, j), offset); } else - collect_block_uniforms(block, *i->struct_type, prefix+i->name+".", base_offset+i->offset); + collect_block_uniforms(block, *i->struct_type, prefix+i->name+".", offset); } else { @@ -511,7 +512,7 @@ void Program::collect_block_uniforms(UniformBlockInfo &block, const SpirVModule: UniformInfo &info = uniforms[name]; info.name = name; info.block = █ - info.offset = i->offset; + info.offset = offset; info.array_size = i->array_size; info.array_stride = i->array_stride; info.matrix_stride = i->matrix_stride; -- 2.43.0