Module: Mesa Branch: main Commit: 8f6998ad8a9913d40d9820cc54398f9d02250cf0 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=8f6998ad8a9913d40d9820cc54398f9d02250cf0
Author: Samuel Pitoiset <[email protected]> Date: Fri Mar 24 14:26:20 2023 +0100 radv: separate the sample shading state between FS and graphics pipeline Sample shading can be enabled inside the fragment shader and also per-pipeline. Separate both cases to be able to enable sample shading by only binding a FS. Signed-off-by: Samuel Pitoiset <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22110> --- src/amd/vulkan/radv_cmd_buffer.c | 11 ++++++++++- src/amd/vulkan/radv_pipeline.c | 10 ++-------- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c index 9f1bd44f89c..bfff91495e0 100644 --- a/src/amd/vulkan/radv_cmd_buffer.c +++ b/src/amd/vulkan/radv_cmd_buffer.c @@ -6250,7 +6250,12 @@ static void radv_bind_multisample_state(struct radv_cmd_buffer *cmd_buffer, const struct radv_multisample_state *ms) { - cmd_buffer->state.ms = *ms; + if (ms->sample_shading_enable) { + cmd_buffer->state.ms.sample_shading_enable = true; + cmd_buffer->state.ms.min_sample_shading = ms->min_sample_shading; + } + + cmd_buffer->state.ms.uses_user_sample_locations = ms->uses_user_sample_locations; } static void @@ -6340,6 +6345,10 @@ radv_bind_fragment_shader(struct radv_cmd_buffer *cmd_buffer, const struct radv_ if (radv_get_user_sgpr(ps, AC_UD_PS_NUM_SAMPLES)->sgpr_idx != -1) { cmd_buffer->state.dirty |= RADV_CMD_DIRTY_DYNAMIC_RASTERIZATION_SAMPLES; } + + cmd_buffer->state.ms.sample_shading_enable = ps->info.ps.uses_sample_shading; + if (ps->info.ps.uses_sample_shading) + cmd_buffer->state.ms.min_sample_shading = 1.0f; } static void diff --git a/src/amd/vulkan/radv_pipeline.c b/src/amd/vulkan/radv_pipeline.c index ce5754540d2..d42188e6cab 100644 --- a/src/amd/vulkan/radv_pipeline.c +++ b/src/amd/vulkan/radv_pipeline.c @@ -476,15 +476,9 @@ radv_pipeline_init_multisample_state(const struct radv_device *device, * * Otherwise, sample shading is considered disabled." */ - if (pipeline->base.shaders[MESA_SHADER_FRAGMENT]->info.ps.uses_sample_shading || - (state->ms && state->ms->sample_shading_enable)) { - if (pipeline->base.shaders[MESA_SHADER_FRAGMENT]->info.ps.uses_sample_shading) { - ms->min_sample_shading = 1.0f; - } else { - ms->min_sample_shading = state->ms->min_sample_shading; - } - + if (state->ms && state->ms->sample_shading_enable) { ms->sample_shading_enable = true; + ms->min_sample_shading = state->ms->min_sample_shading; } pipeline->pa_sc_mode_cntl_1 =
