From be57dc25ac6916861247012df71db9e05e219520 Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Mon, 12 Jun 2023 08:43:34 +0200 Subject: [PATCH] radv: reset some dynamic states when the fragment shader stage is unbound Cc: mesa-stable Signed-off-by: Samuel Pitoiset Part-of: (cherry picked from commit 71b6108f672c07be8b8f2c744c12486e6916d1c3) --- .pick_status.json | 2 +- src/amd/vulkan/radv_cmd_buffer.c | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/.pick_status.json b/.pick_status.json index 23fd043b339..c46486ef2a6 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -391,7 +391,7 @@ "description": "radv: reset some dynamic states when the fragment shader stage is unbound", "nominated": true, "nomination_type": 0, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": null }, diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c index e435a528299..2afc68e2583 100644 --- a/src/amd/vulkan/radv_cmd_buffer.c +++ b/src/amd/vulkan/radv_cmd_buffer.c @@ -6612,6 +6612,17 @@ radv_bind_shader(struct radv_cmd_buffer *cmd_buffer, struct radv_shader *shader, if (!shader) { cmd_buffer->state.shaders[stage] = NULL; cmd_buffer->state.active_stages &= ~mesa_to_vk_shader_stage(stage); + + /* Reset some dynamic states when a shader stage is unbound. */ + switch (stage) { + case MESA_SHADER_FRAGMENT: + cmd_buffer->state.dirty |= RADV_CMD_DIRTY_DYNAMIC_CONSERVATIVE_RAST_MODE | + RADV_CMD_DIRTY_DYNAMIC_RASTERIZATION_SAMPLES | + RADV_CMD_DIRTY_DYNAMIC_FRAGMENT_SHADING_RATE; + break; + default: + break; + } return; }