]> git.tdb.fi Git - libs/gl.git/blobdiff - source/glsl/spirv.cpp
Add basic Vulkan support to the shader compiler
[libs/gl.git] / source / glsl / spirv.cpp
index 609cdb1968ac896627045cf8de82c61dd9284d15..c9062efa12ae7aee7dfb54ca6638d64ca57b3da8 100644 (file)
@@ -1680,7 +1680,16 @@ void SpirVGenerator::visit(VariableDeclaration &var)
 
 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);
@@ -1706,10 +1715,10 @@ void SpirVGenerator::visit(InterfaceBlock &iface)
 
        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);
        }
 }