mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-05-29 13:20:54 +00:00
Add helper for uploading data into an image
This commit is contained in:
@@ -160,6 +160,9 @@ void main()
|
||||
|
||||
uploadBuf.upload(rgba8.data.data(), rgba8.data.size() * sizeof(uint32_t));
|
||||
|
||||
uploadBufferToImage(smiley.image, {rgba8.width, rgba8.height, 1}, uploadBuf.buffer,
|
||||
VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL);
|
||||
|
||||
{
|
||||
VkCommandBuffer cmd = GetCommandBuffer();
|
||||
|
||||
@@ -167,23 +170,6 @@ void main()
|
||||
|
||||
vkh::cmdPipelineBarrier(
|
||||
cmd, {
|
||||
vkh::ImageMemoryBarrier(0, VK_ACCESS_TRANSFER_WRITE_BIT, VK_IMAGE_LAYOUT_UNDEFINED,
|
||||
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, smiley.image),
|
||||
});
|
||||
|
||||
VkBufferImageCopy copy = {};
|
||||
copy.imageExtent = {rgba8.width, rgba8.height, 1};
|
||||
copy.imageSubresource.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
|
||||
copy.imageSubresource.layerCount = 1;
|
||||
|
||||
vkCmdCopyBufferToImage(cmd, uploadBuf.buffer, smiley.image,
|
||||
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1, ©);
|
||||
|
||||
vkh::cmdPipelineBarrier(
|
||||
cmd, {
|
||||
vkh::ImageMemoryBarrier(VK_ACCESS_TRANSFER_WRITE_BIT, VK_ACCESS_SHADER_READ_BIT,
|
||||
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
|
||||
VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, smiley.image),
|
||||
vkh::ImageMemoryBarrier(0, VK_ACCESS_SHADER_READ_BIT, VK_IMAGE_LAYOUT_UNDEFINED,
|
||||
VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, badimg.image),
|
||||
});
|
||||
@@ -191,8 +177,6 @@ void main()
|
||||
vkEndCommandBuffer(cmd);
|
||||
|
||||
Submit(99, 99, {cmd});
|
||||
|
||||
vkDeviceWaitIdle(device);
|
||||
}
|
||||
|
||||
Vec4f flags = {};
|
||||
@@ -311,39 +295,7 @@ void main()
|
||||
|
||||
uploadBuf.upload(checker);
|
||||
|
||||
{
|
||||
VkCommandBuffer cmd = GetCommandBuffer();
|
||||
|
||||
vkBeginCommandBuffer(cmd, vkh::CommandBufferBeginInfo());
|
||||
|
||||
vkh::cmdPipelineBarrier(
|
||||
cmd,
|
||||
{
|
||||
vkh::ImageMemoryBarrier(0, VK_ACCESS_TRANSFER_WRITE_BIT, VK_IMAGE_LAYOUT_UNDEFINED,
|
||||
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, img),
|
||||
});
|
||||
|
||||
VkBufferImageCopy copy = {};
|
||||
copy.imageExtent = {4, 4, 1};
|
||||
copy.imageSubresource.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
|
||||
copy.imageSubresource.layerCount = 1;
|
||||
|
||||
vkCmdCopyBufferToImage(cmd, uploadBuf.buffer, img, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1,
|
||||
©);
|
||||
|
||||
vkh::cmdPipelineBarrier(
|
||||
cmd, {
|
||||
vkh::ImageMemoryBarrier(VK_ACCESS_TRANSFER_WRITE_BIT, VK_ACCESS_SHADER_READ_BIT,
|
||||
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
|
||||
VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, img),
|
||||
});
|
||||
|
||||
vkEndCommandBuffer(cmd);
|
||||
|
||||
Submit(99, 99, {cmd});
|
||||
|
||||
vkDeviceWaitIdle(device);
|
||||
}
|
||||
uploadBufferToImage(img, {4, 4, 1}, uploadBuf.buffer, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL);
|
||||
|
||||
return mem;
|
||||
};
|
||||
|
||||
@@ -797,6 +797,39 @@ void VulkanGraphicsTest::blitToSwap(VkCommandBuffer cmd, VkImage src, VkImageLay
|
||||
vkCmdBlitImage(cmd, src, srcLayout, dst, dstLayout, 1, ®ion, VK_FILTER_LINEAR);
|
||||
}
|
||||
|
||||
void VulkanGraphicsTest::uploadBufferToImage(VkImage destImage, VkExtent3D destExtent,
|
||||
VkBuffer srcBuffer, VkImageLayout finalLayout)
|
||||
{
|
||||
VkCommandBuffer cmd = GetCommandBuffer();
|
||||
|
||||
vkBeginCommandBuffer(cmd, vkh::CommandBufferBeginInfo());
|
||||
|
||||
vkh::cmdPipelineBarrier(
|
||||
cmd, {
|
||||
vkh::ImageMemoryBarrier(0, VK_ACCESS_TRANSFER_WRITE_BIT, VK_IMAGE_LAYOUT_UNDEFINED,
|
||||
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, destImage),
|
||||
});
|
||||
|
||||
VkBufferImageCopy copy = {};
|
||||
copy.imageExtent = destExtent;
|
||||
copy.imageSubresource.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
|
||||
copy.imageSubresource.layerCount = 1;
|
||||
|
||||
vkCmdCopyBufferToImage(cmd, srcBuffer, destImage, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1, ©);
|
||||
|
||||
vkh::cmdPipelineBarrier(
|
||||
cmd, {
|
||||
vkh::ImageMemoryBarrier(VK_ACCESS_TRANSFER_WRITE_BIT, VK_ACCESS_SHADER_READ_BIT,
|
||||
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, finalLayout, destImage),
|
||||
});
|
||||
|
||||
vkEndCommandBuffer(cmd);
|
||||
|
||||
Submit(99, 99, {cmd});
|
||||
|
||||
vkDeviceWaitIdle(device);
|
||||
}
|
||||
|
||||
void VulkanGraphicsTest::pushMarker(VkQueue q, const std::string &name)
|
||||
{
|
||||
if(vkQueueBeginDebugUtilsLabelEXT)
|
||||
|
||||
@@ -208,6 +208,9 @@ struct VulkanGraphicsTest : public GraphicsTest
|
||||
void blitToSwap(VkCommandBuffer cmd, VkImage src, VkImageLayout srcLayout, VkImage dst,
|
||||
VkImageLayout dstLayout);
|
||||
|
||||
void uploadBufferToImage(VkImage destImage, VkExtent3D destExtent, VkBuffer srcBuffer,
|
||||
VkImageLayout finalLayout);
|
||||
|
||||
template <typename T>
|
||||
void setName(T obj, const std::string &name);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user