@breif Copy one texel data from a VkImage.
The temp buffer image date copy to.
Instance a VkBufferImageCopy.
Use Custom Cmd.
Write data to stagingbuffer.
The temp buffer image date copy to.
Instance a VkBufferImageCopy.
Use Custom Cmd.
Write data to stagingbuffer.
437 {
439
440 uint32_t channelize = 4;
441
446 {
447 case VK_FORMAT_B8G8R8A8_UNORM:
448 channelize = 4;
449 break;
450 case VK_FORMAT_R32_SFLOAT:
451 channelize = 4;
452 break;
453 case VK_FORMAT_R32G32B32A32_SFLOAT:
454 channelize = 16;
455 break;
456 default:
457 break;
458 }
459
463 VulkanBuffer stagingBuffer(
465 "StagingBuffer",
466 channelize,
467 VK_BUFFER_USAGE_TRANSFER_DST_BIT,
468 VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT
469 );
470
471
472
473
476 VK_IMAGE_LAYOUT_UNDEFINED,
477 VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL
478 );
479
483 VkBufferImageCopy region{};
484 region.bufferOffset = 0;
485 region.bufferRowLength = 0;
486 region.bufferImageHeight = 0;
487
488 region.imageSubresource.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
489 region.imageSubresource.mipLevel = 0;
490 region.imageSubresource.baseArrayLayer = 0;
491 region.imageSubresource.layerCount =
m_Layers;
492
493 region.imageOffset.x = static_cast<int32_t>(x);
494 region.imageOffset.y = static_cast<int32_t>(y);
495 region.imageExtent = { 1, 1, 1 };
496
501 vkCmdCopyImageToBuffer(commandBuffer,
m_Image, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, stagingBuffer.Get(), 1, ®ion);
502 });
503
504
505
506
507
508
509
512 VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
513 VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL
514 );
515
519 stagingBuffer.WriteFromBuffer(out_rgba);
520 }
#define SPICES_PROFILE_ZONE
static void CustomGraphicCmd(VulkanState &vulkanState, T func)
Create a new command buffer and record custom cmd, submit to graphic queue, execute it immediately.
VkFormat m_Format
The image format.
void TransitionImageLayout(VkFormat format, VkImageLayout oldLayout, VkImageLayout newLayout)
VkImage m_Image
The VkImage this Class Wrapped.
uint32_t m_Layers
Image layer(texture cube: 6).
VulkanState & m_VulkanState
The global VulkanState Referenced from VulkanRenderBackend.