@@ -575,6 +575,12 @@ void vsg::transferImageData(ref_ptr<ImageView> imageView, VkImageLayout targetIm
575575 auto vk_image = image->vk (device->deviceID );
576576 auto aspectMask = imageView->subresourceRange .aspectMask ;
577577
578+ // Stage which the associated image will be used, such as set by DescriptorSetLayoutBinding::stageFlags
579+ // Further info:
580+ // https://docs.vulkan.org/refpages/latest/refpages/source/VkPipelineStageFlags.html
581+ // https://registry.khronos.org/VulkanSC/specs/1.0-extensions/man/html/VkDescriptorSetLayoutBinding.html
582+ VkPipelineStageFlags dstStageMask = VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT;
583+
578584 uint32_t faceWidth = width;
579585 uint32_t faceHeight = height;
580586 uint32_t faceDepth = depth;
@@ -816,7 +822,7 @@ void vsg::transferImageData(ref_ptr<ImageView> imageView, VkImageLayout targetIm
816822 barrier.dstAccessMask = VK_ACCESS_SHADER_READ_BIT;
817823
818824 vkCmdPipelineBarrier (commandBuffer,
819- VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT , 0 ,
825+ VK_PIPELINE_STAGE_TRANSFER_BIT, dstStageMask , 0 ,
820826 0 , nullptr ,
821827 0 , nullptr ,
822828 1 , &barrier);
@@ -833,7 +839,7 @@ void vsg::transferImageData(ref_ptr<ImageView> imageView, VkImageLayout targetIm
833839 barrier.dstAccessMask = VK_ACCESS_SHADER_READ_BIT;
834840
835841 vkCmdPipelineBarrier (commandBuffer,
836- VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT , 0 ,
842+ VK_PIPELINE_STAGE_TRANSFER_BIT, dstStageMask , 0 ,
837843 0 , nullptr ,
838844 0 , nullptr ,
839845 1 , &barrier);
@@ -856,7 +862,7 @@ void vsg::transferImageData(ref_ptr<ImageView> imageView, VkImageLayout targetIm
856862 postCopyBarrier.subresourceRange .baseMipLevel = 0 ;
857863
858864 vkCmdPipelineBarrier (commandBuffer,
859- VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT , 0 ,
865+ VK_PIPELINE_STAGE_TRANSFER_BIT, dstStageMask , 0 ,
860866 0 , nullptr ,
861867 0 , nullptr ,
862868 1 , &postCopyBarrier);
0 commit comments