MCPcopy Create free account
hub / github.com/KhronosGroup/Vulkan-Hpp / setImageLayout

Function setImageLayout

samples/utils/utils.cpp:574–649  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

572 }
573
574 void setImageLayout(
575 vk::CommandBuffer const & commandBuffer, vk::Image image, vk::Format format, vk::ImageLayout oldImageLayout, vk::ImageLayout newImageLayout )
576 {
577 vk::AccessFlags sourceAccessMask;
578 switch ( oldImageLayout )
579 {
580 case vk::ImageLayout::eTransferDstOptimal: sourceAccessMask = vk::AccessFlagBits::eTransferWrite; break;
581 case vk::ImageLayout::ePreinitialized : sourceAccessMask = vk::AccessFlagBits::eHostWrite; break;
582 case vk::ImageLayout::eGeneral : // sourceAccessMask is empty
583 case vk::ImageLayout::eUndefined : break;
584 default : assert( false ); break;
585 }
586
587 vk::PipelineStageFlags sourceStage;
588 switch ( oldImageLayout )
589 {
590 case vk::ImageLayout::eGeneral:
591 case vk::ImageLayout::ePreinitialized : sourceStage = vk::PipelineStageFlagBits::eHost; break;
592 case vk::ImageLayout::eTransferDstOptimal: sourceStage = vk::PipelineStageFlagBits::eTransfer; break;
593 case vk::ImageLayout::eUndefined : sourceStage = vk::PipelineStageFlagBits::eTopOfPipe; break;
594 default : assert( false ); break;
595 }
596
597 vk::AccessFlags destinationAccessMask;
598 switch ( newImageLayout )
599 {
600 case vk::ImageLayout::eColorAttachmentOptimal: destinationAccessMask = vk::AccessFlagBits::eColorAttachmentWrite; break;
601 case vk::ImageLayout::eDepthStencilAttachmentOptimal:
602 destinationAccessMask = vk::AccessFlagBits::eDepthStencilAttachmentRead | vk::AccessFlagBits::eDepthStencilAttachmentWrite;
603 break;
604 case vk::ImageLayout::eGeneral: // empty destinationAccessMask
605 case vk::ImageLayout::ePresentSrcKHR : break;
606 case vk::ImageLayout::eShaderReadOnlyOptimal: destinationAccessMask = vk::AccessFlagBits::eShaderRead; break;
607 case vk::ImageLayout::eTransferSrcOptimal : destinationAccessMask = vk::AccessFlagBits::eTransferRead; break;
608 case vk::ImageLayout::eTransferDstOptimal : destinationAccessMask = vk::AccessFlagBits::eTransferWrite; break;
609 default : assert( false ); break;
610 }
611
612 vk::PipelineStageFlags destinationStage;
613 switch ( newImageLayout )
614 {
615 case vk::ImageLayout::eColorAttachmentOptimal : destinationStage = vk::PipelineStageFlagBits::eColorAttachmentOutput; break;
616 case vk::ImageLayout::eDepthStencilAttachmentOptimal: destinationStage = vk::PipelineStageFlagBits::eEarlyFragmentTests; break;
617 case vk::ImageLayout::eGeneral : destinationStage = vk::PipelineStageFlagBits::eHost; break;
618 case vk::ImageLayout::ePresentSrcKHR : destinationStage = vk::PipelineStageFlagBits::eBottomOfPipe; break;
619 case vk::ImageLayout::eShaderReadOnlyOptimal : destinationStage = vk::PipelineStageFlagBits::eFragmentShader; break;
620 case vk::ImageLayout::eTransferDstOptimal :
621 case vk::ImageLayout::eTransferSrcOptimal : destinationStage = vk::PipelineStageFlagBits::eTransfer; break;
622 default : assert( false ); break;
623 }
624
625 vk::ImageAspectFlags aspectMask;
626 if ( newImageLayout == vk::ImageLayout::eDepthStencilAttachmentOptimal )
627 {
628 aspectMask = vk::ImageAspectFlagBits::eDepth;
629 if ( format == vk::Format::eD32SfloatS8Uint || format == vk::Format::eD24UnormS8Uint )
630 {
631 aspectMask |= vk::ImageAspectFlagBits::eStencil;

Callers 6

setImageMethod · 0.70
mainFunction · 0.50
mainFunction · 0.50
mainFunction · 0.50
mainFunction · 0.50
mainFunction · 0.50

Calls

no outgoing calls

Tested by

no test coverage detected