i965/nir/vec4: Lower "vecN" instructions and mark them unreachable
authorAntia Puentes <apuentes@igalia.com>
Tue, 16 Jun 2015 20:58:15 +0000 (22:58 +0200)
committerJason Ekstrand <jason.ekstrand@intel.com>
Mon, 3 Aug 2015 16:40:48 +0000 (09:40 -0700)
This enables NIR pass "lower_vec_to_movs" on shaders that work on vec4.

Reviewed-by: Jason Ekstrand <jason.ekstrand@intel.com>
src/mesa/drivers/dri/i965/brw_nir.c
src/mesa/drivers/dri/i965/brw_vec4_nir.cpp

index a838ccaed836dfd4aed0ae9334844ebfa48e9d9b..beb7d6912c8aa1aa0799dbfd43c55cda60244b9a 100644 (file)
@@ -175,6 +175,11 @@ brw_create_nir(struct brw_context *brw,
    nir_convert_from_ssa(nir, is_scalar);
    nir_validate_shader(nir);
 
+   if (!is_scalar) {
+      nir_lower_vec_to_movs(nir);
+      nir_validate_shader(nir);
+   }
+
    /* This is the last pass we run before we start emitting stuff.  It
     * determines when we need to insert boolean resolves on Gen <= 5.  We
     * run it last because it stashes data in instr->pass_flags and we don't
index 74efc576c56bd74e16fd3a7b170ac3e38334a7b0..2829bbc111c45b2993dec605141922e8ab3f1cb2 100644 (file)
@@ -677,6 +677,11 @@ vec4_visitor::nir_emit_alu(nir_alu_instr *instr)
       inst->saturate = instr->dest.saturate;
       break;
 
+   case nir_op_vec2:
+   case nir_op_vec3:
+   case nir_op_vec4:
+      unreachable("not reached: should be handled by lower_vec_to_movs()");
+
    default:
       unreachable("Unimplemented ALU operation");
    }