zink: adjust bindless texel buffer handle before indexing
authorMike Blumenkrantz <michael.blumenkrantz@gmail.com>
Tue, 9 May 2023 23:28:18 +0000 (19:28 -0400)
committerMike Blumenkrantz <michael.blumenkrantz@gmail.com>
Tue, 9 May 2023 23:29:50 +0000 (19:29 -0400)
buffer handle ids are offset by ZINK_MAX_BINDLESS_HANDLES, but the actual
index is zero-based

Fixes: 99ba529feed ("zink: implement descriptor buffer handling of bindless texture")
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22931>

src/gallium/drivers/zink/zink_descriptors.c

index a6daa38..696b2a3 100644 (file)
@@ -1781,7 +1781,7 @@ zink_descriptors_update_bindless(struct zink_context *ctx)
             if (is_buffer) {
                size_t size = i ? screen->info.db_props.robustStorageTexelBufferDescriptorSize : screen->info.db_props.robustUniformTexelBufferDescriptorSize;
                info.type = i ? VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER : VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER;
-               info.data.pSampler = (void*)&ctx->di.bindless[i].db.buffer_infos[handle];
+               info.data.pSampler = (void*)&ctx->di.bindless[i].db.buffer_infos[handle - ZINK_MAX_BINDLESS_HANDLES];
                VKSCR(GetDescriptorEXT)(screen->dev, &info, size, ctx->dd.db.bindless_db_map + ctx->dd.db.bindless_db_offsets[binding] + handle * size);
             } else {
                info.type = i ? VK_DESCRIPTOR_TYPE_STORAGE_IMAGE : VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER;