5 #define LOC QString("VulkanTex: ")
8 VkSampler Sampler, VkCommandBuffer CommandBuffer)
23 QImage *
Image, VkSampler Sampler,
24 VkCommandBuffer CommandBuffer)
32 auto datasize =
static_cast<VkDeviceSize
>((
Image->width() *
Image->height() *
Image->depth()) >> 3);
34 #if QT_VERSION >= QT_VERSION_CHECK(5,10,0)
39 if (datasize !=
static_cast<VkDeviceSize
>(datasize2))
40 LOG(VB_GENERAL, LOG_WARNING,
LOC +
"Inconsistent image data size");
42 const auto *data =
Image->constBits();
46 VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT |VK_MEMORY_PROPERTY_HOST_COHERENT_BIT,
49 LOG(VB_GENERAL, LOG_ERR,
LOC +
"Failed to create staging buffer");
54 void* memory =
nullptr;
56 memcpy(memory, data,
static_cast<size_t>(datasize));
61 VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_SAMPLED_BIT,
68 VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, commandbuffer);
70 static_cast<uint32_t
>(
Image->height()), commandbuffer);
72 VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, commandbuffer);
86 VkImageViewCreateInfo viewinfo { };
87 viewinfo.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO;
89 viewinfo.viewType = VK_IMAGE_VIEW_TYPE_2D;
90 viewinfo.format = VK_FORMAT_B8G8R8A8_UNORM;
91 viewinfo.subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
92 viewinfo.subresourceRange.baseMipLevel = 0;
93 viewinfo.subresourceRange.levelCount = 1;
94 viewinfo.subresourceRange.baseArrayLayer = 0;
95 viewinfo.subresourceRange.layerCount = 1;
97 LOG(VB_GENERAL, LOG_ERR,
LOC +
"Failed to create image view");
107 LOG(VB_GENERAL, LOG_ERR,
LOC +
"Failed to create texture image");
119 LOG(VB_GENERAL, LOG_WARNING,
LOC +
"Texture has not returned descriptor");
142 return {
m_sampler,
m_view, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL };