]> git.tdb.fi Git - libs/gl.git/blobdiff - source/glsl/spirv.cpp
Don't record references to null declarations
[libs/gl.git] / source / glsl / spirv.cpp
index 233d15488dd043de95408e3642c075aba9d2d280..d8f24d20b7007342827423cfd3b7d3b5b85bee79 100644 (file)
@@ -570,7 +570,7 @@ void SpirVGenerator::generate_composite_access(TypeDeclaration &result_type)
                throw internal_error("assignment to temporary composite");
        else
        {
-               for(unsigned i: r_composite_chain)
+               for(unsigned &i: r_composite_chain)
                        for(auto j=constant_ids.begin(); (i>=0x400000 && j!=constant_ids.end()); ++j)
                                if(j->second==(i&0x3FFFFF))
                                        i = j->first.int_value;
@@ -1646,6 +1646,11 @@ void SpirVGenerator::visit(VariableDeclaration &var)
                                        writer.write_op_decorate(var_id, DECO_BINDING, q.value);
                        }
                }
+               if(!var.name.compare(0, 3, "gl_"))
+               {
+                       BuiltinSemantic semantic = get_builtin_semantic(var.name);
+                       writer.write_op_decorate(var_id, DECO_BUILTIN, semantic);
+               }
 
                if(init_id && current_function)
                {
@@ -1858,7 +1863,8 @@ void SpirVGenerator::visit(Iteration &iter)
        if(iter.init_statement)
                iter.init_statement->visit(*this);
 
-       variable_load_ids.clear();
+       for(VariableDeclaration *v: AssignmentCollector().apply(iter))
+               variable_load_ids.erase(v);
 
        Id header_id = next_id++;
        Id continue_id = next_id++;