From 53bbd850f55e798f6e75261fbe8e4290a5f3cdce Mon Sep 17 00:00:00 2001 From: Alyssa Rosenzweig Date: Fri, 30 May 2025 11:48:34 -0400 Subject: [PATCH] asahi: use #defines for uniforms Signed-off-by: Alyssa Rosenzweig Part-of: --- src/asahi/lib/agx_abi.h | 6 ++--- .../drivers/asahi/agx_nir_lower_sysvals.c | 26 +++++++++---------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/asahi/lib/agx_abi.h b/src/asahi/lib/agx_abi.h index 79c2510c2e9..6bf17b729b5 100644 --- a/src/asahi/lib/agx_abi.h +++ b/src/asahi/lib/agx_abi.h @@ -36,9 +36,9 @@ #define AGX_ABI_VUNI_INPUT_ASSEMBLY(nr_vbos) \ (AGX_ABI_VUNI_FIRST_VERTEX(nr_vbos) + 8) -#define AGX_ABI_VUNI_COUNT(nr_vbos, hw) \ - (hw ? (AGX_ABI_VUNI_BASE_INSTANCE(nr_vbos) + 5) \ - : (AGX_ABI_VUNI_INPUT_ASSEMBLY(nr_vbos) + 4)) +#define AGX_ABI_VUNI_COUNT_GL(nr_vbos, sw) \ + (sw ? (AGX_ABI_VUNI_INPUT_ASSEMBLY(nr_vbos) + 4) \ + : (AGX_ABI_VUNI_BASE_INSTANCE(nr_vbos) + 2)) #define AGX_ABI_VUNI_COUNT_VK(nr_vbos) \ ALIGN_POT(AGX_ABI_VUNI_INPUT_ASSEMBLY(nr_vbos) + 4, 4) diff --git a/src/gallium/drivers/asahi/agx_nir_lower_sysvals.c b/src/gallium/drivers/asahi/agx_nir_lower_sysvals.c index abe0c36ecef..aaceaf7bd69 100644 --- a/src/gallium/drivers/asahi/agx_nir_lower_sysvals.c +++ b/src/gallium/drivers/asahi/agx_nir_lower_sysvals.c @@ -7,6 +7,7 @@ #include "pipe/p_defines.h" #include "util/bitset.h" #include "util/u_dynarray.h" +#include "agx_abi.h" #include "agx_nir_lower_gs.h" #include "agx_state.h" #include "nir.h" @@ -388,14 +389,14 @@ lay_out_uniforms(struct agx_compiled_shader *shader, struct state *state) if (count) { shader->push[shader->push_range_count++] = (struct agx_push_range){ - .uniform = 0, + .uniform = AGX_ABI_VUNI_VBO_BASE(0), .table = AGX_SYSVAL_TABLE_ROOT, .offset = (uintptr_t)&u->attrib_base, .length = 4 * count, }; shader->push[shader->push_range_count++] = (struct agx_push_range){ - .uniform = 4 * count, + .uniform = AGX_ABI_VUNI_VBO_CLAMP(count, 0), .table = AGX_SYSVAL_TABLE_ROOT, .offset = (uintptr_t)&u->attrib_clamp, .length = 2 * count, @@ -403,49 +404,48 @@ lay_out_uniforms(struct agx_compiled_shader *shader, struct state *state) } shader->push[shader->push_range_count++] = (struct agx_push_range){ - .uniform = 6 * count, + .uniform = AGX_ABI_VUNI_FIRST_VERTEX(count), .table = AGX_SYSVAL_TABLE_PARAMS, .offset = 0, .length = 4, }; - uniform = (6 * count) + 4; - - if (state->hw_stage == PIPE_SHADER_COMPUTE) { + bool sw = state->hw_stage == PIPE_SHADER_COMPUTE; + if (sw) { shader->push[shader->push_range_count++] = (struct agx_push_range){ - .uniform = (6 * count) + 8, + .uniform = AGX_ABI_VUNI_INPUT_ASSEMBLY(count), .table = AGX_SYSVAL_TABLE_ROOT, .offset = (uintptr_t)&u->input_assembly, .length = 4, }; - - uniform = (6 * count) + 12; } + + uniform = AGX_ABI_VUNI_COUNT_GL(count, sw); } else if (state->stage == PIPE_SHADER_FRAGMENT) { struct agx_draw_uniforms *u = NULL; struct agx_stage_uniforms *s = NULL; shader->push[shader->push_range_count++] = (struct agx_push_range){ - .uniform = 0, + .uniform = AGX_ABI_FUNI_EMRT_HEAP, .table = AGX_SYSVAL_TABLE_FS, .offset = (uintptr_t)&s->texture_base, .length = 4, }; shader->push[shader->push_range_count++] = (struct agx_push_range){ - .uniform = 4, + .uniform = AGX_ABI_FUNI_BLEND_R, .table = AGX_SYSVAL_TABLE_ROOT, .offset = (uintptr_t)&u->blend_constant, .length = 8, }; shader->push[shader->push_range_count++] = (struct agx_push_range){ - .uniform = 12, + .uniform = AGX_ABI_FUNI_ROOT, .table = AGX_SYSVAL_TABLE_ROOT, .offset = (uintptr_t)&u->tables[AGX_SYSVAL_TABLE_ROOT], .length = 4, }; - uniform = 16; + uniform = AGX_ABI_FUNI_COUNT; } /* Lay out each system value table. We do this backwards to ensure the first