glsl: Simplify generation of swizzle for vector constructors
This commit is contained in:
parent
38e55153af
commit
2d2d6a80c1
|
@ -577,18 +577,17 @@ emit_inline_vector_constructor(const glsl_type *type,
|
|||
|
||||
const ir_constant *const c = param->as_constant();
|
||||
if (c == NULL) {
|
||||
/* Generate a swizzle in case rhs_components != rhs->type->vector_elements. */
|
||||
unsigned swiz[4] = { 0, 0, 0, 0 };
|
||||
for (unsigned i = 0; i < rhs_components; i++)
|
||||
swiz[i] = i;
|
||||
|
||||
/* Mask of fields to be written in the assignment.
|
||||
*/
|
||||
const unsigned write_mask = ((1U << rhs_components) - 1)
|
||||
<< base_component;
|
||||
|
||||
ir_dereference *lhs = new(ctx) ir_dereference_variable(var);
|
||||
ir_rvalue *rhs = new(ctx) ir_swizzle(param, swiz, rhs_components);
|
||||
|
||||
/* Generate a swizzle so that LHS and RHS sizes match.
|
||||
*/
|
||||
ir_rvalue *rhs =
|
||||
new(ctx) ir_swizzle(param, 0, 1, 2, 3, rhs_components);
|
||||
|
||||
ir_instruction *inst =
|
||||
new(ctx) ir_assignment(lhs, rhs, NULL, write_mask);
|
||||
|
|
Loading…
Reference in New Issue