From 5f43f866a2a67e9489e21e370fa28fea9269a25d Mon Sep 17 00:00:00 2001 From: Lionel Landwerlin Date: Fri, 21 Apr 2023 13:20:39 +0300 Subject: [PATCH] anv: enable shaderUniformBufferArrayNonUniformIndexing Signed-off-by: Lionel Landwerlin Reviewed-by: Emma Anholt Part-of: --- src/intel/vulkan/anv_device.c | 2 +- src/intel/vulkan/anv_nir_apply_pipeline_layout.c | 13 +++++++------ 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/intel/vulkan/anv_device.c b/src/intel/vulkan/anv_device.c index f82d870..5521586 100644 --- a/src/intel/vulkan/anv_device.c +++ b/src/intel/vulkan/anv_device.c @@ -1296,7 +1296,7 @@ void anv_GetPhysicalDeviceFeatures2( .shaderInputAttachmentArrayDynamicIndexing = false, .shaderUniformTexelBufferArrayDynamicIndexing = true, .shaderStorageTexelBufferArrayDynamicIndexing = true, - .shaderUniformBufferArrayNonUniformIndexing = false, + .shaderUniformBufferArrayNonUniformIndexing = true, .shaderSampledImageArrayNonUniformIndexing = true, .shaderStorageBufferArrayNonUniformIndexing = true, .shaderStorageImageArrayNonUniformIndexing = true, diff --git a/src/intel/vulkan/anv_nir_apply_pipeline_layout.c b/src/intel/vulkan/anv_nir_apply_pipeline_layout.c index 9194f98..4660cf2 100644 --- a/src/intel/vulkan/anv_nir_apply_pipeline_layout.c +++ b/src/intel/vulkan/anv_nir_apply_pipeline_layout.c @@ -730,6 +730,13 @@ try_lower_direct_buffer_intrinsic(nir_builder *b, nir_address_format addr_format = descriptor_address_format(desc, state); + /* Although we could lower non uniform binding table accesses with + * nir_opt_non_uniform_access, we might as well use an A64 message and + * avoid the loops inserted by that lowering pass. + */ + if (nir_intrinsic_access(intrin) & ACCESS_NON_UNIFORM) + return false; + if (nir_deref_mode_is(deref, nir_var_mem_ssbo)) { /* 64-bit atomics only support A64 messages so we can't lower them to * the index+offset model. @@ -738,12 +745,6 @@ try_lower_direct_buffer_intrinsic(nir_builder *b, !state->pdevice->info.has_lsc) return false; - /* Normal binding table-based messages can't handle non-uniform access - * so we have to fall back to A64. - */ - if (nir_intrinsic_access(intrin) & ACCESS_NON_UNIFORM) - return false; - if (!descriptor_has_bti(desc, state)) return false; -- 2.7.4