}
}
}
+
+ sort_member(rd.uniform_blocks, &ReflectData::UniformBlockInfo::tag);
+ for(ReflectData::UniformBlockInfo &b: rd.uniform_blocks)
+ for(const ReflectData::UniformInfo *u: b.uniforms)
+ const_cast<ReflectData::UniformInfo *>(u)->block = &b;
+
+ rd.update_layout_hash();
}
void OpenGLProgram::compile_glsl_stage(const GlslModule &mod, unsigned stage_id)
default_block.sort_uniforms();
default_block.update_layout_hash();
- rd.update_layout_hash();
}
void OpenGLProgram::query_uniform_blocks(const vector<ReflectData::UniformInfo *> &uniforms_by_index)
glGetActiveUniformBlockName(id, i, sizeof(name), &len, name);
rd.uniform_blocks.emplace_back();
ReflectData::UniformBlockInfo &info = rd.uniform_blocks.back();
- info.name = name;
+ info.tag = info.name = name;
int value;
glGetActiveUniformBlockiv(id, i, GL_UNIFORM_BLOCK_DATA_SIZE, &value);
{
ReflectData &rd = static_cast<Program *>(this)->reflect_data;
- auto i = find_if(rd.uniform_blocks, [](const ReflectData::UniformBlockInfo &b){ return b.bind_point<0; });
+ auto i = find_member(rd.uniform_blocks, static_cast<int>(ReflectData::DEFAULT_BLOCK), &ReflectData::UniformBlockInfo::bind_point);
if(i!=rd.uniform_blocks.end() && !i->uniforms.empty())
{
for(const ReflectData::UniformInfo *u: i->uniforms)
{
reflect_data.uniform_blocks.emplace_back();
ReflectData::UniformBlockInfo &info = reflect_data.uniform_blocks.back();
- info.name = v.struct_type->name;
+ info.tag = info.name = v.struct_type->name;
info.data_size = v.struct_type->size;
if(v.storage==SpirVModule::PUSH_CONSTANT)
{
// The element is already known to be present
ReflectData::UniformInfo &uni = *lower_bound_member(reflect_data.uniforms, Tag(n), &ReflectData::UniformInfo::tag);
block.uniforms.push_back(&uni);
- uni.block = █
}
block.sort_uniforms();
block.update_layout_hash();
}
+ sort_member(reflect_data.uniform_blocks, &ReflectData::UniformBlockInfo::tag);
+ for(ReflectData::UniformBlockInfo &b: reflect_data.uniform_blocks)
+ for(const ReflectData::UniformInfo *u: b.uniforms)
+ const_cast<ReflectData::UniformInfo *>(u)->block = &b;
+
reflect_data.update_layout_hash();
}