summaryrefslogtreecommitdiff
path: root/ir_to_mesa.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ir_to_mesa.cpp')
-rw-r--r--ir_to_mesa.cpp19
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);
}