X-Git-Url: https://eleni.mutantstargoat.com/git/?p=demo;a=blobdiff_plain;f=src%2Fvulkan%2Fimage.cc;fp=src%2Fvulkan%2Fimage.cc;h=780bfa0d74e424d2fef5f9e26769e24ca189112e;hp=0000000000000000000000000000000000000000;hb=8fb0cca684e078cd2537070c53ad970ebbc2e9a7;hpb=32feb79dc3b9ddeeab84a0329d53b8aaff86bb80 diff --git a/src/vulkan/image.cc b/src/vulkan/image.cc new file mode 100644 index 0000000..780bfa0 --- /dev/null +++ b/src/vulkan/image.cc @@ -0,0 +1,36 @@ +#include +#include + +#include "allocator.h" +#include "image.h" +#include "vk.h" +#include "vkutil.h" + +bool vk_image_set_layout(VkCommandBuffer cmd_buf, VkImage img, VkImageAspectFlags aspect_flags, + VkImageLayout old_layout, VkImageLayout new_layout, VkAccessFlagBits access_mask) +{ + VkImageMemoryBarrier imb; + memset(&imb, 0, sizeof imb); + imb.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER; + imb.srcAccessMask = access_mask; + imb.oldLayout = old_layout; + imb.newLayout = new_layout; + imb.image = img; + imb.subresourceRange = {aspect_flags, 0, 1, 0, 1}; + + if(new_layout == VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL) { + imb.dstAccessMask = VK_ACCESS_TRANSFER_READ_BIT; + } else if (new_layout == VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL) { + imb.dstAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT; + } else if (new_layout == VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL) { + imb.dstAccessMask = VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT; + } else if (new_layout == VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL) { + imb.dstAccessMask = VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_INPUT_ATTACHMENT_READ_BIT; + } + + VkPipelineStageFlags src_stages = VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT; + VkPipelineStageFlags dst_stages = VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT; + + vkCmdPipelineBarrier(cmd_buf, src_stages, dst_stages, 0, 0, 0, 0, 0, 1, &imb); + return true; +}