intel/brw: Pull lower_uniform_pull_constant_loads out of fs_visitor

Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26887>
This commit is contained in:
Caio Oliveira
2024-01-03 16:17:56 -08:00
committed by Marge Bot
parent 6b00719513
commit 619888e077
3 changed files with 11 additions and 10 deletions
+1 -1
View File
@@ -5775,7 +5775,7 @@ fs_visitor::optimize()
OPT(brw_fs_lower_sends_overlapping_payload, *this);
OPT(lower_uniform_pull_constant_loads);
OPT(brw_fs_lower_uniform_pull_constant_loads, *this);
OPT(lower_find_live_channel);
+1 -1
View File
@@ -270,7 +270,6 @@ public:
void vfail(const char *msg, va_list args);
void fail(const char *msg, ...);
void limit_dispatch_width(unsigned n, const char *msg);
bool lower_uniform_pull_constant_loads();
bool lower_load_payload();
bool lower_find_live_channel();
bool lower_scoreboard();
@@ -601,6 +600,7 @@ bool brw_fs_lower_regioning(fs_visitor &s);
bool brw_fs_lower_sends_overlapping_payload(fs_visitor &s);
bool brw_fs_lower_simd_width(fs_visitor &s);
bool brw_fs_lower_sub_sat(fs_visitor &s);
bool brw_fs_lower_uniform_pull_constant_loads(fs_visitor &s);
bool brw_fs_opt_algebraic(fs_visitor &s);
bool brw_fs_opt_bank_conflicts(fs_visitor &s);
@@ -3298,11 +3298,12 @@ brw_fs_lower_logical_sends(fs_visitor &s)
* source operand for all 8 or 16 of its channels.
*/
bool
fs_visitor::lower_uniform_pull_constant_loads()
brw_fs_lower_uniform_pull_constant_loads(fs_visitor &s)
{
const intel_device_info *devinfo = s.devinfo;
bool progress = false;
foreach_block_and_inst (block, fs_inst, inst, cfg) {
foreach_block_and_inst (block, fs_inst, inst, s.cfg) {
if (inst->opcode != FS_OPCODE_UNIFORM_PULL_CONSTANT_LOAD)
continue;
@@ -3316,7 +3317,7 @@ fs_visitor::lower_uniform_pull_constant_loads()
if (devinfo->has_lsc) {
const fs_builder ubld =
fs_builder(this, block, inst).group(8, 0).exec_all();
fs_builder(&s, block, inst).group(8, 0).exec_all();
const fs_reg payload = ubld.vgrf(BRW_REGISTER_TYPE_UD);
ubld.MOV(payload, offset_B);
@@ -3339,7 +3340,7 @@ fs_visitor::lower_uniform_pull_constant_loads()
inst->opcode = SHADER_OPCODE_SEND;
inst->mlen = lsc_msg_desc_src0_len(devinfo, inst->desc);
inst->send_ex_bso = surface_handle.file != BAD_FILE &&
compiler->extended_bindless_surface_offset;
s.compiler->extended_bindless_surface_offset;
inst->ex_mlen = 0;
inst->header_size = 0;
inst->send_has_side_effects = false;
@@ -3354,10 +3355,10 @@ fs_visitor::lower_uniform_pull_constant_loads()
surface : surface_handle);
inst->src[2] = payload;
invalidate_analysis(DEPENDENCY_INSTRUCTIONS | DEPENDENCY_VARIABLES);
s.invalidate_analysis(DEPENDENCY_INSTRUCTIONS | DEPENDENCY_VARIABLES);
} else if (devinfo->ver >= 7) {
const fs_builder ubld = fs_builder(this, block, inst).exec_all();
fs_reg header = fs_builder(this, 8).exec_all().vgrf(BRW_REGISTER_TYPE_UD);
const fs_builder ubld = fs_builder(&s, block, inst).exec_all();
fs_reg header = fs_builder(&s, 8).exec_all().vgrf(BRW_REGISTER_TYPE_UD);
ubld.group(8, 0).MOV(header,
retype(brw_vec8_grf(0, 0), BRW_REGISTER_TYPE_UD));
@@ -3380,7 +3381,7 @@ fs_visitor::lower_uniform_pull_constant_loads()
inst->src[2] = header;
inst->src[3] = fs_reg(); /* unused for reads */
invalidate_analysis(DEPENDENCY_INSTRUCTIONS | DEPENDENCY_VARIABLES);
s.invalidate_analysis(DEPENDENCY_INSTRUCTIONS | DEPENDENCY_VARIABLES);
} else {
assert(surface_handle.file == BAD_FILE);
/* Before register allocation, we didn't tell the scheduler about the