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

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

=== Other Extension Metadata

*Last Modified Date*::
    2017-09-05
*IP Status*::
    No known IP claims.
*Interactions and External Dependencies*::
  - Promoted to Vulkan 1.1 Core
  - This extension requires
    {spirv}/KHR/SPV_KHR_16bit_storage.html[`SPV_KHR_16bit_storage`]
  - This extension provides API support for
    https://github.com/KhronosGroup/GLSL/blob/master/extensions/ext/GL_EXT_shader_16bit_storage.txt[`GL_EXT_shader_16bit_storage`]
*Contributors*::
  - Alexander Galazin, ARM
  - Jan-Harald Fredriksen, ARM
  - Joerg Wagner, ARM
  - Neil Henning, Codeplay
  - Jeff Bolz, Nvidia
  - Daniel Koch, Nvidia
  - David Neto, Google
  - John Kessenich, Google

=== Description

The `VK_KHR_16bit_storage` extension allows use of 16-bit types in shader
input and output interfaces, and push constant blocks.
This extension introduces several new optional features which map to SPIR-V
capabilities and allow access to 16-bit data in code:Block-decorated objects
in the code:Uniform and the code:StorageBuffer storage classes, and objects
in the code:PushConstant storage class.
This extension allows 16-bit variables to be declared and used as
user-defined shader inputs and outputs but does not change location
assignment and component assignment rules.

=== Promotion to Vulkan 1.1

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

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

=== New SPIR-V Capabilities

  * <<spirvenv-capabilities-table-StorageBuffer16BitAccess,
    code:StorageBuffer16BitAccess>>
  * <<spirvenv-capabilities-table-UniformAndStorageBuffer16BitAccess,
    code:UniformAndStorageBuffer16BitAccess>>
  * <<spirvenv-capabilities-table-StoragePushConstant16,
    code:StoragePushConstant16>>
  * <<spirvenv-capabilities-table-StorageInputOutput16,
    code:StorageInputOutput16>>

=== Version History

  * Revision 1, 2017-03-23 (Alexander Galazin)
    - Initial draft
