From ccfbd94891c08a741d1441ea0ef450b347d591f1 Mon Sep 17 00:00:00 2001 From: George Ouzounoudis Date: Mon, 9 Jan 2023 19:51:47 +0200 Subject: [PATCH] nvk: Enable descriptor indexing These values follow the already existing per-stage and descriptor set limits. If we change these to be similar to the reported values of the proprietary driver, care must be taken as Turing has bigger limits for uniform buffers than older generations. Part-of: --- src/nouveau/vulkan/nvk_physical_device.c | 38 ++++++++++++++++++++++++ src/nouveau/vulkan/nvk_shader.c | 4 +++ 2 files changed, 42 insertions(+) diff --git a/src/nouveau/vulkan/nvk_physical_device.c b/src/nouveau/vulkan/nvk_physical_device.c index bd9a8252d75..860e351a955 100644 --- a/src/nouveau/vulkan/nvk_physical_device.c +++ b/src/nouveau/vulkan/nvk_physical_device.c @@ -184,7 +184,29 @@ nvk_GetPhysicalDeviceProperties2(VkPhysicalDevice physicalDevice, .subminor = 0, .patch = 0, }, + .maxUpdateAfterBindDescriptorsInAllPools = UINT32_MAX, + .shaderUniformBufferArrayNonUniformIndexingNative = false, + .shaderSampledImageArrayNonUniformIndexingNative = pdev->info.cls_eng3d >= TURING_A, + .shaderStorageBufferArrayNonUniformIndexingNative = true, + .shaderStorageImageArrayNonUniformIndexingNative = pdev->info.cls_eng3d >= TURING_A, + .shaderInputAttachmentArrayNonUniformIndexingNative = false, .robustBufferAccessUpdateAfterBind = true, + .quadDivergentImplicitLod = pdev->info.cls_eng3d >= TURING_A, + .maxPerStageDescriptorUpdateAfterBindSamplers = UINT32_MAX, + .maxPerStageDescriptorUpdateAfterBindUniformBuffers = UINT32_MAX, + .maxPerStageDescriptorUpdateAfterBindStorageBuffers = UINT32_MAX, + .maxPerStageDescriptorUpdateAfterBindSampledImages = UINT32_MAX, + .maxPerStageDescriptorUpdateAfterBindStorageImages = UINT32_MAX, + .maxPerStageDescriptorUpdateAfterBindInputAttachments = UINT32_MAX, + .maxPerStageUpdateAfterBindResources = UINT32_MAX, + .maxDescriptorSetUpdateAfterBindSamplers = UINT32_MAX, + .maxDescriptorSetUpdateAfterBindUniformBuffers = UINT32_MAX, + .maxDescriptorSetUpdateAfterBindUniformBuffersDynamic = NVK_MAX_DYNAMIC_BUFFERS / 2, + .maxDescriptorSetUpdateAfterBindStorageBuffers = UINT32_MAX, + .maxDescriptorSetUpdateAfterBindStorageBuffersDynamic = NVK_MAX_DYNAMIC_BUFFERS / 2, + .maxDescriptorSetUpdateAfterBindSampledImages = UINT32_MAX, + .maxDescriptorSetUpdateAfterBindStorageImages = UINT32_MAX, + .maxDescriptorSetUpdateAfterBindInputAttachments = UINT32_MAX, .filterMinmaxSingleComponentFormats = true, .filterMinmaxImageComponentMapping = true, }; @@ -320,6 +342,7 @@ nvk_get_device_extensions(const struct nv_device_info *dev, .EXT_border_color_swizzle = true, .EXT_buffer_device_address = true, .EXT_custom_border_color = true, + .EXT_descriptor_indexing = true, .EXT_extended_dynamic_state = true, .EXT_extended_dynamic_state2 = true, .EXT_extended_dynamic_state3 = true, @@ -412,8 +435,23 @@ nvk_get_device_features(const struct nv_device_info *dev, .shaderInputAttachmentArrayDynamicIndexing = true, .shaderUniformTexelBufferArrayDynamicIndexing = true, .shaderStorageTexelBufferArrayDynamicIndexing = true, + .shaderUniformBufferArrayNonUniformIndexing = true, + .shaderSampledImageArrayNonUniformIndexing = true, + .shaderStorageBufferArrayNonUniformIndexing = true, + .shaderStorageImageArrayNonUniformIndexing = true, + .shaderInputAttachmentArrayNonUniformIndexing = true, + .shaderUniformTexelBufferArrayNonUniformIndexing = true, + .shaderStorageTexelBufferArrayNonUniformIndexing = true, + .descriptorBindingUniformBufferUpdateAfterBind = true, + .descriptorBindingSampledImageUpdateAfterBind = true, + .descriptorBindingStorageImageUpdateAfterBind = true, + .descriptorBindingStorageBufferUpdateAfterBind = true, .descriptorBindingUniformTexelBufferUpdateAfterBind = true, .descriptorBindingStorageTexelBufferUpdateAfterBind = true, + .descriptorBindingUpdateUnusedWhilePending = true, + .descriptorBindingPartiallyBound = true, + .descriptorBindingVariableDescriptorCount = true, + .runtimeDescriptorArray = true, .imagelessFramebuffer = true, .uniformBufferStandardLayout = true, .separateDepthStencilLayouts = true, diff --git a/src/nouveau/vulkan/nvk_shader.c b/src/nouveau/vulkan/nvk_shader.c index a9776e09f47..c1902752ea4 100644 --- a/src/nouveau/vulkan/nvk_shader.c +++ b/src/nouveau/vulkan/nvk_shader.c @@ -67,6 +67,9 @@ nvk_physical_device_spirv_options(const struct nvk_physical_device *pdevice, return (struct spirv_to_nir_options) { .caps = { .demote_to_helper_invocation = true, + .descriptor_indexing = true, + .descriptor_array_dynamic_indexing = true, + .descriptor_array_non_uniform_indexing = true, .draw_parameters = true, .geometry_streams = true, .image_read_without_format = true, @@ -74,6 +77,7 @@ nvk_physical_device_spirv_options(const struct nvk_physical_device *pdevice, .min_lod = true, .multiview = true, .physical_storage_buffer_address = true, + .runtime_descriptor_array = true, .shader_viewport_index_layer = true, .tessellation = true, .transform_feedback = true,