From a8ae971a9517c8d5f11464a5f932cc3a90b675a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Brooke?= Date: Wed, 9 Apr 2025 13:43:04 +0200 Subject: [PATCH] rhi: vulkan: be nicer when binding empty buffers vkUpdateDescriptorSets(): pDescriptorWrites[1].pBufferInfo[0].range is not VK_WHOLE_SIZE and is zero. The Vulkan spec states: If range is not equal to VK_WHOLE_SIZE, range must be greater than 0 (https://docs.vulkan.org/spec/latest/chapters/ descriptorsets.html#VUID-VkDescriptorBufferInfo-range-00341) As a drive-by, fix the wrong union member access. Change-Id: I511cddd25f91a117ff181fd64b77079e6946c94c Reviewed-by: Laszlo Agocs --- src/gui/rhi/qrhivulkan.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/gui/rhi/qrhivulkan.cpp b/src/gui/rhi/qrhivulkan.cpp index c0ade70bf7a..56195ddd692 100644 --- a/src/gui/rhi/qrhivulkan.cpp +++ b/src/gui/rhi/qrhivulkan.cpp @@ -3626,7 +3626,7 @@ void QRhiVulkan::updateShaderResourceBindings(QRhiShaderResourceBindings *srb) VkDescriptorBufferInfo bufInfo; bufInfo.buffer = bufD->m_type == QRhiBuffer::Dynamic ? bufD->buffers[currentFrameSlot] : bufD->buffers[0]; bufInfo.offset = b->u.ubuf.offset; - bufInfo.range = b->u.ubuf.maybeSize ? b->u.ubuf.maybeSize : bufD->m_size; + bufInfo.range = b->u.ubuf.maybeSize ? b->u.ubuf.maybeSize : VK_WHOLE_SIZE; // be nice and assert when we know the vulkan device would die a horrible death due to non-aligned reads Q_ASSERT(aligned(bufInfo.offset, ubufAlign) == bufInfo.offset); bufferInfoIndex = bufferInfos.size(); @@ -3721,8 +3721,8 @@ void QRhiVulkan::updateShaderResourceBindings(QRhiShaderResourceBindings *srb) bd.sbuf.generation = bufD->generation; VkDescriptorBufferInfo bufInfo; bufInfo.buffer = bufD->m_type == QRhiBuffer::Dynamic ? bufD->buffers[currentFrameSlot] : bufD->buffers[0]; - bufInfo.offset = b->u.ubuf.offset; - bufInfo.range = b->u.ubuf.maybeSize ? b->u.ubuf.maybeSize : bufD->m_size; + bufInfo.offset = b->u.sbuf.offset; + bufInfo.range = b->u.sbuf.maybeSize ? b->u.sbuf.maybeSize : VK_WHOLE_SIZE; bufferInfoIndex = bufferInfos.size(); bufferInfos.append(bufInfo); }