intel/elk: Add ELK_MAX_MRF_ALL for static allocating arrays

Replace usage of variable length arrays.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Antonio Ospite <None>
Reviewed-by: Kenneth Graunke <None>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/32916>
This commit is contained in:
Caio Oliveira
2025-01-06 20:51:32 -08:00
committed by Marge Bot
parent 4d43ee0dd6
commit 172c1ab984
4 changed files with 11 additions and 9 deletions

View File

@@ -3022,7 +3022,7 @@ elk_fs_visitor::emit_repclear_shader()
bool
elk_fs_visitor::remove_duplicate_mrf_writes()
{
elk_fs_inst *last_mrf_move[ELK_MAX_MRF(devinfo->ver)];
elk_fs_inst *last_mrf_move[ELK_MAX_MRF_ALL];
bool progress = false;
/* Need to update the MRF tracking for compressed instructions. */
@@ -3067,7 +3067,7 @@ elk_fs_visitor::remove_duplicate_mrf_writes()
}
/* Clear out any MRF move records whose sources got overwritten. */
for (unsigned i = 0; i < ARRAY_SIZE(last_mrf_move); i++) {
for (unsigned i = 0; i < ELK_MAX_MRF(devinfo->ver); i++) {
if (last_mrf_move[i] &&
regions_overlap(inst->dst, inst->size_written,
last_mrf_move[i]->src[0],
@@ -3182,8 +3182,8 @@ elk_fs_visitor::insert_gfx4_pre_send_dependency_workarounds(elk_bblock_t *block,
{
int write_len = regs_written(inst);
int first_write_grf = inst->dst.nr;
bool needs_dep[ELK_MAX_MRF(devinfo->ver)];
assert(write_len < (int)sizeof(needs_dep) - 1);
bool needs_dep[ELK_MAX_MRF_ALL];
assert(write_len < ELK_MAX_MRF(devinfo->ver) - 1);
memset(needs_dep, false, sizeof(needs_dep));
memset(needs_dep, true, write_len);
@@ -3253,8 +3253,8 @@ elk_fs_visitor::insert_gfx4_post_send_dependency_workarounds(elk_bblock_t *block
{
int write_len = regs_written(inst);
unsigned first_write_grf = inst->dst.nr;
bool needs_dep[ELK_MAX_MRF(devinfo->ver)];
assert(write_len < (int)sizeof(needs_dep) - 1);
bool needs_dep[ELK_MAX_MRF_ALL];
assert(write_len < ELK_MAX_MRF(devinfo->ver) - 1);
memset(needs_dep, false, sizeof(needs_dep));
memset(needs_dep, true, write_len);

View File

@@ -983,7 +983,8 @@ elk_fs_reg_alloc::spill_reg(unsigned spill_reg)
* SIMD16 mode, because we'd stomp the FB writes.
*/
if (!fs->spilled_any_registers) {
bool mrf_used[ELK_MAX_MRF(devinfo->ver)];
bool mrf_used[ELK_MAX_MRF_ALL];
assert(ARRAY_SIZE(mrf_used) <= ELK_MAX_MRF(devinfo->ver));
get_used_mrfs(fs, mrf_used);
for (int i = spill_base_mrf(fs); i < ELK_MAX_MRF(devinfo->ver); i++) {

View File

@@ -82,6 +82,7 @@ struct intel_device_info;
/** Number of message register file registers */
#define ELK_MAX_MRF(gen) (gen == 6 ? 24 : 16)
#define ELK_MAX_MRF_ALL 24
#define ELK_SWIZZLE4(a,b,c,d) (((a)<<0) | ((b)<<2) | ((c)<<4) | ((d)<<6))
#define ELK_GET_SWZ(swz, idx) (((swz) >> ((idx)*2)) & 0x3)

View File

@@ -1203,7 +1203,7 @@ elk_fs_instruction_scheduler::calculate_deps()
* After register allocation, reg_offsets are gone and we track individual
* GRF registers.
*/
elk_schedule_node *last_mrf_write[ELK_MAX_MRF(v->devinfo->ver)];
elk_schedule_node *last_mrf_write[ELK_MAX_MRF_ALL];
elk_schedule_node *last_conditional_mod[8] = {};
elk_schedule_node *last_accumulator_write = NULL;
/* Fixed HW registers are assumed to be separate from the virtual
@@ -1470,7 +1470,7 @@ elk_fs_instruction_scheduler::calculate_deps()
void
elk_vec4_instruction_scheduler::calculate_deps()
{
elk_schedule_node *last_mrf_write[ELK_MAX_MRF(v->devinfo->ver)];
elk_schedule_node *last_mrf_write[ELK_MAX_MRF_ALL];
elk_schedule_node *last_conditional_mod = NULL;
elk_schedule_node *last_accumulator_write = NULL;
/* Fixed HW registers are assumed to be separate from the virtual