ir3: use nir_opt_offsets for SSBO accesses

Signed-off-by: Job Noorman <jnoorman@igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/28664>
This commit is contained in:
Job Noorman
2024-04-10 10:43:38 +02:00
committed by Marge Bot
parent 0c1bb92690
commit e37093b160
3 changed files with 27 additions and 2 deletions

View File

@@ -215,7 +215,7 @@ ir3_optimize_loop(struct ir3_compiler *compiler, nir_shader *s)
progress |= OPT(s, nir_lower_pack);
progress |= OPT(s, nir_opt_constant_folding);
static const nir_opt_offsets_options offset_options = {
const nir_opt_offsets_options offset_options = {
/* How large an offset we can encode in the instr's immediate field.
*/
.uniform_max = (1 << 9) - 1,
@@ -225,7 +225,10 @@ ir3_optimize_loop(struct ir3_compiler *compiler, nir_shader *s)
*/
.shared_max = (1 << 12) - 1,
.buffer_max = ~0,
.buffer_max = 0,
.max_offset_cb = ir3_nir_max_imm_offset,
.max_offset_data = compiler,
.allow_offset_wrap = true,
};
progress |= OPT(s, nir_opt_offsets, &offset_options);

View File

@@ -156,6 +156,8 @@ is_intrinsic_load(nir_intrinsic_op op)
}
}
uint32_t ir3_nir_max_imm_offset(nir_intrinsic_instr *intrin, const void *data);
ENDC;
#endif /* IR3_NIR_H_ */

View File

@@ -287,3 +287,23 @@ ir3_nir_lower_io_offsets(nir_shader *shader)
return progress;
}
uint32_t
ir3_nir_max_imm_offset(nir_intrinsic_instr *intrin, const void *data)
{
const struct ir3_compiler *compiler = data;
if (!compiler->has_ssbo_imm_offsets)
return 0;
switch (intrin->intrinsic) {
case nir_intrinsic_load_ssbo_ir3:
if ((nir_intrinsic_access(intrin) & ACCESS_CAN_REORDER))
return 255; /* isam.v */
return 127; /* ldib.b */
case nir_intrinsic_store_ssbo_ir3:
return 127; /* stib.b */
default:
return 0;
}
}