void SpirVGenerator::visit(InterfaceBlock &iface)
{
- StorageClass storage = get_interface_storage(iface.interface, true);
+ const vector<Layout::Qualifier> *layout_ql = (iface.layout ? &iface.layout->qualifiers : 0);
+
+ bool push_const = false;
+ if(layout_ql)
+ {
+ auto i = find_member(*layout_ql, string("push_constant"), &Layout::Qualifier::name);
+ push_const = (i!=layout_ql->end());
+ }
+
+ StorageClass storage = (push_const ? STORAGE_PUSH_CONSTANT : get_interface_storage(iface.interface, true));
Id type_id;
if(iface.array)
type_id = get_array_type_id(*iface.struct_declaration, 0);
writer.write_op(content.globals, OP_VARIABLE, ptr_type_id, block_id, storage);
- if(iface.layout)
+ if(layout_ql)
{
- auto i = find_member(iface.layout->qualifiers, string("binding"), &Layout::Qualifier::name);
- if(i!=iface.layout->qualifiers.end())
+ auto i = find_member(*layout_ql, string("binding"), &Layout::Qualifier::name);
+ if(i!=layout_ql->end())
writer.write_op_decorate(block_id, DECO_BINDING, i->value);
}
}