From 6b22fff65811d0d5433ed1f1e82b9dec75baee8b Mon Sep 17 00:00:00 2001 From: M Henning Date: Sun, 21 Apr 2024 15:17:41 -0400 Subject: [PATCH] nvk: Don't use a descriptor cbuf if it's too large This fixes a test on vkd3d-proton commit 836446ce25 VKD3D_TEST_FILTER=test_typed_buffers_many_objects_dxil build/tests/d3d12 Fixes: f1c909edd5c9 ("nvk/nir: Add cbuf analysis to nvi_nir_lower_descriptors()") Part-of: --- src/nouveau/vulkan/nvk_nir_lower_descriptors.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/nouveau/vulkan/nvk_nir_lower_descriptors.c b/src/nouveau/vulkan/nvk_nir_lower_descriptors.c index 43b5b17f09f..74c9760c3bf 100644 --- a/src/nouveau/vulkan/nvk_nir_lower_descriptors.c +++ b/src/nouveau/vulkan/nvk_nir_lower_descriptors.c @@ -625,6 +625,9 @@ load_descriptor(nir_builder *b, unsigned num_components, unsigned bit_size, nir_iadd_imm(b, nir_imul_imm(b, index, binding_layout->stride), binding_layout->offset + offset_B); + uint64_t max_desc_ubo_offset = binding_layout->offset + + binding_layout->array_size * binding_layout->stride; + unsigned desc_align_mul = (1 << (ffs(binding_layout->stride) - 1)); desc_align_mul = MIN2(desc_align_mul, 16); unsigned desc_align_offset = binding_layout->offset + offset_B; @@ -637,7 +640,7 @@ load_descriptor(nir_builder *b, unsigned num_components, unsigned bit_size, int cbuf_idx = get_mapped_cbuf_idx(&cbuf_key, ctx); nir_def *desc; - if (cbuf_idx >= 0) { + if (cbuf_idx >= 0 && max_desc_ubo_offset <= NVK_MAX_CBUF_SIZE) { desc = nir_load_ubo(b, num_components, bit_size, nir_imm_int(b, cbuf_idx), desc_ubo_offset,