// Copyright 2018-2024 The Khronos Group Inc.
//
// SPDX-License-Identifier: CC-BY-4.0

include::{generated}/meta/{refprefix}VK_EXT_shader_atomic_float2.adoc[]

=== Other Extension Metadata

*Last Modified Date*::
    2020-08-14
*IP Status*::
    No known IP claims.
*Interactions and External Dependencies*::
  - This extension provides API support for
    {GLSLregistry}/ext/GLSL_EXT_shader_atomic_float2.txt[`GLSL_EXT_shader_atomic_float2`]
*Contributors*::
  - Faith Ekstrand, Intel

=== Description

This extension allows a shader to perform 16-bit floating-point atomic
operations on buffer and workgroup memory as well as floating-point atomic
minimum and maximum operations on buffer, workgroup, and image memory.
It advertises the SPIR-V code:AtomicFloat16AddEXT capability which allows
atomic add operations on 16-bit floating-point numbers and the SPIR-V
code:AtomicFloat16MinMaxEXT, code:AtomicFloat32MinMaxEXT and
code:AtomicFloat64MinMaxEXT capabilities which allow atomic minimum and
maximum operations on floating-point numbers.
The supported operations include code:OpAtomicFAddEXT, code:OpAtomicFMinEXT
and code:OpAtomicFMaxEXT.

include::{generated}/interfaces/VK_EXT_shader_atomic_float2.adoc[]

=== Issues

1) Should this extension add support for 16-bit image atomics?

*RESOLVED*: No.
While Vulkan supports creating storage images with
ename:VK_FORMAT_R16_SFLOAT and doing load and store on them, the data in the
shader has a 32-bit representation.
Vulkan currently has no facility for even basic reading or writing such
images using 16-bit float values in the shader.
Adding such functionality would be required before 16-bit image atomics
would make sense and is outside the scope of this extension.

=== New SPIR-V Capabilities

  * <<spirvenv-capabilities-table-AtomicFloat16AddEXT,
    code:AtomicFloat32MinMaxEXT>>
  * <<spirvenv-capabilities-table-AtomicFloat16MinMaxEXT,
    code:AtomicFloat32MinMaxEXT>>
  * <<spirvenv-capabilities-table-AtomicFloat32MinMaxEXT,
    code:AtomicFloat32MinMaxEXT>>
  * <<spirvenv-capabilities-table-AtomicFloat64MinMaxEXT,
    code:AtomicFloat64MinMaxEXT>>

=== Version History

  * Revision 1, 2020-08-14 (Faith Ekstrand)
  ** Internal revisions
