28 vk::ImageCreateInfo imageInfo;
29 imageInfo.setImageType(vk::ImageType::e2D);
32 imageInfo.setMipLevels(1);
33 imageInfo.setArrayLayers(1);
35 imageInfo.setTiling(vk::ImageTiling::eOptimal);
36 vk::ImageUsageFlags usageFlags;
39 usageFlags |= vk::ImageUsageFlagBits::eSampled | vk::ImageUsageFlagBits::eTransferDst;
43 usageFlags |= vk::ImageUsageFlagBits::eColorAttachment |
44 vk::ImageUsageFlagBits::eTransferSrc |
45 vk::ImageUsageFlagBits::eSampled;
49 usageFlags |= vk::ImageUsageFlagBits::eDepthStencilAttachment;
51 if (!(usageFlags & vk::ImageUsageFlagBits::eTransferDst)) {
52 usageFlags |= vk::ImageUsageFlagBits::eTransferDst;
54 imageInfo.setUsage(usageFlags);
55 imageInfo.setSharingMode(vk::SharingMode::eExclusive);
56 imageInfo.setInitialLayout(vk::ImageLayout::eUndefined);
61 vk::MemoryRequirements memRequirements =
m_ctx->getDevice().getImageMemoryRequirements(
m_image);
63 vk::MemoryAllocateInfo allocInfo;
64 allocInfo.setAllocationSize(memRequirements.size);
65 allocInfo.setMemoryTypeIndex(
m_ctx->findMemoryType(
66 memRequirements.memoryTypeBits,
67 vk::MemoryPropertyFlagBits::eDeviceLocal));
79 catch (
const std::exception& e) {
80 ferr <<
"Failed to create Vulkan image: " << e.what() << std::endl;