MCPcopy Create free account
hub / github.com/KhronosGroup/Vulkan-Tools / set_image_layout

Method set_image_layout

cube/cube.cpp:2999–3045  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2997}
2998
2999void Demo::set_image_layout(vk::Image image, vk::ImageAspectFlags aspectMask, vk::ImageLayout oldLayout, vk::ImageLayout newLayout,
3000 vk::AccessFlags srcAccessMask, vk::PipelineStageFlags src_stages, vk::PipelineStageFlags dest_stages) {
3001 assert(cmd);
3002
3003 auto DstAccessMask = [](vk::ImageLayout const &layout) {
3004 vk::AccessFlags flags;
3005
3006 switch (layout) {
3007 case vk::ImageLayout::eTransferDstOptimal:
3008 // Make sure anything that was copying from this image has
3009 // completed
3010 flags = vk::AccessFlagBits::eTransferWrite;
3011 break;
3012 case vk::ImageLayout::eColorAttachmentOptimal:
3013 flags = vk::AccessFlagBits::eColorAttachmentWrite;
3014 break;
3015 case vk::ImageLayout::eDepthStencilAttachmentOptimal:
3016 flags = vk::AccessFlagBits::eDepthStencilAttachmentWrite;
3017 break;
3018 case vk::ImageLayout::eShaderReadOnlyOptimal:
3019 // Make sure any Copy or CPU writes to image are flushed
3020 flags = vk::AccessFlagBits::eShaderRead | vk::AccessFlagBits::eInputAttachmentRead;
3021 break;
3022 case vk::ImageLayout::eTransferSrcOptimal:
3023 flags = vk::AccessFlagBits::eTransferRead;
3024 break;
3025 case vk::ImageLayout::ePresentSrcKHR:
3026 flags = vk::AccessFlagBits::eMemoryRead;
3027 break;
3028 default:
3029 break;
3030 }
3031
3032 return flags;
3033 };
3034
3035 cmd.pipelineBarrier(src_stages, dest_stages, vk::DependencyFlagBits(), {}, {},
3036 vk::ImageMemoryBarrier()
3037 .setSrcAccessMask(srcAccessMask)
3038 .setDstAccessMask(DstAccessMask(newLayout))
3039 .setOldLayout(oldLayout)
3040 .setNewLayout(newLayout)
3041 .setSrcQueueFamilyIndex(VK_QUEUE_FAMILY_IGNORED)
3042 .setDstQueueFamilyIndex(VK_QUEUE_FAMILY_IGNORED)
3043 .setImage(image)
3044 .setSubresourceRange(vk::ImageSubresourceRange(aspectMask, 0, 1, 0, 1)));
3045}
3046
3047void Demo::update_data_buffer(void *uniform_memory_ptr) {
3048 mat4x4 VP;

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected