diff options
Diffstat (limited to 'ir_to_mesa.cpp')
-rw-r--r-- | ir_to_mesa.cpp | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/ir_to_mesa.cpp b/ir_to_mesa.cpp index b496a87df5..26449c5a5c 100644 --- a/ir_to_mesa.cpp +++ b/ir_to_mesa.cpp @@ -152,6 +152,9 @@ public: enum prog_opcode op, ir_to_mesa_dst_reg dst, ir_to_mesa_src_reg src0); + + /* talloc context (the ) */ + void *ctx; }; ir_to_mesa_src_reg ir_to_mesa_undef = { @@ -236,7 +239,7 @@ ir_to_mesa_visitor::ir_to_mesa_emit_op3(ir_instruction *ir, ir_to_mesa_src_reg src1, ir_to_mesa_src_reg src2) { - ir_to_mesa_instruction *inst = new ir_to_mesa_instruction(); + ir_to_mesa_instruction *inst = new(ctx) ir_to_mesa_instruction(); inst->op = op; inst->dst_reg = dst; @@ -766,7 +769,8 @@ ir_to_mesa_visitor::visit(ir_dereference_variable *ir) if (!entry) { switch (ir->var->mode) { case ir_var_uniform: - entry = new temp_entry(ir->var, PROGRAM_UNIFORM, this->next_uniform); + entry = new(ctx) temp_entry(ir->var, PROGRAM_UNIFORM, + this->next_uniform); this->variable_storage.push_tail(entry); this->next_uniform += type_size(ir->var->type); @@ -790,12 +794,13 @@ ir_to_mesa_visitor::visit(ir_dereference_variable *ir) ir->var->name); abort(); } - entry = new temp_entry(ir->var, - builtin_var_to_mesa_reg[i].file, - builtin_var_to_mesa_reg[i].index); + entry = new(ctx) temp_entry(ir->var, + builtin_var_to_mesa_reg[i].file, + builtin_var_to_mesa_reg[i].index); break; case ir_var_auto: - entry = new temp_entry(ir->var, PROGRAM_TEMPORARY, this->next_temp); + entry = new(ctx) temp_entry(ir->var, PROGRAM_TEMPORARY, + this->next_temp); this->variable_storage.push_tail(entry); next_temp += type_size(ir->var->type); @@ -1164,6 +1169,7 @@ do_ir_to_mesa(exec_list *instructions) ir_instruction **mesa_instruction_annotation; int i; + v.ctx = talloc_new(NULL); visit_exec_list(instructions, &v); int num_instructions = 0; @@ -1201,4 +1207,5 @@ do_ir_to_mesa(exec_list *instructions) print_program(mesa_instructions, mesa_instruction_annotation, num_instructions); free(mesa_instruction_annotation); + talloc_free(v.ctx); } |