From d8861d52a2e50704003885b67d5d80676c5a1995 Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Tue, 13 Aug 2024 15:39:44 +0200 Subject: [PATCH] radv: add a helper to set shader stage key robustness info For future work. Signed-off-by: Samuel Pitoiset Part-of: --- src/amd/vulkan/radv_pipeline.c | 9 +-------- src/amd/vulkan/radv_shader.c | 14 ++++++++++++++ src/amd/vulkan/radv_shader.h | 4 ++++ 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/src/amd/vulkan/radv_pipeline.c b/src/amd/vulkan/radv_pipeline.c index e0ff7d9e372..db0eea129ff 100644 --- a/src/amd/vulkan/radv_pipeline.c +++ b/src/amd/vulkan/radv_pipeline.c @@ -149,14 +149,7 @@ radv_pipeline_get_shader_key(const struct radv_device *device, const VkPipelineS vk_pipeline_robustness_state_fill(&device->vk, &rs, pNext, stage->pNext); - if (rs.storage_buffers == VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXT) - key.storage_robustness2 = 1; - if (rs.uniform_buffers == VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXT) - key.uniform_robustness2 = 1; - if (s == MESA_SHADER_VERTEX && - (rs.vertex_inputs == VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_EXT || - rs.vertex_inputs == VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXT)) - key.vertex_robustness1 = 1u; + radv_set_stage_key_robustness(&rs, s, &key); const VkPipelineShaderStageRequiredSubgroupSizeCreateInfo *const subgroup_size = vk_find_struct_const(stage->pNext, PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO); diff --git a/src/amd/vulkan/radv_shader.c b/src/amd/vulkan/radv_shader.c index aca005b7222..901a39ef3ce 100644 --- a/src/amd/vulkan/radv_shader.c +++ b/src/amd/vulkan/radv_shader.c @@ -2795,6 +2795,20 @@ radv_fill_nir_compiler_options(struct radv_nir_compiler_options *options, struct options->enable_mrt_output_nan_fixup = gfx_state ? gfx_state->ps.epilog.enable_mrt_output_nan_fixup : false; } +void +radv_set_stage_key_robustness(const struct vk_pipeline_robustness_state *rs, gl_shader_stage stage, + struct radv_shader_stage_key *key) +{ + if (rs->storage_buffers == VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXT) + key->storage_robustness2 = 1; + if (rs->uniform_buffers == VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXT) + key->uniform_robustness2 = 1; + if (stage == MESA_SHADER_VERTEX && + (rs->vertex_inputs == VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_EXT || + rs->vertex_inputs == VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXT)) + key->vertex_robustness1 = 1u; +} + static void radv_capture_shader_executable_info(struct radv_device *device, struct radv_shader *shader, struct nir_shader *const *shaders, int shader_count, diff --git a/src/amd/vulkan/radv_shader.h b/src/amd/vulkan/radv_shader.h index 04888409874..0b36876726c 100644 --- a/src/amd/vulkan/radv_shader.h +++ b/src/amd/vulkan/radv_shader.h @@ -32,6 +32,7 @@ struct radv_shader_args; struct radv_vs_input_state; struct radv_shader_args; struct radv_serialized_shader_arena_block; +struct vk_pipeline_robustness_state; enum { RADV_GRAPHICS_STAGE_BITS = @@ -721,4 +722,7 @@ uint32_t radv_get_user_sgpr(const struct radv_shader *shader, int idx); void radv_precompute_registers_hw_ngg(struct radv_device *device, const struct ac_shader_config *config, struct radv_shader_info *info); +void radv_set_stage_key_robustness(const struct vk_pipeline_robustness_state *rs, gl_shader_stage stage, + struct radv_shader_stage_key *key); + #endif /* RADV_SHADER_H */