diff --git a/engine/src/image.cpp b/engine/src/image.cpp index baad2f9..00ff258 100644 --- a/engine/src/image.cpp +++ b/engine/src/image.cpp @@ -63,6 +63,12 @@ void Image::transitionLayout(vk::CommandBuffer commandBuffer, barrier.dstAccessMask = {}; srcStage = vk::PipelineStageFlagBits::eColorAttachmentOutput; dstStage = vk::PipelineStageFlagBits::eBottomOfPipe; + } else if (this->layout == vk::ImageLayout::ePresentSrcKHR && + newLayout == vk::ImageLayout::eColorAttachmentOptimal) { + barrier.srcAccessMask = {}; + barrier.dstAccessMask = vk::AccessFlagBits::eColorAttachmentWrite; + srcStage = vk::PipelineStageFlagBits::eTopOfPipe; + dstStage = vk::PipelineStageFlagBits::eColorAttachmentOutput; } else { log::fatal("Unsupported image layout transition."); throw std::runtime_error("Unsupported image layout transition."); @@ -269,7 +275,8 @@ std::unique_ptr Image::Builder::build() { region.imageExtent = this->extent; vk::CommandBuffer commandBuffer = this->device.beginSingleTimeCommands(); - result->transitionLayout(commandBuffer, vk::ImageLayout::eTransferDstOptimal); + result->transitionLayout(commandBuffer, + vk::ImageLayout::eTransferDstOptimal); commandBuffer.copyBufferToImage(stagingBuffer, result->get(), vk::ImageLayout::eTransferDstOptimal, region); @@ -317,7 +324,6 @@ std::unique_ptr Image::Builder::build() { result->sampler = this->device.get()->createSamplerUnique(samplerInfo); } - log::trace("created vk::Image."); return result; }