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

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

=== Other Extension Metadata

*Last Modified Date*::
    2016-10-21
*IP Status*::
    No known IP claims.
*Interactions and External Dependencies*::
  - Promoted to Vulkan 1.1 Core
*Contributors*::
  - Jason Ekstrand, Intel
  - Jesse Hall, Google
  - Tobias Hector, Imagination Technologies
  - James Jones, NVIDIA
  - Jeff Juliano, NVIDIA
  - Matthew Netsch, Qualcomm Technologies, Inc.
  - Ray Smith, ARM
  - Chad Versace, Google

=== Description

An application using external memory may wish to synchronize access to that
memory using semaphores.
This extension enables an application to create semaphores from which
non-Vulkan handles that reference the underlying synchronization primitive
can be exported.

=== Promotion to Vulkan 1.1

All functionality in this extension is included in core Vulkan 1.1, 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_external_semaphore.txt[]

=== Issues

1) Should there be restrictions on what side effects can occur when waiting
on imported semaphores that are in an invalid state?

*RESOLVED*: Yes.
Normally, validating such state would be the responsibility of the
application, and the implementation would be free to enter an undefined:
state if valid usage rules were violated.
However, this could cause security concerns when using imported semaphores,
as it would require the importing application to trust the exporting
application to ensure the state is valid.
Requiring this level of trust is undesirable for many potential use cases.

2) Must implementations validate external handles the application provides
as input to semaphore state import operations?

*RESOLVED*: Implementations must return an error to the application if the
provided semaphore state handle cannot be used to complete the requested
import operation.
However, implementations need not validate handles are of the exact type
specified by the application.

=== Version History

  * Revision 1, 2016-10-21 (James Jones)
    - Initial revision
