dzn: Support descriptor indexing via bindless

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21913>
This commit is contained in:
Jesse Natalie
2023-03-13 14:36:20 -07:00
committed by Marge Bot
parent c93dda6bee
commit 19818ecc37
3 changed files with 41 additions and 32 deletions
+3
View File
@@ -629,3 +629,6 @@ dEQP-VK.image.depth_stencil_descriptor.depth_read_only_stencil_attachment_optima
# This is due to pretending to resolve stencil sample 0 using min
# This needs to be a blit shader instead, but that runs into problems since shader stencil export is optional
dEQP-VK.imageless_framebuffer.depth_stencil_resolve,Fail
# This needs D3D API changes to enable sampler heaps >= 4k entries, which is incoming
dEQP-VK.api.object_management.max_concurrent.sampler,Fail
+1
View File
@@ -4,3 +4,4 @@ dEQP-VK.dynamic_state.ds_state.stencil_params*
# Intermittent timeouts in CI.
dEQP-VK.api.device_init.create_instance_device_intentional_alloc_fail
dEQP-VK.memory.pipeline_barrier.host_write_vertex_buffer.1048576_vertex_buffer_stride_2
dEQP-VK.memory.pipeline_barrier.host_write_index_buffer.1048576
+37 -32
View File
@@ -113,6 +113,7 @@ dzn_physical_device_get_extensions(struct dzn_physical_device *pdev)
#ifdef DZN_USE_WSI_PLATFORM
.KHR_swapchain = true,
#endif
.EXT_descriptor_indexing = pdev->shader_model >= D3D_SHADER_MODEL_6_6,
.EXT_shader_subgroup_ballot = true,
.EXT_shader_subgroup_vote = true,
.EXT_subgroup_size_control = true,
@@ -1381,6 +1382,7 @@ dzn_GetPhysicalDeviceFeatures2(VkPhysicalDevice physicalDevice,
.shaderDrawParameters = true,
};
bool support_descriptor_indexing = pdev->shader_model >= D3D_SHADER_MODEL_6_6;
const VkPhysicalDeviceVulkan12Features core_1_2 = {
.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES,
.samplerMirrorClampToEdge = false,
@@ -1393,25 +1395,25 @@ dzn_GetPhysicalDeviceFeatures2(VkPhysicalDevice physicalDevice,
.shaderFloat16 = pdev->options4.Native16BitShaderOpsSupported,
.shaderInt8 = false,
.descriptorIndexing = false,
.descriptorIndexing = support_descriptor_indexing,
.shaderInputAttachmentArrayDynamicIndexing = true,
.shaderUniformTexelBufferArrayDynamicIndexing = true,
.shaderStorageTexelBufferArrayDynamicIndexing = true,
.shaderUniformBufferArrayNonUniformIndexing = false,
.shaderSampledImageArrayNonUniformIndexing = false,
.shaderStorageBufferArrayNonUniformIndexing = false,
.shaderStorageImageArrayNonUniformIndexing = false,
.shaderInputAttachmentArrayNonUniformIndexing = false,
.shaderUniformTexelBufferArrayNonUniformIndexing = false,
.shaderStorageTexelBufferArrayNonUniformIndexing = false,
.descriptorBindingUniformBufferUpdateAfterBind = false,
.descriptorBindingSampledImageUpdateAfterBind = false,
.descriptorBindingStorageImageUpdateAfterBind = false,
.descriptorBindingStorageBufferUpdateAfterBind = false,
.descriptorBindingUniformTexelBufferUpdateAfterBind = false,
.descriptorBindingStorageTexelBufferUpdateAfterBind = false,
.descriptorBindingUpdateUnusedWhilePending = false,
.descriptorBindingPartiallyBound = false,
.shaderUniformBufferArrayNonUniformIndexing = support_descriptor_indexing,
.shaderSampledImageArrayNonUniformIndexing = support_descriptor_indexing,
.shaderStorageBufferArrayNonUniformIndexing = support_descriptor_indexing,
.shaderStorageImageArrayNonUniformIndexing = support_descriptor_indexing,
.shaderInputAttachmentArrayNonUniformIndexing = support_descriptor_indexing,
.shaderUniformTexelBufferArrayNonUniformIndexing = support_descriptor_indexing,
.shaderStorageTexelBufferArrayNonUniformIndexing = support_descriptor_indexing,
.descriptorBindingUniformBufferUpdateAfterBind = support_descriptor_indexing,
.descriptorBindingSampledImageUpdateAfterBind = support_descriptor_indexing,
.descriptorBindingStorageImageUpdateAfterBind = support_descriptor_indexing,
.descriptorBindingStorageBufferUpdateAfterBind = support_descriptor_indexing,
.descriptorBindingUniformTexelBufferUpdateAfterBind = support_descriptor_indexing,
.descriptorBindingStorageTexelBufferUpdateAfterBind = support_descriptor_indexing,
.descriptorBindingUpdateUnusedWhilePending = support_descriptor_indexing,
.descriptorBindingPartiallyBound = support_descriptor_indexing,
.descriptorBindingVariableDescriptorCount = false,
.runtimeDescriptorArray = false,
@@ -1814,21 +1816,22 @@ dzn_GetPhysicalDeviceProperties2(VkPhysicalDevice physicalDevice,
.shaderInputAttachmentArrayNonUniformIndexingNative = true,
.robustBufferAccessUpdateAfterBind = true,
.quadDivergentImplicitLod = false,
.maxPerStageDescriptorUpdateAfterBindSamplers = 0,
.maxPerStageDescriptorUpdateAfterBindUniformBuffers = 0,
.maxPerStageDescriptorUpdateAfterBindStorageBuffers = 0,
.maxPerStageDescriptorUpdateAfterBindSampledImages = 0,
.maxPerStageDescriptorUpdateAfterBindStorageImages = 0,
.maxPerStageDescriptorUpdateAfterBindInputAttachments = 0,
.maxPerStageUpdateAfterBindResources = 0,
.maxDescriptorSetUpdateAfterBindSamplers = 0,
.maxDescriptorSetUpdateAfterBindUniformBuffers = 0,
.maxDescriptorSetUpdateAfterBindUniformBuffersDynamic = 0,
.maxDescriptorSetUpdateAfterBindStorageBuffers = 0,
.maxDescriptorSetUpdateAfterBindStorageBuffersDynamic = 0,
.maxDescriptorSetUpdateAfterBindSampledImages = 0,
.maxDescriptorSetUpdateAfterBindStorageImages = 0,
.maxDescriptorSetUpdateAfterBindInputAttachments = 0,
.maxUpdateAfterBindDescriptorsInAllPools = MAX_DESCS_PER_CBV_SRV_UAV_HEAP,
.maxPerStageDescriptorUpdateAfterBindSamplers = MAX_DESCS_PER_CBV_SRV_UAV_HEAP,
.maxPerStageDescriptorUpdateAfterBindUniformBuffers = MAX_DESCS_PER_CBV_SRV_UAV_HEAP,
.maxPerStageDescriptorUpdateAfterBindStorageBuffers = MAX_DESCS_PER_CBV_SRV_UAV_HEAP,
.maxPerStageDescriptorUpdateAfterBindSampledImages = MAX_DESCS_PER_CBV_SRV_UAV_HEAP,
.maxPerStageDescriptorUpdateAfterBindStorageImages = MAX_DESCS_PER_CBV_SRV_UAV_HEAP,
.maxPerStageDescriptorUpdateAfterBindInputAttachments = MAX_DESCS_PER_CBV_SRV_UAV_HEAP,
.maxPerStageUpdateAfterBindResources = MAX_DESCS_PER_CBV_SRV_UAV_HEAP,
.maxDescriptorSetUpdateAfterBindSamplers = MAX_DESCS_PER_CBV_SRV_UAV_HEAP,
.maxDescriptorSetUpdateAfterBindUniformBuffers = MAX_DESCS_PER_CBV_SRV_UAV_HEAP,
.maxDescriptorSetUpdateAfterBindUniformBuffersDynamic = MAX_DYNAMIC_UNIFORM_BUFFERS,
.maxDescriptorSetUpdateAfterBindStorageBuffers = MAX_DESCS_PER_CBV_SRV_UAV_HEAP,
.maxDescriptorSetUpdateAfterBindStorageBuffersDynamic = MAX_DYNAMIC_STORAGE_BUFFERS,
.maxDescriptorSetUpdateAfterBindSampledImages = MAX_DESCS_PER_CBV_SRV_UAV_HEAP,
.maxDescriptorSetUpdateAfterBindStorageImages = MAX_DESCS_PER_CBV_SRV_UAV_HEAP,
.maxDescriptorSetUpdateAfterBindInputAttachments = MAX_DESCS_PER_CBV_SRV_UAV_HEAP,
/* FIXME: add support for VK_RESOLVE_MODE_SAMPLE_ZERO_BIT,
* which is required by the VK 1.2 spec.
@@ -2364,7 +2367,9 @@ dzn_device_create(struct dzn_physical_device *pdev,
device->need_swapchain_blits = true;
}
device->bindless = (instance->debug_flags & DZN_DEBUG_BINDLESS) != 0;
device->bindless = (instance->debug_flags & DZN_DEBUG_BINDLESS) != 0 ||
device->vk.enabled_features.descriptorIndexing ||
device->vk.enabled_extensions.EXT_descriptor_indexing;
if (device->bindless) {
dzn_foreach_pool_type(type) {