From 6ae401aa868066eecbe6307c6e8173525f566580 Mon Sep 17 00:00:00 2001 From: Faith Ekstrand Date: Wed, 14 Aug 2024 10:48:37 -0500 Subject: [PATCH] vulkan: Add null descriptor bits to vk_pipeline_robustness_state Fixes: c9eac89da835 ("nvk: Advertise VK_EXT_robustness2") Reviewed-by: Alyssa Rosenzweig Part-of: --- src/vulkan/runtime/vk_pipeline.c | 2 ++ src/vulkan/runtime/vk_pipeline.h | 2 ++ src/vulkan/runtime/vk_shader.c | 11 +++++++++++ 3 files changed, 15 insertions(+) diff --git a/src/vulkan/runtime/vk_pipeline.c b/src/vulkan/runtime/vk_pipeline.c index 864bda3138a..ac08df2be87 100644 --- a/src/vulkan/runtime/vk_pipeline.c +++ b/src/vulkan/runtime/vk_pipeline.c @@ -295,6 +295,8 @@ vk_pipeline_robustness_state_fill(const struct vk_device *device, rs->storage_buffers = VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DEVICE_DEFAULT_EXT; rs->vertex_inputs = VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DEVICE_DEFAULT_EXT; rs->images = VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_DEVICE_DEFAULT_EXT; + rs->null_uniform_buffer_descriptor = device->enabled_features.nullDescriptor; + rs->null_storage_buffer_descriptor = device->enabled_features.nullDescriptor; const VkPipelineRobustnessCreateInfoEXT *shader_info = vk_find_struct_const(shader_stage_pNext, diff --git a/src/vulkan/runtime/vk_pipeline.h b/src/vulkan/runtime/vk_pipeline.h index c3202b5205d..28412de93ff 100644 --- a/src/vulkan/runtime/vk_pipeline.h +++ b/src/vulkan/runtime/vk_pipeline.h @@ -76,6 +76,8 @@ struct vk_pipeline_robustness_state { VkPipelineRobustnessBufferBehaviorEXT uniform_buffers; VkPipelineRobustnessBufferBehaviorEXT vertex_inputs; VkPipelineRobustnessImageBehaviorEXT images; + bool null_uniform_buffer_descriptor; + bool null_storage_buffer_descriptor; }; /** Hash VkPipelineShaderStageCreateInfo info diff --git a/src/vulkan/runtime/vk_shader.c b/src/vulkan/runtime/vk_shader.c index d124113a0cc..40d76cab79c 100644 --- a/src/vulkan/runtime/vk_shader.c +++ b/src/vulkan/runtime/vk_shader.c @@ -393,6 +393,17 @@ vk_common_CreateShadersEXT(VkDevice _device, .uniform_buffers = VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DISABLED_EXT, .vertex_inputs = VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DISABLED_EXT, .images = VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_DISABLED_EXT, + /* From the Vulkan 1.3.292 spec: + * + * "This extension [VK_EXT_robustness2] also adds support for “null + * descriptors”, where VK_NULL_HANDLE can be used instead of a valid + * handle. Accesses to null descriptors have well-defined behavior, + * and do not rely on robustness." + * + * For now, default these to true. + */ + .null_uniform_buffer_descriptor = true, + .null_storage_buffer_descriptor = true, }; /* From the Vulkan 1.3.274 spec: