Anning Wuwang
Anning Wuwang

Reputation: 343

When does Image Layout Transition happen when no source or destination stage is specified

Based on the specs https://registry.khronos.org/vulkan/specs/1.3-khr-extensions/pdf/vkspec.pdf

It says "When a layout transition is specified in a memory dependency, it happens-after the availability operations in the memory dependency, and happens-before the visibility operations"

As we know when calling vkCmdPipelineBarrier(layout1, layout2, ...), the srcAccessMask is the availability operation and the dstAccessMask is the visibility operation. I wonder if I set both of them to 0, which means there is no availability operation and no visibility operation in this memory dependency, will there be any layout transition from layout1 to layout2 actually happening after the barrier call in this case?

To answer my own question: Based on the specs, the queue present call will execute the visibility operation in this case. https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/vkQueuePresentKHR.html "Any writes to memory backing the images referenced by the pImageIndices and pSwapchains members of pPresentInfo, that are available before vkQueuePresentKHR is executed, are automatically made visible to the read access performed by the presentation engine. This automatic visibility operation for an image happens-after the semaphore signal operation, and happens-before the presentation engine accesses the image." So we only need to write the src access to register an availability operation and leave the dst access 0(the visibility operation) to the present call.

Upvotes: 1

Views: 296

Answers (1)

Nicol Bolas
Nicol Bolas

Reputation: 473272

There is nothing in the standard which says that the availability operations that are part of a memory dependency are optional. They always happen as part of executing the memory dependency. They can be empty and make nothing available, but it still always happens. The same goes for visibility.

So the layout transition happens regardless of what is available or visible. This is useful as any writes being consumed may have been made available before now by some other operation.

The bigger issue is the lack of visibility for operations down the line. A layout transition is ultimately a write operation. So processes that need to use that image need to see the image in the new layout. So it needs to be visible to them. So if you do this, you will likely see your validation layers complain later about some form of memory hazard.

Upvotes: 0

Related Questions