summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAurĂ©lien Brooke <[email protected]>2025-04-09 13:43:04 +0200
committerAurĂ©lien Brooke <[email protected]>2025-04-10 15:10:00 +0200
commita8ae971a9517c8d5f11464a5f932cc3a90b675a8 (patch)
tree9c1fffc382fe1aba3dc69e81e0b6ffffb1ef7a0b
parenta95c568908491286ffd0050f913c29dcbd408013 (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.cpp6
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);
}