27 vk::ImageCreateInfo imageInfo;
28 imageInfo.setImageType(vk::ImageType::e2D);
31 imageInfo.setMipLevels(1);
32 imageInfo.setArrayLayers(1);
34 imageInfo.setTiling(vk::ImageTiling::eOptimal);
35 vk::ImageUsageFlags usageFlags;
38 usageFlags |= vk::ImageUsageFlagBits::eSampled | vk::ImageUsageFlagBits::eTransferDst;
42 usageFlags |= vk::ImageUsageFlagBits::eColorAttachment |
43 vk::ImageUsageFlagBits::eTransferSrc |
44 vk::ImageUsageFlagBits::eSampled;
48 usageFlags |= vk::ImageUsageFlagBits::eDepthStencilAttachment;
50 if (!(usageFlags & vk::ImageUsageFlagBits::eTransferDst)) {
51 usageFlags |= vk::ImageUsageFlagBits::eTransferDst;
53 imageInfo.setUsage(usageFlags);
54 imageInfo.setSharingMode(vk::SharingMode::eExclusive);
55 imageInfo.setInitialLayout(vk::ImageLayout::eUndefined);
60 vk::MemoryRequirements memRequirements =
m_ctx->getDevice().getImageMemoryRequirements(
m_image);
62 vk::MemoryAllocateInfo allocInfo;
63 allocInfo.setAllocationSize(memRequirements.size);
64 allocInfo.setMemoryTypeIndex(
m_ctx->findMemoryType(
65 memRequirements.memoryTypeBits,
66 vk::MemoryPropertyFlagBits::eDeviceLocal));
78 catch (
const std::exception& e) {
79 ferr <<
"Failed to create Vulkan image: " << e.what() << std::endl;