Is the TRANSFER stage useful for anything or is it actually deprecated with VK_KHR_synchronization2, too?

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.

This topic was automatically closed 183 days after the last reply. New replies are no longer allowed.