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:

committed by
Marge Bot

parent
34d8bfe65f
commit
362a07db3a
@@ -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);
|
||||||
|
@@ -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
|
||||||
|
Reference in New Issue
Block a user