diff options
author | Laszlo Agocs <laszlo.agocs@qt.io> | 2023-06-22 11:23:28 +0200 |
---|---|---|
committer | Laszlo Agocs <laszlo.agocs@qt.io> | 2023-06-26 21:28:24 +0200 |
commit | 2f619c2ddf5941b2733f055ee456290e5d204bca (patch) | |
tree | 4f0e2328515ea15973388076fdc5ee5c2e767d82 /src/gui/rhi/qrhivulkan.cpp | |
parent | 003c29511de5979fba526acd62f2a4c7c356b982 (diff) |
rhi: vulkan: Fix multisample resolve with multiview
Task-number: QTBUG-114790
Change-Id: I3afccc3f7ae2d05aa9aa0e0943aeadc080016f0e
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
Diffstat (limited to 'src/gui/rhi/qrhivulkan.cpp')
-rw-r--r-- | src/gui/rhi/qrhivulkan.cpp | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/src/gui/rhi/qrhivulkan.cpp b/src/gui/rhi/qrhivulkan.cpp index 484f304858..8f40ac192d 100644 --- a/src/gui/rhi/qrhivulkan.cpp +++ b/src/gui/rhi/qrhivulkan.cpp @@ -6723,6 +6723,7 @@ bool QVkTextureRenderTarget::create() QRHI_RES_RHI(QRhiVulkan); QVarLengthArray<VkImageView, 8> views; + uint32_t multiViewCount = 0; d.colorAttCount = 0; int attIndex = 0; @@ -6735,6 +6736,8 @@ bool QVkTextureRenderTarget::create() Q_ASSERT(texD->flags().testFlag(QRhiTexture::RenderTarget)); const bool is1D = texD->flags().testFlag(QRhiTexture::OneDimensional); const bool isMultiView = it->multiViewCount() >= 2; + if (isMultiView && multiViewCount == 0) + multiViewCount = uint32_t(it->multiViewCount()); VkImageViewCreateInfo viewInfo = {}; viewInfo.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO; viewInfo.image = texD->image; @@ -6795,6 +6798,7 @@ bool QVkTextureRenderTarget::create() d.resolveAttCount = 0; attIndex = 0; + Q_ASSERT(multiViewCount == 0 || multiViewCount >= 2); for (auto it = m_desc.cbeginColorAttachments(), itEnd = m_desc.cendColorAttachments(); it != itEnd; ++it, ++attIndex) { if (it->resolveTexture()) { QVkTexture *resTexD = QRHI_RES(QVkTexture, it->resolveTexture()); @@ -6804,7 +6808,8 @@ bool QVkTextureRenderTarget::create() VkImageViewCreateInfo viewInfo = {}; viewInfo.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO; viewInfo.image = resTexD->image; - viewInfo.viewType = VK_IMAGE_VIEW_TYPE_2D; + viewInfo.viewType = multiViewCount ? VK_IMAGE_VIEW_TYPE_2D_ARRAY + : VK_IMAGE_VIEW_TYPE_2D; viewInfo.format = resTexD->vkformat; viewInfo.components.r = VK_COMPONENT_SWIZZLE_R; viewInfo.components.g = VK_COMPONENT_SWIZZLE_G; @@ -6814,7 +6819,7 @@ bool QVkTextureRenderTarget::create() viewInfo.subresourceRange.baseMipLevel = uint32_t(it->resolveLevel()); viewInfo.subresourceRange.levelCount = 1; viewInfo.subresourceRange.baseArrayLayer = uint32_t(it->resolveLayer()); - viewInfo.subresourceRange.layerCount = 1; + viewInfo.subresourceRange.layerCount = qMax(1u, multiViewCount); VkResult err = rhiD->df->vkCreateImageView(rhiD->dev, &viewInfo, nullptr, &resrtv[attIndex]); if (err != VK_SUCCESS) { qWarning("Failed to create render target resolve image view: %d", err); |