diff --git a/src/compiler/glsl/glsl_to_nir.cpp b/src/compiler/glsl/glsl_to_nir.cpp index 601b87fc2ad..536bedd316b 100644 --- a/src/compiler/glsl/glsl_to_nir.cpp +++ b/src/compiler/glsl/glsl_to_nir.cpp @@ -2329,15 +2329,9 @@ nir_visitor::visit(ir_expression *ir) case ir_binop_dot: result = nir_fdot(&b, srcs[0], srcs[1]); break; - case ir_binop_vector_extract: { - result = nir_channel(&b, srcs[0], 0); - for (unsigned i = 1; i < ir->operands[0]->type->vector_elements; i++) { - nir_ssa_def *swizzled = nir_channel(&b, srcs[0], i); - result = nir_bcsel(&b, nir_ieq_imm(&b, srcs[1], i), - swizzled, result); - } + case ir_binop_vector_extract: + result = nir_vector_extract(&b, srcs[0], srcs[1]); break; - } case ir_binop_atan2: result = nir_atan2(&b, srcs[0], srcs[1]); diff --git a/src/mesa/state_tracker/st_glsl_to_ir.cpp b/src/mesa/state_tracker/st_glsl_to_ir.cpp index d2bc5e604e2..130f8c82682 100644 --- a/src/mesa/state_tracker/st_glsl_to_ir.cpp +++ b/src/mesa/state_tracker/st_glsl_to_ir.cpp @@ -130,7 +130,7 @@ link_shader(struct gl_context *ctx, struct gl_shader_program *prog) IMUL_HIGH_TO_MUL : 0)); - do_vec_index_to_cond_assign(ir, true); + do_vec_index_to_cond_assign(ir, false); lower_vector_insert(ir, true); if (options->MaxIfDepth == 0) { lower_discard(ir);