};
SpirVGenerator::SpirVGenerator():
- stage(0),
- current_function(0),
- writer(content),
- next_id(1),
- r_expression_result_id(0),
- constant_expression(false),
- spec_constant(false),
- reachable(false),
- composite_access(false),
- r_composite_base_id(0),
- r_composite_base(0),
- assignment_source_id(0),
- loop_merge_block_id(0),
- loop_continue_target_id(0)
+ writer(content)
{ }
void SpirVGenerator::apply(Module &module)
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;
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)
{
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++;