throw invalid_argument("Program::add_stages");
}
- finalize(mod);
+ finalize(mod, transient);
- if(mod.get_format()==Module::GLSL)
- {
- query_uniforms();
- query_attributes();
- apply_bindings(transient);
- }
- else if(mod.get_format()==Module::SPIR_V)
+ if(mod.get_format()==Module::SPIR_V)
{
collect_uniforms(static_cast<const SpirVModule &>(mod), transient.spec_values);
collect_attributes(static_cast<const SpirVModule &>(mod));
}
- for(ReflectData::UniformBlockInfo &b: reflect_data.uniform_blocks)
- if(!b.data_size && !b.uniforms.empty())
- {
- const ReflectData::UniformInfo &uni = *b.uniforms.back();
- b.data_size = uni.location*16+uni.array_size*get_type_size(uni.type);
- }
+ finalize_uniforms();
for(const ReflectData::UniformInfo &u: reflect_data.uniforms)
require_type(u.type);