intel/fs: don't consider fixup_nomask_control_flow SENDs predicate

Those SENDs are still doing a full register write. We just inserted
some predication for a workaround.

Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Cc: mesa-stable
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Francisco Jerez <currojerez@riseup.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21853>
This commit is contained in:
Lionel Landwerlin
2023-03-14 18:22:50 +02:00
committed by Marge Bot
parent 34d8bfe65f
commit 362a07db3a
2 changed files with 9 additions and 1 deletions

View File

@@ -641,7 +641,8 @@ fs_visitor::limit_dispatch_width(unsigned n, const char *msg)
bool bool
fs_inst::is_partial_write() const fs_inst::is_partial_write() const
{ {
if (this->predicate && this->opcode != BRW_OPCODE_SEL) if (this->predicate && !this->predicate_trivial &&
this->opcode != BRW_OPCODE_SEL)
return true; return true;
if (this->dst.offset % REG_SIZE != 0) if (this->dst.offset % REG_SIZE != 0)
@@ -6453,6 +6454,7 @@ fs_visitor::fixup_nomask_control_flow()
set_predicate(pred, inst); set_predicate(pred, inst);
inst->flag_subreg = 0; inst->flag_subreg = 0;
inst->predicate_trivial = true;
if (save_flag) if (save_flag)
ubld.group(1, 0).at(block, inst->next).MOV(flag, tmp); ubld.group(1, 0).at(block, inst->next).MOV(flag, tmp);

View File

@@ -178,6 +178,12 @@ struct backend_instruction {
* the scratch surface offset to build * the scratch surface offset to build
* extended descriptor * extended descriptor
*/ */
bool predicate_trivial:1; /**< The predication mask applied to this
* instruction is guaranteed to be uniform and
* a superset of the execution mask of the
* present block, no currently enabled channels
* will be disabled by the predicate.
*/
bool eot:1; bool eot:1;
/* Chooses which flag subregister (f0.0 to f1.1) is used for conditional /* Chooses which flag subregister (f0.0 to f1.1) is used for conditional