]> git.tdb.fi Git - libs/gl.git/blobdiff - source/glsl/spirv.cpp
Add a cached load when initializing a variable
[libs/gl.git] / source / glsl / spirv.cpp
index 70d5fe789f125ecd04e0e6bb89d58614f6b39b4c..6ef58e909f1f2345c4468e5567da282749facfcb 100644 (file)
@@ -1623,7 +1623,10 @@ void SpirVGenerator::visit(VariableDeclaration &var)
                }
 
                if(init_id && current_function)
+               {
                        writer.write_op(content.function_body, OP_STORE, var_id, init_id);
+                       variable_load_ids[&var] = init_id;
+               }
        }
 
        writer.write_op_name(var_id, var.name);
@@ -1832,6 +1835,8 @@ void SpirVGenerator::visit(Iteration &iter)
        if(iter.init_statement)
                iter.init_statement->visit(*this);
 
+       variable_load_ids.clear();
+
        Id header_id = next_id++;
        Id continue_id = next_id++;
        Id merge_block_id = next_id++;
@@ -1859,7 +1864,6 @@ void SpirVGenerator::visit(Iteration &iter)
        writer.write_op(content.function_body, OP_BRANCH, header_id);
 
        writer.write_op_label(merge_block_id);
-       prune_loads(header_id);
        reachable = true;
 }