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())
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();
+ reflect_data.update_used_bindings();
+
for(const ReflectData::UniformInfo &u: reflect_data.uniforms)
require_type(u.type);
for(const ReflectData::AttributeInfo &a: reflect_data.attributes)
return i!=reflect_data.uniforms.end() && i->tag==tag ? i->binding : -1;
}
+bool Program::uses_binding(int binding) const
+{
+ auto i = lower_bound(reflect_data.used_bindings, binding);
+ return i!=reflect_data.used_bindings.end() && *i==binding;
+}
+
const ReflectData::AttributeInfo &Program::get_attribute_info(const string &name) const
{
auto i = lower_bound_member(reflect_data.attributes, name, &ReflectData::AttributeInfo::name);