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

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

=== Other Extension Metadata

*Last Modified Date*::
    2018-07-05
*Interactions and External Dependencies*::
  - Promoted to Vulkan 1.2 Core
  - This extension enables
    https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_gpu_shader_int64.txt[`GL_ARB_gpu_shader_int64`]
    and
    https://raw.githubusercontent.com/KhronosGroup/GLSL/master/extensions/ext/GL_EXT_shader_atomic_int64.txt[`GL_EXT_shader_atomic_int64`]
    for GLSL source languages.
*Contributors*::
  - Aaron Hagan, AMD
  - Daniel Rakos, AMD
  - Jeff Bolz, NVIDIA
  - Neil Henning, Codeplay

=== Description

This extension advertises the SPIR-V *Int64Atomics* capability for Vulkan,
which allows a shader to contain 64-bit atomic operations on signed and
unsigned integers.
The supported operations include OpAtomicMin, OpAtomicMax, OpAtomicAnd,
OpAtomicOr, OpAtomicXor, OpAtomicAdd, OpAtomicExchange, and
OpAtomicCompareExchange.

=== Promotion to Vulkan 1.2

All functionality in this extension is included in core Vulkan 1.2, with the
KHR suffix omitted.
However, if Vulkan 1.2 is supported and this extension is not, the
code:shaderBufferInt64Atomics capability is optional.
The original type, enum and command names are still available as aliases of
the core functionality.

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

=== New SPIR-V Capabilities

  * <<spirvenv-capabilities-table-Int64Atomics,Int64Atomics>>

=== Version History

  * Revision 1, 2018-07-05 (Aaron Hagan)
    - Internal revisions
