glsl: Simplify generation of swizzle for vector constructors
authorIan Romanick <ian.d.romanick@intel.com>
Mon, 15 Nov 2010 21:41:06 +0000 (13:41 -0800)
committerIan Romanick <ian.d.romanick@intel.com>
Tue, 16 Nov 2010 20:11:02 +0000 (12:11 -0800)
src/glsl/ast_function.cpp

index e9e8d250014216f023aa309936b67f816e54989b..924e35afc097f7d68ae539d17ac628d0b3209104 100644 (file)
@@ -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);