mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 04:48:08 +02:00
st/glsl_to_tgsi: simpler fixup of empty writemasks
Empty writemasks mean "copy everything", so we can always just use the number of vector elements (which uses the GLSL meaning here, i.e. each double is a single element/writemask bit). Reviewed-by: Edward O'Callaghan <funfunctor@folklore1984.net> Reviewed-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
parent
957d541089
commit
f5f3cadca3
1 changed files with 10 additions and 27 deletions
|
|
@ -2842,33 +2842,7 @@ glsl_to_tgsi_visitor::visit(ir_assignment *ir)
|
|||
|
||||
l = get_assignment_lhs(ir->lhs, this);
|
||||
|
||||
/* FINISHME: This should really set to the correct maximal writemask for each
|
||||
* FINISHME: component written (in the loops below). This case can only
|
||||
* FINISHME: occur for matrices, arrays, and structures.
|
||||
*/
|
||||
if (ir->write_mask == 0) {
|
||||
assert(!ir->lhs->type->is_scalar() && !ir->lhs->type->is_vector());
|
||||
|
||||
if (ir->lhs->type->is_array() || ir->lhs->type->without_array()->is_matrix()) {
|
||||
if (ir->lhs->type->without_array()->is_64bit()) {
|
||||
switch (ir->lhs->type->without_array()->vector_elements) {
|
||||
case 1:
|
||||
l.writemask = WRITEMASK_X;
|
||||
break;
|
||||
case 2:
|
||||
l.writemask = WRITEMASK_XY;
|
||||
break;
|
||||
case 3:
|
||||
l.writemask = WRITEMASK_XYZ;
|
||||
break;
|
||||
case 4:
|
||||
l.writemask = WRITEMASK_XYZW;
|
||||
break;
|
||||
}
|
||||
} else
|
||||
l.writemask = WRITEMASK_XYZW;
|
||||
}
|
||||
} else {
|
||||
{
|
||||
int swizzles[4];
|
||||
int first_enabled_chan = 0;
|
||||
int rhs_chan = 0;
|
||||
|
|
@ -2887,6 +2861,15 @@ glsl_to_tgsi_visitor::visit(ir_assignment *ir)
|
|||
assert(variable->data.location == FRAG_RESULT_STENCIL);
|
||||
l.writemask = WRITEMASK_Y;
|
||||
}
|
||||
} else if (ir->write_mask == 0) {
|
||||
assert(!ir->lhs->type->is_scalar() && !ir->lhs->type->is_vector());
|
||||
|
||||
if (ir->lhs->type->is_array() || ir->lhs->type->is_matrix()) {
|
||||
unsigned num_elements = ir->lhs->type->without_array()->vector_elements;
|
||||
l.writemask = u_bit_consecutive(0, num_elements);
|
||||
} else {
|
||||
l.writemask = WRITEMASK_XYZW;
|
||||
}
|
||||
} else {
|
||||
l.writemask = ir->write_mask;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue