From: Hyunjun Ko Date: Tue, 16 Mar 2021 06:24:06 +0000 (+0000) Subject: turnip: Enable nonuniform descriptor indexing X-Git-Tag: upstream/21.2.3~6434 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d9fcf5de55a7104037823e62284ace8a206c8898;p=platform%2Fupstream%2Fmesa.git turnip: Enable nonuniform descriptor indexing Signed-off-by: Hyunjun Ko Reviewed-by: Danylo Piliaiev Reviewed-by: Eric Anholt Part-of: --- diff --git a/docs/features.txt b/docs/features.txt index 0cb93a7..6117b17 100644 --- a/docs/features.txt +++ b/docs/features.txt @@ -465,7 +465,7 @@ Vulkan 1.2 -- all DONE: anv VK_KHR_timeline_semaphore DONE (anv, radv) VK_KHR_uniform_buffer_standard_layout DONE (anv, lvp, radv) VK_KHR_vulkan_memory_model DONE (anv, radv) - VK_EXT_descriptor_indexing DONE (anv/gen9+, radv) + VK_EXT_descriptor_indexing DONE (anv/gen9+, radv, tu) VK_EXT_host_query_reset DONE (anv, lvp, radv, tu) VK_EXT_sampler_filter_minmax DONE (anv/gen9+, lvp, radv, tu) VK_EXT_scalar_block_layout DONE (anv, lvp, radv/gfx7+) diff --git a/src/freedreno/vulkan/tu_device.c b/src/freedreno/vulkan/tu_device.c index f4fe8e5..fe05c11 100644 --- a/src/freedreno/vulkan/tu_device.c +++ b/src/freedreno/vulkan/tu_device.c @@ -424,27 +424,27 @@ tu_GetPhysicalDeviceFeatures2(VkPhysicalDevice physicalDevice, features->shaderFloat16 = false; features->shaderInt8 = false; - features->descriptorIndexing = false; + features->descriptorIndexing = true; features->shaderInputAttachmentArrayDynamicIndexing = false; - features->shaderUniformTexelBufferArrayDynamicIndexing = false; - features->shaderStorageTexelBufferArrayDynamicIndexing = false; - features->shaderUniformBufferArrayNonUniformIndexing = false; - features->shaderSampledImageArrayNonUniformIndexing = false; - features->shaderStorageBufferArrayNonUniformIndexing = false; - features->shaderStorageImageArrayNonUniformIndexing = false; + features->shaderUniformTexelBufferArrayDynamicIndexing = true; + features->shaderStorageTexelBufferArrayDynamicIndexing = true; + features->shaderUniformBufferArrayNonUniformIndexing = true; + features->shaderSampledImageArrayNonUniformIndexing = true; + features->shaderStorageBufferArrayNonUniformIndexing = true; + features->shaderStorageImageArrayNonUniformIndexing = true; features->shaderInputAttachmentArrayNonUniformIndexing = false; - features->shaderUniformTexelBufferArrayNonUniformIndexing = false; - features->shaderStorageTexelBufferArrayNonUniformIndexing = false; + features->shaderUniformTexelBufferArrayNonUniformIndexing = true; + features->shaderStorageTexelBufferArrayNonUniformIndexing = true; features->descriptorBindingUniformBufferUpdateAfterBind = false; - features->descriptorBindingSampledImageUpdateAfterBind = false; - features->descriptorBindingStorageImageUpdateAfterBind = false; - features->descriptorBindingStorageBufferUpdateAfterBind = false; - features->descriptorBindingUniformTexelBufferUpdateAfterBind = false; - features->descriptorBindingStorageTexelBufferUpdateAfterBind = false; - features->descriptorBindingUpdateUnusedWhilePending = false; - features->descriptorBindingPartiallyBound = false; - features->descriptorBindingVariableDescriptorCount = false; - features->runtimeDescriptorArray = false; + features->descriptorBindingSampledImageUpdateAfterBind = true; + features->descriptorBindingStorageImageUpdateAfterBind = true; + features->descriptorBindingStorageBufferUpdateAfterBind = true; + features->descriptorBindingUniformTexelBufferUpdateAfterBind = true; + features->descriptorBindingStorageTexelBufferUpdateAfterBind = true; + features->descriptorBindingUpdateUnusedWhilePending = true; + features->descriptorBindingPartiallyBound = true; + features->descriptorBindingVariableDescriptorCount = true; + features->runtimeDescriptorArray = true; features->samplerFilterMinmax = true; features->scalarBlockLayout = false; @@ -510,25 +510,25 @@ tu_GetPhysicalDeviceFeatures2(VkPhysicalDevice physicalDevice, VkPhysicalDeviceDescriptorIndexingFeaturesEXT *features = (VkPhysicalDeviceDescriptorIndexingFeaturesEXT *) ext; features->shaderInputAttachmentArrayDynamicIndexing = false; - features->shaderUniformTexelBufferArrayDynamicIndexing = false; - features->shaderStorageTexelBufferArrayDynamicIndexing = false; - features->shaderUniformBufferArrayNonUniformIndexing = false; - features->shaderSampledImageArrayNonUniformIndexing = false; - features->shaderStorageBufferArrayNonUniformIndexing = false; - features->shaderStorageImageArrayNonUniformIndexing = false; + features->shaderUniformTexelBufferArrayDynamicIndexing = true; + features->shaderStorageTexelBufferArrayDynamicIndexing = true; + features->shaderUniformBufferArrayNonUniformIndexing = true; + features->shaderSampledImageArrayNonUniformIndexing = true; + features->shaderStorageBufferArrayNonUniformIndexing = true; + features->shaderStorageImageArrayNonUniformIndexing = true; features->shaderInputAttachmentArrayNonUniformIndexing = false; - features->shaderUniformTexelBufferArrayNonUniformIndexing = false; - features->shaderStorageTexelBufferArrayNonUniformIndexing = false; + features->shaderUniformTexelBufferArrayNonUniformIndexing = true; + features->shaderStorageTexelBufferArrayNonUniformIndexing = true; features->descriptorBindingUniformBufferUpdateAfterBind = false; - features->descriptorBindingSampledImageUpdateAfterBind = false; - features->descriptorBindingStorageImageUpdateAfterBind = false; - features->descriptorBindingStorageBufferUpdateAfterBind = false; - features->descriptorBindingUniformTexelBufferUpdateAfterBind = false; - features->descriptorBindingStorageTexelBufferUpdateAfterBind = false; - features->descriptorBindingUpdateUnusedWhilePending = false; - features->descriptorBindingPartiallyBound = false; - features->descriptorBindingVariableDescriptorCount = false; - features->runtimeDescriptorArray = false; + features->descriptorBindingSampledImageUpdateAfterBind = true; + features->descriptorBindingStorageImageUpdateAfterBind = true; + features->descriptorBindingStorageBufferUpdateAfterBind = true; + features->descriptorBindingUniformTexelBufferUpdateAfterBind = true; + features->descriptorBindingStorageTexelBufferUpdateAfterBind = true; + features->descriptorBindingUpdateUnusedWhilePending = true; + features->descriptorBindingPartiallyBound = true; + features->descriptorBindingVariableDescriptorCount = true; + features->runtimeDescriptorArray = true; break; } case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT: { @@ -600,7 +600,6 @@ tu_GetPhysicalDeviceFeatures2(VkPhysicalDevice physicalDevice, feature->performanceCounterMultipleQueryPools = false; break; } - default: break; } @@ -860,6 +859,36 @@ tu_GetPhysicalDeviceProperties2(VkPhysicalDevice physicalDevice, properties->allowCommandBufferQueryCopies = false; break; } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES_EXT: { + VkPhysicalDeviceDescriptorIndexingPropertiesEXT *props = + (VkPhysicalDeviceDescriptorIndexingPropertiesEXT *)ext; + props->shaderUniformBufferArrayNonUniformIndexingNative = true; + props->shaderSampledImageArrayNonUniformIndexingNative = true; + props->shaderStorageBufferArrayNonUniformIndexingNative = true; + props->shaderStorageImageArrayNonUniformIndexingNative = true; + props->shaderInputAttachmentArrayNonUniformIndexingNative = false; + props->robustBufferAccessUpdateAfterBind = false; + props->quadDivergentImplicitLod = false; + + props->maxUpdateAfterBindDescriptorsInAllPools = max_descriptor_set_size; + props->maxPerStageDescriptorUpdateAfterBindSamplers = max_descriptor_set_size; + props->maxPerStageDescriptorUpdateAfterBindUniformBuffers = max_descriptor_set_size; + props->maxPerStageDescriptorUpdateAfterBindStorageBuffers = max_descriptor_set_size; + props->maxPerStageDescriptorUpdateAfterBindSampledImages = max_descriptor_set_size; + props->maxPerStageDescriptorUpdateAfterBindStorageImages = max_descriptor_set_size; + props->maxPerStageDescriptorUpdateAfterBindInputAttachments = max_descriptor_set_size; + props->maxPerStageUpdateAfterBindResources = max_descriptor_set_size; + props->maxDescriptorSetUpdateAfterBindSamplers = max_descriptor_set_size; + props->maxDescriptorSetUpdateAfterBindUniformBuffers = max_descriptor_set_size; + props->maxDescriptorSetUpdateAfterBindUniformBuffersDynamic = MAX_DYNAMIC_BUFFERS / 2; + props->maxDescriptorSetUpdateAfterBindStorageBuffers = max_descriptor_set_size; + props->maxDescriptorSetUpdateAfterBindStorageBuffersDynamic = MAX_DYNAMIC_BUFFERS / 2; + props->maxDescriptorSetUpdateAfterBindSampledImages = max_descriptor_set_size; + props->maxDescriptorSetUpdateAfterBindStorageImages = max_descriptor_set_size; + props->maxDescriptorSetUpdateAfterBindInputAttachments = max_descriptor_set_size; + break; + } + default: break; } diff --git a/src/freedreno/vulkan/tu_extensions.py b/src/freedreno/vulkan/tu_extensions.py index 5bda404..c49fe80 100644 --- a/src/freedreno/vulkan/tu_extensions.py +++ b/src/freedreno/vulkan/tu_extensions.py @@ -105,6 +105,7 @@ EXTENSIONS = [ Extension('VK_EXT_memory_budget', 1, True), Extension('VK_KHR_device_group', 4, True), Extension('VK_KHR_device_group_creation', 1, True), + Extension('VK_EXT_descriptor_indexing', 2, True), ] MAX_API_VERSION = VkVersion(MAX_API_VERSION) diff --git a/src/freedreno/vulkan/tu_shader.c b/src/freedreno/vulkan/tu_shader.c index 0feb07f..172c0c9 100644 --- a/src/freedreno/vulkan/tu_shader.c +++ b/src/freedreno/vulkan/tu_shader.c @@ -69,6 +69,10 @@ tu_spirv_to_nir(struct tu_device *dev, .shader_viewport_index_layer = true, .geometry_streams = true, .device_group = true, + .descriptor_indexing = true, + .descriptor_array_dynamic_indexing = true, + .descriptor_array_non_uniform_indexing = true, + .runtime_descriptor_array = true, }, }; const nir_shader_compiler_options *nir_options =