glsl: Fix matrix constructors with vector parameters
When the semantics of write masks in assignments were changed, this code was not correctly updated. Fixes piglit test glsl-mat-from-vec-ctor-01.
This commit is contained in:
@@ -627,21 +627,21 @@ assign_to_matrix_column(ir_variable *var, unsigned column, unsigned row_base,
|
||||
assert(column_ref->type->components() >= (row_base + count));
|
||||
assert(src->type->components() >= (src_base + count));
|
||||
|
||||
/* Generate a swizzle that puts the first element of the source at the
|
||||
* location of the first element of the destination.
|
||||
/* Generate a swizzle that extracts the number of components from the source
|
||||
* that are to be assigned to the column of the matrix.
|
||||
*/
|
||||
unsigned swiz[4] = { src_base, src_base, src_base, src_base };
|
||||
for (unsigned i = 0; i < count; i++)
|
||||
swiz[i + row_base] = i;
|
||||
|
||||
ir_rvalue *const rhs =
|
||||
new(mem_ctx) ir_swizzle(src, swiz, count);
|
||||
if (count < src->type->vector_elements) {
|
||||
src = new(mem_ctx) ir_swizzle(src,
|
||||
src_base + 0, src_base + 1,
|
||||
src_base + 2, src_base + 3,
|
||||
count);
|
||||
}
|
||||
|
||||
/* Mask of fields to be written in the assignment.
|
||||
*/
|
||||
const unsigned write_mask = ((1U << count) - 1) << row_base;
|
||||
|
||||
return new(mem_ctx) ir_assignment(column_ref, rhs, NULL, write_mask);
|
||||
return new(mem_ctx) ir_assignment(column_ref, src, NULL, write_mask);
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user