radv: update shader input arguments for GS stage on GFX12

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/29417>
This commit is contained in:
Samuel Pitoiset
2024-05-27 09:17:41 +02:00
committed by Marge Bot
parent 10b97836b9
commit 06598bc707

View File

@@ -456,11 +456,17 @@ declare_unmerged_vs_tes_gs_args(const enum amd_gfx_level gfx_level, const struct
add_ud_arg(args, 1, AC_ARG_INT, &args->next_stage_pc, AC_UD_NEXT_STAGE_PC); add_ud_arg(args, 1, AC_ARG_INT, &args->next_stage_pc, AC_UD_NEXT_STAGE_PC);
/* VGPRs (GS) */ /* VGPRs (GS) */
if (gfx_level >= GFX12) {
ac_add_arg(&args->ac, AC_ARG_VGPR, 1, AC_ARG_INT, &args->ac.gs_vtx_offset[0]);
ac_add_arg(&args->ac, AC_ARG_VGPR, 1, AC_ARG_INT, &args->ac.gs_prim_id);
ac_add_arg(&args->ac, AC_ARG_VGPR, 1, AC_ARG_INT, &args->ac.gs_vtx_offset[1]);
} else {
ac_add_arg(&args->ac, AC_ARG_VGPR, 1, AC_ARG_INT, &args->ac.gs_vtx_offset[0]); ac_add_arg(&args->ac, AC_ARG_VGPR, 1, AC_ARG_INT, &args->ac.gs_vtx_offset[0]);
ac_add_arg(&args->ac, AC_ARG_VGPR, 1, AC_ARG_INT, &args->ac.gs_vtx_offset[1]); ac_add_arg(&args->ac, AC_ARG_VGPR, 1, AC_ARG_INT, &args->ac.gs_vtx_offset[1]);
ac_add_arg(&args->ac, AC_ARG_VGPR, 1, AC_ARG_INT, &args->ac.gs_prim_id); ac_add_arg(&args->ac, AC_ARG_VGPR, 1, AC_ARG_INT, &args->ac.gs_prim_id);
ac_add_arg(&args->ac, AC_ARG_VGPR, 1, AC_ARG_INT, &args->ac.gs_invocation_id); ac_add_arg(&args->ac, AC_ARG_VGPR, 1, AC_ARG_INT, &args->ac.gs_invocation_id);
ac_add_arg(&args->ac, AC_ARG_VGPR, 1, AC_ARG_INT, &args->ac.gs_vtx_offset[2]); ac_add_arg(&args->ac, AC_ARG_VGPR, 1, AC_ARG_INT, &args->ac.gs_vtx_offset[2]);
}
/* Preserved SGPRs */ /* Preserved SGPRs */
ac_add_preserved(&args->ac, &args->ac.ring_offsets); ac_add_preserved(&args->ac, &args->ac.ring_offsets);
@@ -493,9 +499,12 @@ declare_unmerged_vs_tes_gs_args(const enum amd_gfx_level gfx_level, const struct
ac_add_preserved(&args->ac, &args->ac.gs_vtx_offset[0]); ac_add_preserved(&args->ac, &args->ac.gs_vtx_offset[0]);
ac_add_preserved(&args->ac, &args->ac.gs_vtx_offset[1]); ac_add_preserved(&args->ac, &args->ac.gs_vtx_offset[1]);
ac_add_preserved(&args->ac, &args->ac.gs_prim_id); ac_add_preserved(&args->ac, &args->ac.gs_prim_id);
if (gfx_level < GFX12) {
ac_add_preserved(&args->ac, &args->ac.gs_invocation_id); ac_add_preserved(&args->ac, &args->ac.gs_invocation_id);
ac_add_preserved(&args->ac, &args->ac.gs_vtx_offset[2]); ac_add_preserved(&args->ac, &args->ac.gs_vtx_offset[2]);
} }
}
static void static void
declare_shader_args(const struct radv_device *device, const struct radv_graphics_state_key *gfx_state, declare_shader_args(const struct radv_device *device, const struct radv_graphics_state_key *gfx_state,
@@ -781,6 +790,11 @@ declare_shader_args(const struct radv_device *device, const struct radv_graphics
} }
if (previous_stage != MESA_SHADER_MESH || !pdev->mesh_fast_launch_2) { if (previous_stage != MESA_SHADER_MESH || !pdev->mesh_fast_launch_2) {
if (gfx_level >= GFX12) {
ac_add_arg(&args->ac, AC_ARG_VGPR, 1, AC_ARG_INT, &args->ac.gs_vtx_offset[0]);
ac_add_arg(&args->ac, AC_ARG_VGPR, 1, AC_ARG_INT, &args->ac.gs_prim_id);
ac_add_arg(&args->ac, AC_ARG_VGPR, 1, AC_ARG_INT, &args->ac.gs_vtx_offset[1]);
} else {
ac_add_arg(&args->ac, AC_ARG_VGPR, 1, AC_ARG_INT, &args->ac.gs_vtx_offset[0]); ac_add_arg(&args->ac, AC_ARG_VGPR, 1, AC_ARG_INT, &args->ac.gs_vtx_offset[0]);
ac_add_arg(&args->ac, AC_ARG_VGPR, 1, AC_ARG_INT, &args->ac.gs_vtx_offset[1]); ac_add_arg(&args->ac, AC_ARG_VGPR, 1, AC_ARG_INT, &args->ac.gs_vtx_offset[1]);
ac_add_arg(&args->ac, AC_ARG_VGPR, 1, AC_ARG_INT, &args->ac.gs_prim_id); ac_add_arg(&args->ac, AC_ARG_VGPR, 1, AC_ARG_INT, &args->ac.gs_prim_id);
@@ -788,6 +802,7 @@ declare_shader_args(const struct radv_device *device, const struct radv_graphics
ac_add_arg(&args->ac, AC_ARG_VGPR, 1, AC_ARG_INT, &args->ac.gs_vtx_offset[2]); ac_add_arg(&args->ac, AC_ARG_VGPR, 1, AC_ARG_INT, &args->ac.gs_vtx_offset[2]);
} }
} }
}
if (previous_stage == MESA_SHADER_VERTEX) { if (previous_stage == MESA_SHADER_VERTEX) {
declare_vs_input_vgprs(gfx_level, info, args, false); declare_vs_input_vgprs(gfx_level, info, args, false);