X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fglsl%2Fspirv.cpp;h=d8f24d20b7007342827423cfd3b7d3b5b85bee79;hb=d9bf5beb410d684a2a0d36f60ba5abd3745cc9d3;hp=233d15488dd043de95408e3642c075aba9d2d280;hpb=38712d8ecc57d043a2419ffbaeeb57f7a6586f14;p=libs%2Fgl.git diff --git a/source/glsl/spirv.cpp b/source/glsl/spirv.cpp index 233d1548..d8f24d20 100644 --- a/source/glsl/spirv.cpp +++ b/source/glsl/spirv.cpp @@ -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++;