summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAntia Puentes <[email protected]>2015-06-16 22:58:15 +0200
committerJason Ekstrand <[email protected]>2015-08-03 09:40:48 -0700
commite4f02f47e70d384531ac68e6d33a62fdcdbd1f28 (patch)
tree99d5904960ae0bac47a1e5b9aadccc6f359698f1
parent79154d99d6e760b1daf327b4594dded18f1d4191 (diff)
i965/nir/vec4: Lower "vecN" instructions and mark them unreachable
This enables NIR pass "lower_vec_to_movs" on shaders that work on vec4. Reviewed-by: Jason Ekstrand <[email protected]>
-rw-r--r--src/mesa/drivers/dri/i965/brw_nir.c5
-rw-r--r--src/mesa/drivers/dri/i965/brw_vec4_nir.cpp5
2 files changed, 10 insertions, 0 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_nir.c b/src/mesa/drivers/dri/i965/brw_nir.c
index a838ccaed83..beb7d6912c8 100644
--- a/src/mesa/drivers/dri/i965/brw_nir.c
+++ b/src/mesa/drivers/dri/i965/brw_nir.c
@@ -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
diff --git a/src/mesa/drivers/dri/i965/brw_vec4_nir.cpp b/src/mesa/drivers/dri/i965/brw_vec4_nir.cpp
index 74efc576c56..2829bbc111c 100644
--- a/src/mesa/drivers/dri/i965/brw_vec4_nir.cpp
+++ b/src/mesa/drivers/dri/i965/brw_vec4_nir.cpp
@@ -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");
}