MCPcopy Create free account
hub / github.com/InoriRus/Kyty / UtilImageToImage

Function UtilImageToImage

source/emulator/src/Graphics/Utils.cpp:186–228  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

184}
185
186void UtilImageToImage(CommandBuffer* buffer, const Vector<ImageImageCopy>& regions, VulkanImage* dst_image, uint64_t dst_layout)
187{
188 EXIT_IF(dst_image == nullptr);
189 EXIT_IF(dst_image->image == nullptr);
190
191 auto* vk_buffer = buffer->GetPool()->buffers[buffer->GetIndex()];
192
193 EXIT_NOT_IMPLEMENTED(regions.Size() >= 16);
194
195 set_image_layout(vk_buffer, dst_image, 0, VK_REMAINING_MIP_LEVELS, VK_IMAGE_ASPECT_COLOR_BIT, VK_IMAGE_LAYOUT_UNDEFINED,
196 VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL);
197
198 for (const auto& r: regions)
199 {
200 VkImageCopy region;
201
202 auto src_layout = r.src_image->layout;
203
204 region.srcSubresource.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
205 region.srcSubresource.mipLevel = r.src_level;
206 region.srcSubresource.baseArrayLayer = 0;
207 region.srcSubresource.layerCount = 1;
208 region.srcOffset = {r.src_x, r.src_y, 0};
209 region.dstSubresource.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
210 region.dstSubresource.mipLevel = r.dst_level;
211 region.dstSubresource.baseArrayLayer = 0;
212 region.dstSubresource.layerCount = 1;
213 region.dstOffset = {r.dst_x, r.dst_y, 0};
214 region.extent = {r.width, r.height, 1};
215
216 set_image_layout(vk_buffer, r.src_image, r.src_level, 1, VK_IMAGE_ASPECT_COLOR_BIT, src_layout,
217 VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL);
218
219 vkCmdCopyImage(vk_buffer, r.src_image->image, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, dst_image->image,
220 VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1, &region);
221
222 set_image_layout(vk_buffer, r.src_image, r.src_level, 1, VK_IMAGE_ASPECT_COLOR_BIT, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
223 src_layout);
224 }
225
226 set_image_layout(vk_buffer, dst_image, 0, VK_REMAINING_MIP_LEVELS, VK_IMAGE_ASPECT_COLOR_BIT, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
227 static_cast<VkImageLayout>(dst_layout));
228}
229
230void UtilBlitImage(CommandBuffer* buffer, VulkanImage* src_image, VulkanSwapchain* dst_swapchain)
231{

Callers 3

UtilFillImageFunction · 0.85
update2_funcFunction · 0.85
update2_funcFunction · 0.85

Calls 4

set_image_layoutFunction · 0.85
GetPoolMethod · 0.45
GetIndexMethod · 0.45
SizeMethod · 0.45

Tested by

no test coverage detected