nvk: Claim shaderUniformBufferArrayNonUniformIndexingNative

"Native" is relative for UBOs.  On the one hand, we don't loop in the
shader for non-uniform UBO access ever.  On the other hand, uniformity
does affect UBOs on Turing since we can only use bindless UBOs if the
handle (and therefore the loaded descriptor) are uniform.  But if it's
non-uniform, we fall back to ld.constant which is pretty fast.  On
Volta and earlier where we don't have bindless UBOs, we use ld.uniform
or ld.ci which are just as fast uniform as non.  On all hardware,
non-constant UBO indexing prevents cbuf promotion so that's always
slower no matter what.

The moral of the story is that "native" non-uniform for UBOs is a
nonsense anyway and we should just set NonUniformIndexingNative so we
don't scare apps into doing something silly.  The proprietary driver
claims native non-uniform UBOs as well.

Reviewed-by: Mel Henning <mhenning@darkrefraction.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/35268>
This commit is contained in:
Faith Ekstrand 2025-05-30 22:44:48 -04:00 committed by Marge Bot
parent a8b309f1cf
commit c37bcd43fc

View file

@ -887,7 +887,7 @@ nvk_get_device_properties(const struct nvk_instance *instance,
.shaderRoundingModeRTZFloat32 = true,
.shaderRoundingModeRTZFloat64 = true,
.maxUpdateAfterBindDescriptorsInAllPools = UINT32_MAX,
.shaderUniformBufferArrayNonUniformIndexingNative = false,
.shaderUniformBufferArrayNonUniformIndexingNative = true,
.shaderSampledImageArrayNonUniformIndexingNative = info->cls_eng3d >= TURING_A,
.shaderStorageBufferArrayNonUniformIndexingNative = true,
.shaderStorageImageArrayNonUniformIndexingNative = info->cls_eng3d >= TURING_A,