diff --git a/.pick_status.json b/.pick_status.json index 9c9c440e53b..859060a1e50 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -784,7 +784,7 @@ "description": "radv: fix determining needed dynamic states when rasterization is disabled", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": null, "notes": null diff --git a/src/amd/vulkan/radv_pipeline_graphics.c b/src/amd/vulkan/radv_pipeline_graphics.c index 568cd5f20f4..4e0079ad6d8 100644 --- a/src/amd/vulkan/radv_pipeline_graphics.c +++ b/src/amd/vulkan/radv_pipeline_graphics.c @@ -399,9 +399,13 @@ radv_pipeline_needed_dynamic_state(const struct radv_device *device, const struc /* Disable dynamic states that are useless when rasterization is disabled. */ if (!raster_enabled) { - states = RADV_DYNAMIC_PRIMITIVE_TOPOLOGY | RADV_DYNAMIC_VERTEX_INPUT_BINDING_STRIDE | - RADV_DYNAMIC_PRIMITIVE_RESTART_ENABLE | RADV_DYNAMIC_RASTERIZER_DISCARD_ENABLE | - RADV_DYNAMIC_VERTEX_INPUT; + states = RADV_DYNAMIC_RASTERIZER_DISCARD_ENABLE; + + if (state->ia) + states |= RADV_DYNAMIC_PRIMITIVE_TOPOLOGY | RADV_DYNAMIC_PRIMITIVE_RESTART_ENABLE; + + if (state->vi) + states |= RADV_DYNAMIC_VERTEX_INPUT | RADV_DYNAMIC_VERTEX_INPUT_BINDING_STRIDE; if (pipeline->active_stages & VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT) states |= RADV_DYNAMIC_PATCH_CONTROL_POINTS | RADV_DYNAMIC_TESS_DOMAIN_ORIGIN;