diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c index 32a5910492b..c91237823f3 100644 --- a/src/amd/vulkan/radv_device.c +++ b/src/amd/vulkan/radv_device.c @@ -1169,6 +1169,7 @@ radv_device_init_compiler_info(struct radv_device *device) .force_64_byte_sampled_image = pdev->force_64_byte_sampled_image, .robust_buffer_access = pdev->use_llvm && (device->vk.enabled_features.robustBufferAccess2 || device->vk.enabled_features.robustBufferAccess), + .coop_matrix_robust_buffer_access = device->vk.enabled_features.cooperativeMatrixRobustBufferAccess, .mitigate_smem_oob = pdev->info.compiler_info.has_smem_oob_access_bug && !(instance->debug_flags & RADV_DEBUG_NO_SMEM_MITIGATION), .mitigate_smem_with_null_prt = diff --git a/src/amd/vulkan/radv_pipeline.c b/src/amd/vulkan/radv_pipeline.c index f2634bcfea8..d28ec0a0490 100644 --- a/src/amd/vulkan/radv_pipeline.c +++ b/src/amd/vulkan/radv_pipeline.c @@ -143,6 +143,11 @@ radv_pipeline_get_shader_key(const struct radv_compiler_info *compiler_info, radv_set_stage_key_robustness(&rs, s, &key); + if (compiler_info->key.coop_matrix_robust_buffer_access) { + key.coop_matrix_storage_robustness = rs.storage_buffers != VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DISABLED; + key.coop_matrix_uniform_robustness = rs.uniform_buffers != VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DISABLED; + } + 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.h b/src/amd/vulkan/radv_shader.h index a6be2a72113..1a4f29e8f85 100644 --- a/src/amd/vulkan/radv_shader.h +++ b/src/amd/vulkan/radv_shader.h @@ -81,6 +81,8 @@ struct radv_shader_stage_key { uint8_t storage_robustness2 : 1; uint8_t uniform_robustness2 : 1; uint8_t vertex_robustness1 : 1; + uint8_t coop_matrix_storage_robustness : 1; + uint8_t coop_matrix_uniform_robustness : 1; uint8_t optimisations_disabled : 1; uint8_t keep_statistic_info : 1; @@ -97,7 +99,7 @@ struct radv_shader_stage_key { /* Whether the shader is used with indirect pipeline binds. */ uint8_t indirect_bindable : 1; - uint32_t reserved : 17; + uint32_t reserved : 15; }; struct radv_ps_epilog_key { @@ -530,6 +532,7 @@ struct radv_compiler_info { uint32_t use_fmask : 1; uint32_t force_64_byte_sampled_image : 1; uint32_t robust_buffer_access : 1; /* Only used by LLVM. */ + uint32_t coop_matrix_robust_buffer_access : 1; uint32_t mitigate_smem_oob : 1; uint32_t mitigate_smem_with_null_prt : 1; uint32_t bvh8 : 1; @@ -548,7 +551,7 @@ struct radv_compiler_info { uint32_t tex_non_uniform : 1; uint32_t lower_terminate_to_discard : 1; uint32_t no_implicit_varying_subgroup_size : 1; - uint32_t padding : 30; + uint32_t padding : 29; int32_t force_aniso;