[Mesa-dev] [PATCH 2/2] i965/skl: Disable SIMD16 when 3-source instructions are used
Neil Roberts
neil at linux.intel.com
Wed Mar 4 06:33:00 PST 2015
Stepping C0 of Skylake fails when using SIMD16 with 3-source
instructions (such as MAD). This patch just makes it disable SIMD16 in
that case.
This implements WaDisableSIMD16On3SrcInstr and fixes ~190 Piglit
tests.
---
src/mesa/drivers/dri/i965/brw_fs.cpp | 21 +++++++++++++++++++++
src/mesa/drivers/dri/i965/brw_fs.h | 1 +
2 files changed, 22 insertions(+)
diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp
index 533feb4..62f29e5 100644
--- a/src/mesa/drivers/dri/i965/brw_fs.cpp
+++ b/src/mesa/drivers/dri/i965/brw_fs.cpp
@@ -3729,6 +3729,26 @@ fs_visitor::fixup_3src_null_dest()
}
}
+/**
+ * 3-source instructions don't work on Skylake stepping C0. If the revision
+ * isn't known then it will take the safe option and disable it in case it's
+ * C0. Implements WaDisableSIMD16On3SrcInstr.
+ */
+void
+fs_visitor::disable_simd16_with_3src()
+{
+ if (brw->gen != 9 || (brw->revision != 2 && brw->revision != -1))
+ return;
+
+ foreach_block_and_inst_safe (block, fs_inst, inst, cfg) {
+ if (inst->is_3src()) {
+ no16("SIMD16 doesn't work with 3-source instructions on "
+ "Gen9 stepping C0\n");
+ return;
+ }
+ }
+}
+
void
fs_visitor::allocate_registers()
{
@@ -3910,6 +3930,7 @@ fs_visitor::run_fs()
assign_urb_setup();
fixup_3src_null_dest();
+ disable_simd16_with_3src();
allocate_registers();
if (failed)
diff --git a/src/mesa/drivers/dri/i965/brw_fs.h b/src/mesa/drivers/dri/i965/brw_fs.h
index 70098d8..7091b9f 100644
--- a/src/mesa/drivers/dri/i965/brw_fs.h
+++ b/src/mesa/drivers/dri/i965/brw_fs.h
@@ -196,6 +196,7 @@ public:
void setup_payload_gen6();
void setup_vs_payload();
void fixup_3src_null_dest();
+ void disable_simd16_with_3src();
void assign_curb_setup();
void calculate_urb_setup();
void assign_urb_setup();
--
1.9.3
More information about the mesa-dev
mailing list