diff options
author | Aurélien Brooke <[email protected]> | 2025-04-09 13:43:04 +0200 |
---|---|---|
committer | Aurélien Brooke <[email protected]> | 2025-04-10 15:10:00 +0200 |
commit | a8ae971a9517c8d5f11464a5f932cc3a90b675a8 (patch) | |
tree | 9c1fffc382fe1aba3dc69e81e0b6ffffb1ef7a0b | |
parent | a95c568908491286ffd0050f913c29dcbd408013 (diff) |
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 <[email protected]>
-rw-r--r-- | src/gui/rhi/qrhivulkan.cpp | 6 |
1 files 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); } |