Image transition layout for presentation images

This commit is contained in:
2026-08-26 11:43:28 -07:00
parent 341b5cc91b
commit 9bc2831083
+8 -2
View File
@@ -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> 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> Image::Builder::build() {
result->sampler = this->device.get()->createSamplerUnique(samplerInfo);
}
log::trace("created vk::Image.");
return result;
}