// Copyright 2016-2021 The Khronos Group, Inc.
//
// SPDX-License-Identifier: CC-BY-4.0

include::{generated}/meta/{refprefix}VK_KHR_timeline_semaphore.txt[]

=== Other Extension Metadata

*Last Modified Date*::
    2019-06-12
*IP Status*::
    No known IP claims.
*Interactions and External Dependencies*::
  - This extension interacts with
    `apiext:VK_KHR_external_semaphore_capabilities`
  - This extension interacts with `apiext:VK_KHR_external_semaphore`
  - This extension interacts with `apiext:VK_KHR_external_semaphore_win32`
  - Promoted to Vulkan 1.2 Core
*Contributors*::
  - Jeff Bolz, NVIDIA
  - Yuriy O'Donnell, Epic Games
  - Jason Ekstrand, Intel
  - Jesse Hall, Google
  - James Jones, NVIDIA
  - Jeff Juliano, NVIDIA
  - Daniel Rakos, AMD
  - Ray Smith, Arm

=== Description

This extension introduces a new type of semaphore that has an integer
payload identifying a point in a timeline.
Such timeline semaphores support the following operations:

  * Host query - A host operation that allows querying the payload of the
    timeline semaphore.
  * Host wait - A host operation that allows a blocking wait for a timeline
    semaphore to reach a specified value.
  * Host signal - A host operation that allows advancing the timeline
    semaphore to a specified value.
  * Device wait - A device operation that allows waiting for a timeline
    semaphore to reach a specified value.
  * Device signal - A device operation that allows advancing the timeline
    semaphore to a specified value.

=== Promotion to Vulkan 1.2

All functionality in this extension is included in core Vulkan 1.2, with the
KHR suffix omitted.
The original type, enum and command names are still available as aliases of
the core functionality.

include::{generated}/interfaces/VK_KHR_timeline_semaphore.txt[]

=== Issues

1) Do we need a new object type for this?

*RESOLVED*: No, we just introduce a new type of semaphore object, as
`VK_KHR_external_semaphore_win32` already uses semaphores as the destination
for importing D3D12 fence objects, which are semantically close/identical to
the proposed synchronization primitive.

2) What type of payload the new synchronization primitive has?

*RESOLVED*: A 64-bit unsigned integer that can only be set to strictly
increasing values by signal operations and is not changed by wait
operations.

3) Does the new synchronization primitive have the same signal-before-wait
requirement as the existing semaphores do?

*RESOLVED*: No.
Timeline semaphores support signaling and waiting entirely asynchronously.
It is the responsibility of the client to avoid deadlock.

4) Does the new synchronization primitive allow resetting its payload?

*RESOLVED*: No, allowing the payload value to "`go backwards`" is
problematic.
Applications looking for reset behavior should create a new instance of the
sychronization primitive instead.

5) How do we enable host waits on the synchronization primitive?

*RESOLVED*: Both a non-blocking query of the current payload value of the
synchronization primitive, and a blocking wait operation are provided.

6) How do we enable device waits and signals on the synchronization
primitive?

*RESOLVED*: Similar to `VK_KHR_external_semaphore_win32`, this extension
introduces a new structure that can be chained to slink:VkSubmitInfo to
specify the values signaled semaphores should be set to, and the values
waited semaphores need to reach.

7) Can the new synchronization primitive be used to synchronize presentation
and swapchain image acquisition operations?

*RESOLVED*: Some implementations may have problems with supporting that
directly, thus it is not allowed in this extension.

8) Do we want to support external sharing of the new synchronization
primitive type?

*RESOLVED*: Yes.
Timeline semaphore specific external sharing capabilities can be queried
using flink:vkGetPhysicalDeviceExternalSemaphoreProperties by chaining the
new slink:VkSemaphoreTypeCreateInfoKHR structure to its
pname:pExternalSemaphoreInfo structure.
This allows having a different set of external semaphore handle types
supported for timeline semaphores vs binary semaphores.

9) Do we need to add a host signal operation for the new synchronization
primitive type?

*RESOLVED*: Yes.
This helps in situations where one host thread submits a workload but
another host thread has the information on when the workload is ready to be
executed.

10) How should the new synchronization primitive interact with the ordering
requirements of the original sname:VkSemaphore?

*RESOLVED*: Prior to calling any command which may: cause a wait operation
on a binary semaphore, the client must: ensure that the semaphore signal
operation that has been submitted for execution and any semaphore signal
operations on which it depends (if any) must: have also been submitted for
execution.

11) Should we have separate feature bits for different sub-features of
timeline semaphores?

*RESOLVED*: No.
The only feature which cannot be supported universally is timeline semaphore
import/export.
For import/export, the client is already required to query available
external handle types via
flink:vkGetPhysicalDeviceExternalSemaphoreProperties and provide the
semaphore type by adding a slink:VkSemaphoreTypeCreateInfoKHR structure to
the pname:pNext chain of slink:VkPhysicalDeviceExternalSemaphoreInfo so no
new feature bit is required.

=== Version History

 * Revision 1, 2018-05-10 (Jason Ekstrand)
   - Initial version

 * Revision 2, 2019-06-12 (Jason Ekstrand)
   - Added an initialValue parameter to timeline semaphore creation
