Transition transitions image to new layout
(cmd vk.CommandBuffer, format vk.Format, oldLayout, NewLayout vk.ImageLayout, srcStage, dstStage vk.PipelineStageFlagBits)
| 939 | |
| 940 | // Transition transitions image to new layout |
| 941 | func (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 |
no outgoing calls
no test coverage detected