reflect_data = ReflectData();
const Module *final_module = &mod;
- TransientData transient;
switch(mod.get_format())
{
case Module::GLSL:
- add_glsl_stages(static_cast<const GlslModule &>(mod), spec_values, transient);
+ add_glsl_stages(static_cast<const GlslModule &>(mod), spec_values);
break;
case Module::SPIR_V:
- if(!spec_values.empty())
+ if(static_cast<const SpirVModule &>(mod).is_specializable())
{
specialized_spirv = static_cast<const SpirVModule &>(mod).specialize(spec_values);
final_module = specialized_spirv;
throw invalid_argument("Program::add_stages");
}
- finalize(*final_module, transient);
-
if(final_module->get_format()==Module::SPIR_V)
{
const SpirVModule &spirv_mod = *static_cast<const SpirVModule *>(final_module);
finalize_uniforms();
- for(const ReflectData::UniformInfo &u: reflect_data.uniforms)
- if(u.binding>=0)
- reflect_data.used_bindings.push_back(u.binding);
- for(const ReflectData::UniformBlockInfo &b: reflect_data.uniform_blocks)
- reflect_data.used_bindings.push_back(b.bind_point);
- sort(reflect_data.used_bindings);
+ reflect_data.update_used_bindings();
for(const ReflectData::UniformInfo &u: reflect_data.uniforms)
require_type(u.type);