MCPcopy Create free account
hub / github.com/cogentcore/core / Transition

Method Transition

vgpu/image.go:941–993  ·  view source on GitHub ↗

Transition transitions image to new layout

(cmd vk.CommandBuffer, format vk.Format, oldLayout, NewLayout vk.ImageLayout, srcStage, dstStage vk.PipelineStageFlagBits)

Source from the content-addressed store, hash-verified

939
940// Transition transitions image to new layout
941func (im *Image) Transition(cmd vk.CommandBuffer, format vk.Format, oldLayout, NewLayout vk.ImageLayout, srcStage, dstStage vk.PipelineStageFlagBits) {
942
943 imgMemBar := vk.ImageMemoryBarrier{
944 SType: vk.StructureTypeImageMemoryBarrier,
945 SrcQueueFamilyIndex: vk.QueueFamilyIgnored,
946 DstQueueFamilyIndex: vk.QueueFamilyIgnored,
947 OldLayout: oldLayout,
948 NewLayout: NewLayout,
949 Image: im.Image,
950 SubresourceRange: vk.ImageSubresourceRange{
951 AspectMask: vk.ImageAspectFlags(vk.ImageAspectColorBit),
952 LayerCount: uint32(im.Format.Layers),
953 LevelCount: 1,
954 },
955 }
956
957 switch NewLayout {
958 case vk.ImageLayoutTransferDstOptimal:
959 // make sure anything that was copying from this image has completed
960 imgMemBar.DstAccessMask = vk.AccessFlags(vk.AccessTransferWriteBit)
961
962 case vk.ImageLayoutColorAttachmentOptimal:
963 imgMemBar.DstAccessMask = vk.AccessFlags(vk.AccessColorAttachmentWriteBit)
964
965 case vk.ImageLayoutDepthStencilAttachmentOptimal:
966 imgMemBar.DstAccessMask = vk.AccessFlags(vk.AccessDepthStencilAttachmentWriteBit)
967
968 case vk.ImageLayoutShaderReadOnlyOptimal:
969 imgMemBar.DstAccessMask = vk.AccessFlags(vk.AccessShaderReadBit)
970 // | vk.AccessFlags(vk.AccessInputAttachmentReadBit)
971 if oldLayout == vk.ImageLayoutTransferDstOptimal {
972 imgMemBar.SrcAccessMask = vk.AccessFlags(vk.AccessTransferWriteBit)
973 }
974
975 case vk.ImageLayoutTransferSrcOptimal:
976 imgMemBar.DstAccessMask = vk.AccessFlags(vk.AccessTransferReadBit)
977
978 case vk.ImageLayoutPresentSrc:
979 imgMemBar.DstAccessMask = vk.AccessFlags(vk.AccessMemoryReadBit)
980
981 case vk.ImageLayoutGeneral:
982 if oldLayout == vk.ImageLayoutTransferDstOptimal {
983 imgMemBar.SrcAccessMask = vk.AccessFlags(vk.AccessTransferWriteBit)
984 }
985 imgMemBar.DstAccessMask = vk.AccessFlags(vk.AccessMemoryReadBit)
986
987 default:
988 imgMemBar.DstAccessMask = 0
989 }
990
991 vk.CmdPipelineBarrier(cmd, vk.PipelineStageFlags(srcStage), vk.PipelineStageFlags(dstStage),
992 0, 0, nil, 0, nil, 1, []vk.ImageMemoryBarrier{imgMemBar})
993}
994
995/////////////////////////////////////////////////////////////////////
996// HostImage

Callers 3

TransitionForDstMethod · 0.95
TransitionDstToShaderMethod · 0.95

Calls

no outgoing calls

Tested by

no test coverage detected