diff --git a/src/nouveau/vulkan/nvk_physical_device.c b/src/nouveau/vulkan/nvk_physical_device.c index cb197cb6f1e..f4040230723 100644 --- a/src/nouveau/vulkan/nvk_physical_device.c +++ b/src/nouveau/vulkan/nvk_physical_device.c @@ -93,6 +93,8 @@ nvk_GetPhysicalDeviceFeatures2(VkPhysicalDevice physicalDevice, .shaderInputAttachmentArrayDynamicIndexing = true, .shaderUniformTexelBufferArrayDynamicIndexing = true, .shaderStorageTexelBufferArrayDynamicIndexing = true, + .descriptorBindingUniformTexelBufferUpdateAfterBind = true, + .descriptorBindingStorageTexelBufferUpdateAfterBind = true, .imagelessFramebuffer = true, .uniformBufferStandardLayout = true, .separateDepthStencilLayouts = true, @@ -107,6 +109,7 @@ nvk_GetPhysicalDeviceFeatures2(VkPhysicalDevice physicalDevice, /* Vulkan 1.3 features */ .robustImageAccess = true, .inlineUniformBlock = true, + .descriptorBindingInlineUniformBlockUpdateAfterBind = true, .privateData = true, .dynamicRendering = true, }; @@ -225,6 +228,13 @@ nvk_GetPhysicalDeviceFeatures2(VkPhysicalDevice physicalDevice, f->transformFeedbackPreservesProvokingVertex = true; break; } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT: { + VkPhysicalDeviceRobustness2FeaturesEXT *f = (void *)ext; + f->robustBufferAccess2 = true; + f->robustImageAccess2 = true; + f->nullDescriptor = true; + break; + } case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT: { VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT *f = (void *)ext; f->vertexAttributeInstanceRateDivisor = true; @@ -384,6 +394,7 @@ nvk_GetPhysicalDeviceProperties2(VkPhysicalDevice physicalDevice, .subminor = 0, .patch = 0, }, + .robustBufferAccessUpdateAfterBind = true, }; snprintf(core_1_2.driverName, VK_MAX_DRIVER_NAME_SIZE, "NVK"); @@ -437,6 +448,13 @@ nvk_GetPhysicalDeviceProperties2(VkPhysicalDevice physicalDevice, p->maxVertexAttribDivisor = UINT32_MAX; break; } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT: { + VkPhysicalDeviceRobustness2PropertiesEXT *p = (void *)ext; + p->robustStorageBufferAccessSizeAlignment = + NVK_SSBO_BOUNDS_CHECK_ALIGNMENT; + p->robustUniformBufferAccessSizeAlignment = NVK_MIN_UBO_ALIGNMENT; + break; + } /* More property structs */ default: break; @@ -502,6 +520,7 @@ nvk_get_device_extensions(const struct nvk_physical_device *pdev, .EXT_pci_bus_info = true, .EXT_private_data = true, .EXT_provoking_vertex = true, + .EXT_robustness2 = true, .EXT_sample_locations = pdev->info.cls_eng3d >= MAXWELL_B, .EXT_separate_stencil_usage = true, .EXT_vertex_attribute_divisor = true, diff --git a/src/nouveau/vulkan/nvk_private.h b/src/nouveau/vulkan/nvk_private.h index 3217c3d4321..e92119809e7 100644 --- a/src/nouveau/vulkan/nvk_private.h +++ b/src/nouveau/vulkan/nvk_private.h @@ -28,6 +28,7 @@ #define NVK_MAX_DESCRIPTOR_SET_SIZE (1u << 30) #define NVK_PUSH_DESCRIPTOR_SET_SIZE \ (NVK_MAX_PUSH_DESCRIPTORS * NVK_MAX_DESCRIPTOR_SIZE) +#define NVK_SSBO_BOUNDS_CHECK_ALIGNMENT 4 struct nvk_addr_range { uint64_t addr;