Image transition layout for presentation images
This commit is contained in:
@@ -63,6 +63,12 @@ void Image::transitionLayout(vk::CommandBuffer commandBuffer,
|
|||||||
barrier.dstAccessMask = {};
|
barrier.dstAccessMask = {};
|
||||||
srcStage = vk::PipelineStageFlagBits::eColorAttachmentOutput;
|
srcStage = vk::PipelineStageFlagBits::eColorAttachmentOutput;
|
||||||
dstStage = vk::PipelineStageFlagBits::eBottomOfPipe;
|
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 {
|
} else {
|
||||||
log::fatal("Unsupported image layout transition.");
|
log::fatal("Unsupported image layout transition.");
|
||||||
throw std::runtime_error("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;
|
region.imageExtent = this->extent;
|
||||||
|
|
||||||
vk::CommandBuffer commandBuffer = this->device.beginSingleTimeCommands();
|
vk::CommandBuffer commandBuffer = this->device.beginSingleTimeCommands();
|
||||||
result->transitionLayout(commandBuffer, vk::ImageLayout::eTransferDstOptimal);
|
result->transitionLayout(commandBuffer,
|
||||||
|
vk::ImageLayout::eTransferDstOptimal);
|
||||||
commandBuffer.copyBufferToImage(stagingBuffer, result->get(),
|
commandBuffer.copyBufferToImage(stagingBuffer, result->get(),
|
||||||
vk::ImageLayout::eTransferDstOptimal,
|
vk::ImageLayout::eTransferDstOptimal,
|
||||||
region);
|
region);
|
||||||
@@ -317,7 +324,6 @@ std::unique_ptr<Image> Image::Builder::build() {
|
|||||||
result->sampler = this->device.get()->createSamplerUnique(samplerInfo);
|
result->sampler = this->device.get()->createSamplerUnique(samplerInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
log::trace("created vk::Image.");
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user