From 8120d14ee049e6ee534d2c6e7ecc828ccb0f6879 Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Thu, 21 Aug 2025 14:48:20 +0200 Subject: [PATCH] radv: dirty RADV_CMD_DIRTY_xx states when binding sample shading state This reduces the number of states that are re-emitted but the logic is mostly duplicated because sample shading can be set from the fragment shader or the graphics pipeline. Could be refactored eventually. Signed-off-by: Samuel Pitoiset Part-of: --- src/amd/vulkan/radv_cmd_buffer.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c index dea45009d31..1e2406c3f63 100644 --- a/src/amd/vulkan/radv_cmd_buffer.c +++ b/src/amd/vulkan/radv_cmd_buffer.c @@ -7298,9 +7298,11 @@ radv_bind_multisample_state(struct radv_cmd_buffer *cmd_buffer, const struct rad const struct radv_physical_device *pdev = radv_device_physical(device); if (cmd_buffer->state.ms.sample_shading_enable != ms->sample_shading_enable) { - cmd_buffer->state.dirty_dynamic |= RADV_DYNAMIC_RASTERIZATION_SAMPLES; + cmd_buffer->state.dirty |= RADV_CMD_DIRTY_RAST_SAMPLES_STATE | RADV_CMD_DIRTY_MSAA_STATE; if (pdev->info.gfx_level >= GFX10_3) cmd_buffer->state.dirty |= RADV_CMD_DIRTY_FSR_STATE; + if (pdev->info.gfx_level == GFX9) + cmd_buffer->state.dirty |= RADV_CMD_DIRTY_BINNING_STATE; } if (ms->sample_shading_enable) { @@ -7308,7 +7310,9 @@ radv_bind_multisample_state(struct radv_cmd_buffer *cmd_buffer, const struct rad if (cmd_buffer->state.ms.min_sample_shading != ms->min_sample_shading) { cmd_buffer->state.ms.min_sample_shading = ms->min_sample_shading; - cmd_buffer->state.dirty_dynamic |= RADV_DYNAMIC_RASTERIZATION_SAMPLES; + cmd_buffer->state.dirty |= RADV_CMD_DIRTY_RAST_SAMPLES_STATE | RADV_CMD_DIRTY_MSAA_STATE; + if (pdev->info.gfx_level == GFX9) + cmd_buffer->state.dirty |= RADV_CMD_DIRTY_BINNING_STATE; } } } @@ -7503,15 +7507,18 @@ radv_bind_fragment_shader(struct radv_cmd_buffer *cmd_buffer, const struct radv_ if (cmd_buffer->state.ms.sample_shading_enable != ps->info.ps.uses_sample_shading) { cmd_buffer->state.ms.sample_shading_enable = ps->info.ps.uses_sample_shading; - cmd_buffer->state.dirty_dynamic |= RADV_DYNAMIC_RASTERIZATION_SAMPLES; - + cmd_buffer->state.dirty |= RADV_CMD_DIRTY_RAST_SAMPLES_STATE | RADV_CMD_DIRTY_MSAA_STATE; if (gfx_level >= GFX10_3) cmd_buffer->state.dirty |= RADV_CMD_DIRTY_FSR_STATE; + if (gfx_level == GFX9) + cmd_buffer->state.dirty |= RADV_CMD_DIRTY_BINNING_STATE; } if (cmd_buffer->state.ms.min_sample_shading != min_sample_shading) { cmd_buffer->state.ms.min_sample_shading = min_sample_shading; - cmd_buffer->state.dirty_dynamic |= RADV_DYNAMIC_RASTERIZATION_SAMPLES; + cmd_buffer->state.dirty |= RADV_CMD_DIRTY_RAST_SAMPLES_STATE | RADV_CMD_DIRTY_MSAA_STATE; + if (pdev->info.gfx_level == GFX9) + cmd_buffer->state.dirty |= RADV_CMD_DIRTY_BINNING_STATE; } if (!previous_ps || previous_ps->info.regs.ps.db_shader_control != ps->info.regs.ps.db_shader_control ||