From: Marek Olšák <marek.ol...@amd.com> --- src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-)
diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp index 5bc2661..b857a5b 100644 --- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp +++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp @@ -551,24 +551,22 @@ public: void emit_scalar(ir_instruction *ir, unsigned op, st_dst_reg dst, st_src_reg src0, st_src_reg src1); void emit_arl(ir_instruction *ir, st_dst_reg dst, st_src_reg src0); void get_deref_offsets(ir_dereference *ir, unsigned *array_size, unsigned *base, unsigned *index, st_src_reg *reladdr); - void calc_deref_offsets(ir_dereference *head, - ir_dereference *tail, + void calc_deref_offsets(ir_dereference *tail, unsigned *array_elements, - unsigned *base, unsigned *index, st_src_reg *indirect, unsigned *location); st_src_reg canonicalize_gather_offset(st_src_reg offset); bool try_emit_mad(ir_expression *ir, int mul_operand); bool try_emit_mad_for_and_not(ir_expression *ir, int mul_operand); @@ -3878,35 +3876,33 @@ glsl_to_tgsi_visitor::visit(ir_call *ir) r.index++; } } } /* Process return value. */ this->result = entry->return_reg; } void -glsl_to_tgsi_visitor::calc_deref_offsets(ir_dereference *head, - ir_dereference *tail, +glsl_to_tgsi_visitor::calc_deref_offsets(ir_dereference *tail, unsigned *array_elements, - unsigned *base, unsigned *index, st_src_reg *indirect, unsigned *location) { switch (tail->ir_type) { case ir_type_dereference_record: { ir_dereference_record *deref_record = tail->as_dereference_record(); const glsl_type *struct_type = deref_record->record->type; int field_index = deref_record->record->type->field_index(deref_record->field); - calc_deref_offsets(head, deref_record->record->as_dereference(), array_elements, base, index, indirect, location); + calc_deref_offsets(deref_record->record->as_dereference(), array_elements, index, indirect, location); assert(field_index >= 0); *location += struct_type->record_location_offset(field_index); break; } case ir_type_dereference_array: { ir_dereference_array *deref_arr = tail->as_dereference_array(); ir_constant *array_index = deref_arr->array_index->constant_expression_value(); @@ -3929,21 +3925,21 @@ glsl_to_tgsi_visitor::calc_deref_offsets(ir_dereference *head, else { temp_dst = st_dst_reg(*indirect); temp_dst.writemask = 1; emit_asm(NULL, TGSI_OPCODE_ADD, temp_dst, *indirect, temp_reg); } } else *index += array_index->value.u[0] * *array_elements; *array_elements *= deref_arr->array->type->length; - calc_deref_offsets(head, deref_arr->array->as_dereference(), array_elements, base, index, indirect, location); + calc_deref_offsets(deref_arr->array->as_dereference(), array_elements, index, indirect, location); break; } default: break; } } void glsl_to_tgsi_visitor::get_deref_offsets(ir_dereference *ir, unsigned *array_size, @@ -3956,21 +3952,21 @@ glsl_to_tgsi_visitor::get_deref_offsets(ir_dereference *ir, ir_variable *var = ir->variable_referenced(); memset(reladdr, 0, sizeof(*reladdr)); reladdr->file = PROGRAM_UNDEFINED; *base = 0; *array_size = 1; assert(var); location = var->data.location; - calc_deref_offsets(ir, ir, array_size, base, index, reladdr, &location); + calc_deref_offsets(ir, array_size, index, reladdr, &location); /* * If we end up with no indirect then adjust the base to the index, * and set the array size to 1. */ if (reladdr->file == PROGRAM_UNDEFINED) { *base = *index; *array_size = 1; } -- 2.7.4 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev