From 54065bd3d0ddec26354e0babdb46ba731f3b0d03 Mon Sep 17 00:00:00 2001 From: Dave Airlie Date: Thu, 3 Aug 2017 17:37:23 +1000 Subject: [PATCH] glsl: "fix" opt vectorize. Attempted fix for bug 102021 --- src/compiler/glsl/opt_vectorize.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/compiler/glsl/opt_vectorize.cpp b/src/compiler/glsl/opt_vectorize.cpp index 88318cd8a6..72fcc44640 100644 --- a/src/compiler/glsl/opt_vectorize.cpp +++ b/src/compiler/glsl/opt_vectorize.cpp @@ -146,8 +146,12 @@ rewrite_swizzle(ir_instruction *ir, void *data) } case ir_type_expression: { ir_expression *expr = (ir_expression *)ir; - expr->type = glsl_type::get_instance(expr->type->base_type, - mask->num_components, 1); + const glsl_type *new_type = glsl_type::get_instance(expr->type->base_type, + mask->num_components, 1); + /* don't rewrite non-swizzle types or maybe we need to insert a swizzle? */ + if (expr->operands[0]->type != new_type && expr->operands[0]->ir_type != ir_type_swizzle) + break; + expr->type = new_type; for (unsigned i = 0; i < 4; i++) { if (expr->operands[i]) { ir_rvalue *rval = expr->operands[i]->as_rvalue(); -- 2.13.3