Module: Mesa Branch: main Commit: 8ba1860fbd138445f69a544c69b327658ce8269f URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=8ba1860fbd138445f69a544c69b327658ce8269f
Author: Samuel Pitoiset <[email protected]> Date: Tue Aug 15 11:56:56 2023 +0200 radv: add a new shader argument for non-monolithic shaders PC This will be used to jump from VS to TCS/GS or TES to GS on GFX9+. Signed-off-by: Samuel Pitoiset <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24697> --- src/amd/vulkan/radv_shader.h | 3 ++- src/amd/vulkan/radv_shader_args.c | 6 ++++++ src/amd/vulkan/radv_shader_args.h | 3 +++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/amd/vulkan/radv_shader.h b/src/amd/vulkan/radv_shader.h index 691a8bc53a0..a8b649f5bca 100644 --- a/src/amd/vulkan/radv_shader.h +++ b/src/amd/vulkan/radv_shader.h @@ -169,7 +169,8 @@ enum radv_ud_index { AC_UD_FORCE_VRS_RATES = 10, AC_UD_TASK_RING_ENTRY = 11, AC_UD_NUM_VERTS_PER_PRIM = 12, - AC_UD_SHADER_START = 13, + AC_UD_NEXT_STAGE_PC = 13, + AC_UD_SHADER_START = 14, AC_UD_VS_VERTEX_BUFFERS = AC_UD_SHADER_START, AC_UD_VS_BASE_VERTEX_START_INSTANCE, AC_UD_VS_PROLOG_INPUTS, diff --git a/src/amd/vulkan/radv_shader_args.c b/src/amd/vulkan/radv_shader_args.c index 3883fb441d4..a3add9281e2 100644 --- a/src/amd/vulkan/radv_shader_args.c +++ b/src/amd/vulkan/radv_shader_args.c @@ -531,6 +531,9 @@ declare_shader_args(const struct radv_device *device, const struct radv_pipeline add_ud_arg(args, 1, AC_ARG_INT, &args->tcs_epilog_pc, AC_UD_TCS_EPILOG_PC); } + if (!info->is_monolithic) + add_ud_arg(args, 1, AC_ARG_INT, &args->next_stage_pc, AC_UD_NEXT_STAGE_PC); + ac_add_arg(&args->ac, AC_ARG_VGPR, 1, AC_ARG_INT, &args->ac.tcs_patch_id); ac_add_arg(&args->ac, AC_ARG_VGPR, 1, AC_ARG_INT, &args->ac.tcs_rel_ids); @@ -635,6 +638,9 @@ declare_shader_args(const struct radv_device *device, const struct radv_pipeline declare_ngg_sgprs(info, args, has_ngg_provoking_vtx); } + if (!info->is_monolithic) + add_ud_arg(args, 1, AC_ARG_INT, &args->next_stage_pc, AC_UD_NEXT_STAGE_PC); + 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_prim_id); diff --git a/src/amd/vulkan/radv_shader_args.h b/src/amd/vulkan/radv_shader_args.h index c7eece608d9..f65cd558448 100644 --- a/src/amd/vulkan/radv_shader_args.h +++ b/src/amd/vulkan/radv_shader_args.h @@ -86,6 +86,9 @@ struct radv_shader_args { /* NGG VS streamout */ struct ac_arg num_verts_per_prim; + /* For non-monolithic VS or TES on GFX9+. */ + struct ac_arg next_stage_pc; + struct radv_userdata_locations user_sgprs_locs; unsigned num_user_sgprs;
