Is there actually any remaining use for VK_PIPELINE_STAGE_2_TRANSFER_BIT_KHR? Or can
VK_PIPELINE_STAGE_2_COPY_BIT_KHR
VK_PIPELINE_STAGE_2_BLIT_BIT_KHR
VK_PIPELINE_STAGE_2_RESOLVE_BIT_KHR
VK_PIPELINE_STAGE_2_CLEAR_BIT_KHR
be used in its stead in all cases?
Skimming throught the specification, I found the following:
vkCmdCopyQueryPoolResults is considered to be a transfer operation, and its writes to buffer memory
must be synchronized using VK_PIPELINE_STAGE_TRANSFER_BIT
But I guess that vkCmdCopyQueryPoolResults would qualify as a VK_PIPELINE_STAGE_2_COPY_BIT_KHR operation, wouldn’t it? (It doesn’t say so in the specification, though)
Other than that, I can only find it in the context of image layout transitions:
VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL must only be used as a source image of a transfer
command (see the definition of VK_PIPELINE_STAGE_TRANSFER_BIT)
There aren’t many useful mentions in the whole specification other than these two ^. And VK_PIPELINE_STAGE_2_TRANSFER_BIT_KHR is actually not even mentioned in any description at all.
So, are maybe image layout transitions the only remaining TRANSFER operations with VK_KHR_synchronization2?
Note that STAGE_2_TRANSFER has the same value as STAGE_2_ALL_TRANSFER, which also has the same value as STAGE_TRANSFER. The specification states that the bits corresponding to the old bits have the same behavior as the old bits:
The VkPipelineStageFlags2KHR bitmask goes beyond the 31 individual bit flags allowable within a C99 enum, which is how VkPipelineStageFlagBits is defined. The first 31 values are common to both, and are interchangeable.
So if something mentions STAGE_TRANSFER, then it behaves exactly like STAGE_2_TRANSFER or STAGE_2_ALL_TRANSFER.
Yes, it does. It says so right in the definition of the bit:
VK_PIPELINE_STAGE_2_COPY_BIT_KHR specifies the execution of all copy commands, including vkCmdCopyQueryPoolResults.
Oh, I completely missed that STAGE_2_ALL_TRANSFER and STAGE_2_TRANSFER have the same value. I still wonder, though, if we should just get rid of the VK_PIPELINE_STAGE_2_TRANSFER_BIT_KHR flag and only use VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT_KHR. This would make things clearer, wouldn’t it?
Or are there actually any transfer commands which can not be assigned to one of the more precisely defined
VK_PIPELINE_STAGE_2_COPY_BIT_KHR
VK_PIPELINE_STAGE_2_BLIT_BIT_KHR
VK_PIPELINE_STAGE_2_RESOLVE_BIT_KHR
VK_PIPELINE_STAGE_2_CLEAR_BIT_KHR
stages?
I see. I was hoping to see the new Synchronization2-stages also mentioned in the commands’ descriptions. But since they are “just” an extension, that might not happen at all places where the specification refers to classical stages.