diff --git a/src/amd/vulkan/radv_pipeline_graphics.c b/src/amd/vulkan/radv_pipeline_graphics.c index 7a4f256abb4..9f7c8e8dd99 100644 --- a/src/amd/vulkan/radv_pipeline_graphics.c +++ b/src/amd/vulkan/radv_pipeline_graphics.c @@ -546,7 +546,8 @@ radv_pipeline_is_blend_enabled(const struct radv_graphics_pipeline *pipeline, } static uint64_t -radv_pipeline_needed_dynamic_state(const struct radv_graphics_pipeline *pipeline, +radv_pipeline_needed_dynamic_state(const struct radv_device *device, + const struct radv_graphics_pipeline *pipeline, const struct vk_graphics_pipeline_state *state) { bool has_color_att = radv_pipeline_has_color_attachments(state->rp); @@ -554,6 +555,9 @@ radv_pipeline_needed_dynamic_state(const struct radv_graphics_pipeline *pipeline (pipeline->dynamic_states & RADV_DYNAMIC_RASTERIZER_DISCARD_ENABLE); uint64_t states = RADV_DYNAMIC_ALL; + if (device->physical_device->rad_info.gfx_level < GFX10_3) + states &= ~RADV_DYNAMIC_FRAGMENT_SHADING_RATE; + /* Disable dynamic states that are useless to mesh shading. */ if (radv_pipeline_has_stage(pipeline, MESA_SHADER_MESH)) { if (!raster_enabled) @@ -600,9 +604,6 @@ radv_pipeline_needed_dynamic_state(const struct radv_graphics_pipeline *pipeline !state->rs->line.stipple.enable) states &= ~RADV_DYNAMIC_LINE_STIPPLE; - if (!radv_is_vrs_enabled(pipeline, state)) - states &= ~RADV_DYNAMIC_FRAGMENT_SHADING_RATE; - if (!has_color_att || !radv_pipeline_is_blend_enabled(pipeline, state->cb)) states &= ~RADV_DYNAMIC_BLEND_CONSTANTS; @@ -896,11 +897,12 @@ radv_pipeline_uses_ds_feedback_loop(const VkGraphicsPipelineCreateInfo *pCreateI } static void -radv_pipeline_init_dynamic_state(struct radv_graphics_pipeline *pipeline, +radv_pipeline_init_dynamic_state(const struct radv_device *device, + struct radv_graphics_pipeline *pipeline, const struct vk_graphics_pipeline_state *state, const VkGraphicsPipelineCreateInfo *pCreateInfo) { - uint64_t needed_states = radv_pipeline_needed_dynamic_state(pipeline, state); + uint64_t needed_states = radv_pipeline_needed_dynamic_state(device, pipeline, state); struct radv_dynamic_state *dynamic = &pipeline->dynamic_state; uint64_t states = needed_states; @@ -4062,7 +4064,7 @@ radv_graphics_pipeline_init(struct radv_graphics_pipeline *pipeline, struct radv if (!radv_pipeline_has_stage(pipeline, MESA_SHADER_MESH)) radv_pipeline_init_input_assembly_state(device, pipeline); - radv_pipeline_init_dynamic_state(pipeline, &state, pCreateInfo); + radv_pipeline_init_dynamic_state(device, pipeline, &state, pCreateInfo); struct radv_blend_state blend = radv_pipeline_init_blend_state(pipeline, &state);