From 2d7d652d5c02f8b68ba72490ac041d3a8235212a Mon Sep 17 00:00:00 2001 From: Francisco Jerez Date: Mon, 25 Apr 2016 17:08:42 -0700 Subject: [PATCH] intel/fs: Disable opt_sampler_eot() in 32-wide dispatch. Reviewed-by: Jason Ekstrand Reviewed-by: Matt Turner --- src/intel/compiler/brw_fs.cpp | 2 +- src/intel/compiler/brw_fs_generator.cpp | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/intel/compiler/brw_fs.cpp b/src/intel/compiler/brw_fs.cpp index 84becb3..bf301f4 100644 --- a/src/intel/compiler/brw_fs.cpp +++ b/src/intel/compiler/brw_fs.cpp @@ -2666,7 +2666,7 @@ fs_visitor::opt_sampler_eot() { brw_wm_prog_key *key = (brw_wm_prog_key*) this->key; - if (stage != MESA_SHADER_FRAGMENT) + if (stage != MESA_SHADER_FRAGMENT || dispatch_width > 16) return false; if (devinfo->gen != 9 && !devinfo->is_cherryview) diff --git a/src/intel/compiler/brw_fs_generator.cpp b/src/intel/compiler/brw_fs_generator.cpp index 2265a60..0134afe 100644 --- a/src/intel/compiler/brw_fs_generator.cpp +++ b/src/intel/compiler/brw_fs_generator.cpp @@ -887,6 +887,11 @@ fs_generator::generate_tex(fs_inst *inst, struct brw_reg dst, struct brw_reg src uint32_t return_format; bool is_combined_send = inst->eot; + /* Sampler EOT message of less than the dispatch width would kill the + * thread prematurely. + */ + assert(!is_combined_send || inst->exec_size == dispatch_width); + switch (dst.type) { case BRW_REGISTER_TYPE_D: return_format = BRW_SAMPLER_RETURN_FORMAT_SINT32; -- 2.7.4