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

Function UtilBufferToImage

source/emulator/src/Graphics/Utils.cpp:87–116  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

85}
86
87void UtilBufferToImage(CommandBuffer* buffer, VulkanBuffer* src_buffer, uint32_t src_pitch, VulkanImage* dst_image, uint64_t dst_layout)
88{
89 EXIT_IF(src_buffer == nullptr);
90 EXIT_IF(src_buffer->buffer == nullptr);
91 EXIT_IF(dst_image == nullptr);
92 EXIT_IF(dst_image->image == nullptr);
93
94 auto* vk_buffer = buffer->GetPool()->buffers[buffer->GetIndex()];
95
96 set_image_layout(vk_buffer, dst_image, 0, 1, VK_IMAGE_ASPECT_COLOR_BIT, VK_IMAGE_LAYOUT_UNDEFINED,
97 VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL);
98
99 VkBufferImageCopy region {};
100 region.bufferOffset = 0;
101 region.bufferRowLength = (src_pitch != dst_image->extent.width ? src_pitch : 0);
102 region.bufferImageHeight = 0;
103
104 region.imageSubresource.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
105 region.imageSubresource.mipLevel = 0;
106 region.imageSubresource.baseArrayLayer = 0;
107 region.imageSubresource.layerCount = 1;
108
109 region.imageOffset = {0, 0, 0};
110 region.imageExtent = {dst_image->extent.width, dst_image->extent.height, 1};
111
112 vkCmdCopyBufferToImage(vk_buffer, src_buffer->buffer, dst_image->image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1, &region);
113
114 set_image_layout(vk_buffer, dst_image, 0, 1, VK_IMAGE_ASPECT_COLOR_BIT, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
115 static_cast<VkImageLayout>(dst_layout));
116}
117
118void UtilImageToBuffer(CommandBuffer* buffer, VulkanImage* src_image, VulkanBuffer* dst_buffer, uint32_t dst_pitch, uint64_t src_layout)
119{

Callers 1

UtilFillImageFunction · 0.85

Calls 4

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

Tested by

no test coverage detected