X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fcore%2Fprogram.cpp;h=4b53b8fe2f28e7e812e605654d6d7d64ec695aeb;hb=ddb8e4ceea602d90ca7d9dc2637b9285610787bd;hp=f28736bd9a63b7550ef712e0ab531d5a6b26b68d;hpb=58e4e69e640838076c506a94cd5f8f905d55420a;p=libs%2Fgl.git diff --git a/source/core/program.cpp b/source/core/program.cpp index f28736bd..4b53b8fe 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; @@ -533,6 +534,7 @@ void Program::collect_attributes() if((*j)->storage==SpirVModule::INPUT) { AttributeInfo &info = attributes[(*j)->name]; + info.name = (*j)->name; info.location = (*j)->location; info.array_size = (*j)->array_size; info.type = (*j)->type;