71 VkImageMemoryBarrier image_memory_barrier = {};
72 image_memory_barrier.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER;
73 image_memory_barrier.pNext =
nullptr;
74 image_memory_barrier.srcAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT;
75 image_memory_barrier.dstAccessMask = VK_ACCESS_TRANSFER_READ_BIT;
76 image_memory_barrier.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
77 image_memory_barrier.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
78 image_memory_barrier.image =
data.vk_image;
79 image_memory_barrier.oldLayout = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL;
80 image_memory_barrier.newLayout = VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL;
81 image_memory_barrier.subresourceRange.aspectMask =
data.vk_image_aspect;
82 image_memory_barrier.subresourceRange.baseArrayLayer = 0;
83 image_memory_barrier.subresourceRange.layerCount =
data.layer_count;
84 image_memory_barrier.subresourceRange.baseMipLevel = 0;
85 image_memory_barrier.subresourceRange.levelCount = 1;
87 VkImageBlit image_blit = {};
88 image_blit.srcSubresource.aspectMask =
data.vk_image_aspect;
89 image_blit.srcSubresource.layerCount =
data.layer_count;
90 image_blit.srcSubresource.mipLevel = 1;
91 image_blit.dstSubresource.aspectMask =
data.vk_image_aspect;
92 image_blit.dstSubresource.layerCount =
data.layer_count;
93 image_blit.dstSubresource.mipLevel = 1;
97 int dst_mipmap = src_mipmap + 1;
98 int3 src_size = dst_size;
102 image_memory_barrier.subresourceRange.baseMipLevel = src_mipmap;
104 VK_PIPELINE_STAGE_TRANSFER_BIT,
105 VK_DEPENDENCY_BY_REGION_BIT,
111 &image_memory_barrier);
114 image_blit.srcSubresource.mipLevel = src_mipmap;
115 image_blit.srcOffsets[1] = {src_size.x, src_size.y, src_size.z};
116 image_blit.dstSubresource.mipLevel = dst_mipmap;
117 image_blit.dstOffsets[1] = {dst_size.x, dst_size.y, dst_size.z};
119 VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
121 VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
129 image_memory_barrier.subresourceRange.baseMipLevel = 0;
130 image_memory_barrier.subresourceRange.levelCount =
data.mipmaps - 1;
131 image_memory_barrier.oldLayout = VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL;
132 image_memory_barrier.newLayout = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL;
134 VK_PIPELINE_STAGE_TRANSFER_BIT,
135 VK_DEPENDENCY_BY_REGION_BIT,
141 &image_memory_barrier);