--- src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 37 ++++++++++++++++++---------- 1 files changed, 24 insertions(+), 13 deletions(-)
diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp index 77aa0d1..59ecb52 100644 --- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp +++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp @@ -286,6 +286,13 @@ public: st_src_reg return_reg; }; +class variable_store { +public: + exec_list variables; + variable_storage *find_variable_storage(class ir_variable *var); + void push(class variable_storage *); +}; + class glsl_to_tgsi_visitor : public ir_visitor { public: glsl_to_tgsi_visitor(); @@ -308,8 +315,6 @@ public: int glsl_version; bool native_integers; - variable_storage *find_variable_storage(ir_variable *var); - int add_constant(gl_register_file file, gl_constant_value values[4], int size, int datatype, GLuint *swizzle_out); @@ -352,7 +357,7 @@ public: st_src_reg result; /** List of variable_storage */ - exec_list variables; + variable_store store; /** List of immediate_storage */ exec_list immediates; @@ -994,7 +999,7 @@ glsl_to_tgsi_visitor::get_temp(const glsl_type *type) } variable_storage * -glsl_to_tgsi_visitor::find_variable_storage(ir_variable *var) +variable_store::find_variable_storage(ir_variable *var) { variable_storage *entry; @@ -1010,6 +1015,12 @@ glsl_to_tgsi_visitor::find_variable_storage(ir_variable *var) } void +variable_store::push(variable_storage *storage) +{ + variables.push_tail(storage); +} + +void glsl_to_tgsi_visitor::visit(ir_variable *ir) { if (strcmp(ir->name, "gl_FragCoord") == 0) { @@ -1041,7 +1052,7 @@ glsl_to_tgsi_visitor::visit(ir_variable *ir) if (i == ir->num_state_slots) { /* We'll set the index later. */ storage = new(mem_ctx) variable_storage(ir, PROGRAM_STATE_VAR, -1); - this->variables.push_tail(storage); + store.push(storage); dst = undef_dst; } else { @@ -1053,7 +1064,7 @@ glsl_to_tgsi_visitor::visit(ir_variable *ir) storage = new(mem_ctx) variable_storage(ir, PROGRAM_TEMPORARY, this->next_temp); - this->variables.push_tail(storage); + store.push(storage); this->next_temp += type_size(ir->type); dst = st_dst_reg(st_src_reg(PROGRAM_TEMPORARY, storage->index, @@ -1893,7 +1904,7 @@ glsl_to_tgsi_visitor::visit(ir_swizzle *ir) void glsl_to_tgsi_visitor::visit(ir_dereference_variable *ir) { - variable_storage *entry = find_variable_storage(ir->var); + variable_storage *entry = store.find_variable_storage(ir->var); ir_variable *var = ir->var; if (!entry) { @@ -1901,7 +1912,7 @@ glsl_to_tgsi_visitor::visit(ir_dereference_variable *ir) case ir_var_uniform: entry = new(mem_ctx) variable_storage(var, PROGRAM_UNIFORM, var->location); - this->variables.push_tail(entry); + store.push(entry); break; case ir_var_in: case ir_var_inout: @@ -1932,7 +1943,7 @@ glsl_to_tgsi_visitor::visit(ir_dereference_variable *ir) case ir_var_temporary: entry = new(mem_ctx) variable_storage(var, PROGRAM_TEMPORARY, this->next_temp); - this->variables.push_tail(entry); + store.push(entry); next_temp += type_size(var->type); break; @@ -2411,12 +2422,12 @@ glsl_to_tgsi_visitor::get_function_signature(ir_function_signature *sig) ir_variable *param = (ir_variable *)iter.get(); variable_storage *storage; - storage = find_variable_storage(param); + storage = store.find_variable_storage(param); assert(!storage); storage = new(mem_ctx) variable_storage(param, PROGRAM_TEMPORARY, this->next_temp); - this->variables.push_tail(storage); + store.push(storage); this->next_temp += type_size(param->type); } @@ -2447,7 +2458,7 @@ glsl_to_tgsi_visitor::visit(ir_call *ir) if (param->mode == ir_var_in || param->mode == ir_var_inout) { - variable_storage *storage = find_variable_storage(param); + variable_storage *storage = store.find_variable_storage(param); assert(storage); param_rval->accept(this); @@ -2483,7 +2494,7 @@ glsl_to_tgsi_visitor::visit(ir_call *ir) if (param->mode == ir_var_out || param->mode == ir_var_inout) { - variable_storage *storage = find_variable_storage(param); + variable_storage *storage = store.find_variable_storage(param); assert(storage); st_src_reg r; -- 1.7.7 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev