summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrancisco Jerez <currojerez@riseup.net>2020-01-21 13:55:36 -0800
committerFrancisco Jerez <currojerez@riseup.net>2020-02-14 14:31:48 -0800
commitb84fa0b31e670d101ff17115519417036581f55b (patch)
tree44c92279cec6e6f1dfe3eed1b078b483115983ef
parent57dee58c82d631261c953705c32dd2d383ec2f4f (diff)
intel/fs/gen11: Work around dual-source blending hangs in combination with SIMD32.
The SIMD8 dual-source blending framebuffer write messages seem to have trouble releasing the pixel scoreboard dependency in SIMD32 dispatch mode, which leads to hangs. I have a better workaround for this which doesn't involve disabling SIMD32 when dual-source blending is enabled, but I'm still investigating some issues with it. Limit the dispatch width to SIMD16 in such cases for the moment in order to make the CI happy on ICL with SIMD32 fragment shaders enabled. Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
-rw-r--r--src/intel/compiler/brw_fs_visitor.cpp12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/intel/compiler/brw_fs_visitor.cpp b/src/intel/compiler/brw_fs_visitor.cpp
index 11e0af430d8..5cb240098f9 100644
--- a/src/intel/compiler/brw_fs_visitor.cpp
+++ b/src/intel/compiler/brw_fs_visitor.cpp
@@ -537,6 +537,18 @@ fs_visitor::emit_fb_writes()
inst->last_rt = true;
inst->eot = true;
+
+ if (devinfo->gen == 11 && prog_data->dual_src_blend) {
+ /* The dual-source RT write messages fail to release the thread
+ * dependency on ICL with SIMD32 dispatch, leading to hangs.
+ *
+ * XXX - Emit an extra single-source NULL RT-write marked LastRT in
+ * order to release the thread dependency without disabling
+ * SIMD32.
+ */
+ limit_dispatch_width(16, "Dual source blending unsupported "
+ "in SIMD32 mode.\n");
+ }
}
void