From 2a0e4b5ef7c8298a5aab6349d63cc100381ea2f3 Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Thu, 15 Sep 2022 13:53:43 +0200 Subject: [PATCH] radv: declare shader arguments for the number of samples for FS Signed-off-by: Samuel Pitoiset Reviewed-by: Rhys Perry Part-of: --- src/amd/vulkan/radv_shader.h | 1 + src/amd/vulkan/radv_shader_args.c | 8 ++++++++ src/amd/vulkan/radv_shader_args.h | 1 + 3 files changed, 10 insertions(+) diff --git a/src/amd/vulkan/radv_shader.h b/src/amd/vulkan/radv_shader.h index f0b9ed848ae..c5dadd2c628 100644 --- a/src/amd/vulkan/radv_shader.h +++ b/src/amd/vulkan/radv_shader.h @@ -150,6 +150,7 @@ enum radv_ud_index { AC_UD_VS_PROLOG_INPUTS, AC_UD_VS_MAX_UD, AC_UD_PS_EPILOG_PC, + AC_UD_PS_NUM_SAMPLES, AC_UD_PS_MAX_UD, AC_UD_CS_GRID_SIZE = AC_UD_SHADER_START, AC_UD_CS_SBT_DESCRIPTORS, diff --git a/src/amd/vulkan/radv_shader_args.c b/src/amd/vulkan/radv_shader_args.c index 8719a0f752d..3f9c7babcbe 100644 --- a/src/amd/vulkan/radv_shader_args.c +++ b/src/amd/vulkan/radv_shader_args.c @@ -200,6 +200,8 @@ allocate_user_sgprs(enum amd_gfx_level gfx_level, const struct radv_shader_info /* epilog continue PC */ if (info->ps.has_epilog) user_sgpr_count += 1; + if (info->ps.needs_sample_positions && key->dynamic_rasterization_samples) + user_sgpr_count += 1; break; case MESA_SHADER_VERTEX: if (!args->is_gs_copy_shader) @@ -836,6 +838,10 @@ radv_declare_shader_args(enum amd_gfx_level gfx_level, const struct radv_pipelin ac_add_arg(&args->ac, AC_ARG_SGPR, 1, AC_ARG_INT, &args->ps_epilog_pc); } + if (info->ps.needs_sample_positions && key->dynamic_rasterization_samples) { + ac_add_arg(&args->ac, AC_ARG_SGPR, 1, AC_ARG_INT, &args->ps_num_samples); + } + ac_add_arg(&args->ac, AC_ARG_SGPR, 1, AC_ARG_INT, &args->ac.prim_mask); if (args->explicit_scratch_args && gfx_level < GFX11) { ac_add_arg(&args->ac, AC_ARG_SGPR, 1, AC_ARG_INT, &args->ac.scratch_offset); @@ -941,6 +947,8 @@ radv_declare_shader_args(enum amd_gfx_level gfx_level, const struct radv_pipelin case MESA_SHADER_FRAGMENT: if (args->ps_epilog_pc.used) set_loc_shader(args, AC_UD_PS_EPILOG_PC, &user_sgpr_idx, 1); + if (args->ps_num_samples.used) + set_loc_shader(args, AC_UD_PS_NUM_SAMPLES, &user_sgpr_idx, 1); break; default: unreachable("Shader stage not implemented"); diff --git a/src/amd/vulkan/radv_shader_args.h b/src/amd/vulkan/radv_shader_args.h index 32ece0b3ff2..4cf0e643174 100644 --- a/src/amd/vulkan/radv_shader_args.h +++ b/src/amd/vulkan/radv_shader_args.h @@ -58,6 +58,7 @@ struct radv_shader_args { /* Fragment shaders */ struct ac_arg ps_epilog_pc; + struct ac_arg ps_num_samples; struct ac_arg prolog_inputs; struct ac_arg vs_inputs[MAX_VERTEX_ATTRIBS];