mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-24 21:50:12 +01:00
ir_to_mesa: Fix the swizzles on record and array dereferences.
Fixes: glsl1-struct (1) glsl1-struct (2) glsl1-struct (3) glsl1-struct (4)
This commit is contained in:
parent
9703ed05e6
commit
85e93da18c
1 changed files with 9 additions and 3 deletions
|
|
@ -1151,7 +1151,10 @@ ir_to_mesa_visitor::visit(ir_dereference_variable *ir)
|
|||
src_reg.file = entry->file;
|
||||
src_reg.index = entry->index;
|
||||
/* If the type is smaller than a vec4, replicate the last channel out. */
|
||||
src_reg.swizzle = swizzle_for_size(ir->var->type->vector_elements);
|
||||
if (ir->type->is_scalar() || ir->type->is_vector())
|
||||
src_reg.swizzle = swizzle_for_size(ir->var->type->vector_elements);
|
||||
else
|
||||
src_reg.swizzle = SWIZZLE_NOOP;
|
||||
src_reg.reladdr = NULL;
|
||||
src_reg.negate = 0;
|
||||
|
||||
|
|
@ -1231,7 +1234,10 @@ ir_to_mesa_visitor::visit(ir_dereference_array *ir)
|
|||
}
|
||||
|
||||
/* If the type is smaller than a vec4, replicate the last channel out. */
|
||||
src_reg.swizzle = swizzle_for_size(ir->type->vector_elements);
|
||||
if (ir->type->is_scalar() || ir->type->is_vector())
|
||||
src_reg.swizzle = swizzle_for_size(ir->type->vector_elements);
|
||||
else
|
||||
src_reg.swizzle = SWIZZLE_NOOP;
|
||||
|
||||
this->result = src_reg;
|
||||
}
|
||||
|
|
@ -1250,6 +1256,7 @@ ir_to_mesa_visitor::visit(ir_dereference_record *ir)
|
|||
break;
|
||||
offset += type_size(struct_type->fields.structure[i].type);
|
||||
}
|
||||
this->result.swizzle = swizzle_for_size(ir->type->vector_elements);
|
||||
this->result.index += offset;
|
||||
}
|
||||
|
||||
|
|
@ -1322,7 +1329,6 @@ ir_to_mesa_visitor::visit(ir_assignment *ir)
|
|||
int i;
|
||||
|
||||
assert(!ir->lhs->type->is_array());
|
||||
assert(ir->lhs->type->base_type != GLSL_TYPE_STRUCT);
|
||||
|
||||
ir->rhs->accept(this);
|
||||
r = this->result;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue