Fix one of the few cases where we can't reliable touch the destination hazard bits. I am explicitly doing this patch individually so it is easy to backport. I was tempted to do this patch before the previous patch which reorganized the code, but I believe even doing that first, this is still easy to backport.
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=86268 Signed-off-by: Ben Widawsky <b...@bwidawsk.net> --- src/mesa/drivers/dri/i965/brw_vec4.cpp | 20 ++++++++++++++++++-- src/mesa/drivers/dri/i965/brw_vec4.h | 1 + 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_vec4.cpp b/src/mesa/drivers/dri/i965/brw_vec4.cpp index 0c2bbe9..d583f27 100644 --- a/src/mesa/drivers/dri/i965/brw_vec4.cpp +++ b/src/mesa/drivers/dri/i965/brw_vec4.cpp @@ -841,9 +841,25 @@ vec4_visitor::move_push_constants_to_pull_constants() } /* Conditions for which we want to avoid setting the dependency control bits */ -static bool -is_dep_ctrl_safe(vec4_instruction *inst) +bool +vec4_visitor::is_dep_ctrl_safe(vec4_instruction *inst) { +#define IS_DWORD(reg) \ + (reg.type == BRW_REGISTER_TYPE_UD || \ + reg.type == BRW_REGISTER_TYPE_D) + + /* From the destination hazard section of the spec: + * > Instructions other than send, may use this control as long as operations + * > that have different pipeline latencies are not mixed. + */ + if (brw->gen >= 8) { + if (inst->opcode == BRW_OPCODE_MUL && + IS_DWORD(inst->src[0]) && + IS_DWORD(inst->src[1])) + return false; + } +#undef IS_DWORD + /* * In the presence of send messages, totally interrupt dependency * control. They're long enough that the chance of dependency diff --git a/src/mesa/drivers/dri/i965/brw_vec4.h b/src/mesa/drivers/dri/i965/brw_vec4.h index 8e7dfe1..81bb06c 100644 --- a/src/mesa/drivers/dri/i965/brw_vec4.h +++ b/src/mesa/drivers/dri/i965/brw_vec4.h @@ -393,6 +393,7 @@ public: bool opt_cse(); bool opt_algebraic(); bool opt_register_coalesce(); + bool is_dep_ctrl_safe(vec4_instruction *inst); void opt_set_dependency_control(); void opt_schedule_instructions(); -- 2.1.3 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev