From 5b2a2bbf726671d33211b38eb278faf9e657408d Mon Sep 17 00:00:00 2001 From: Georg Hagen Date: Sun, 7 Jul 2024 11:58:52 +0200 Subject: [PATCH] Fix swap chain images being in wrong state (Fixes #23) --- openVulkanoCpp/Vulkan/SwapChain.cpp | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/openVulkanoCpp/Vulkan/SwapChain.cpp b/openVulkanoCpp/Vulkan/SwapChain.cpp index 6f8f565..a86ba33 100644 --- a/openVulkanoCpp/Vulkan/SwapChain.cpp +++ b/openVulkanoCpp/Vulkan/SwapChain.cpp @@ -116,13 +116,18 @@ namespace OpenVulkano::Vulkan auto swapChainImages = device->device.getSwapchainImagesKHR(swapChain); images.resize(swapChainImages.size()); - for (uint32_t i = 0; i < swapChainImages.size(); i++) - { - images[i].image = swapChainImages[i]; - imgViewCreateInfo.image = swapChainImages[i]; - images[i].view = device->device.createImageView(imgViewCreateInfo); - images[i].fence = device->device.createFence({ vk::FenceCreateFlags(vk::FenceCreateFlagBits::eSignaled)}); - } + device->ExecuteNow([&](auto cmdBuffer) { + for (uint32_t i = 0; i < swapChainImages.size(); i++) + { + images[i].image = swapChainImages[i]; + imgViewCreateInfo.image = swapChainImages[i]; + images[i].view = device->device.createImageView(imgViewCreateInfo); + images[i].fence = device->device.createFence({vk::FenceCreateFlags(vk::FenceCreateFlagBits::eSignaled)}); + + const vk::ImageMemoryBarrier imgMemBarrier({}, vk::AccessFlagBits::eTransferWrite, vk::ImageLayout::eUndefined, vk::ImageLayout::ePresentSrcKHR, 0, 0, images[i].image, vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eColor, 0, 1, 0, 1)); + cmdBuffer.pipelineBarrier(vk::PipelineStageFlagBits::eTopOfPipe, vk::PipelineStageFlagBits::eTransfer, {}, nullptr, nullptr, imgMemBarrier); + } + }); } void SwapChain::DestroySwapChain()