intel/fs: don't SEND messages as partial writes

For instance, to load uniform data with the LSC we usually rely on
tranpose messages which have to execute in SIMD1. Those end up being
considered as partial writes so within loops their life span spread to
the whole loop, increasing register pressure.

Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Cc: mesa-stable
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21867>
This commit is contained in:
Lionel Landwerlin
2023-03-10 16:11:56 +02:00
committed by Marge Bot
parent adcdc38f3b
commit efde1917c9

View File

@@ -641,10 +641,18 @@ fs_visitor::limit_dispatch_width(unsigned n, const char *msg)
bool bool
fs_inst::is_partial_write() const fs_inst::is_partial_write() const
{ {
return ((this->predicate && this->opcode != BRW_OPCODE_SEL) || if (this->predicate && this->opcode != BRW_OPCODE_SEL)
(this->exec_size * type_sz(this->dst.type)) < 32 || return true;
!this->dst.is_contiguous() ||
this->dst.offset % REG_SIZE != 0); if (this->dst.offset % REG_SIZE != 0)
return true;
/* SEND instructions always write whole registers */
if (this->opcode == SHADER_OPCODE_SEND)
return false;
return this->exec_size * type_sz(this->dst.type) < 32 ||
!this->dst.is_contiguous();
} }
unsigned unsigned