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

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

=== Other Extension Metadata

*Last Modified Date*::
    2020-06-01
*IP Status*::
    No known IP claims.
*Interactions and External Dependencies*::
 - This extension requires
   {spirv}/KHR/SPV_KHR_workgroup_memory_explicit_layout.html[`SPV_KHR_workgroup_memory_explicit_layout`]
*Contributors*::
 - Caio Marcelo de Oliveira Filho, Intel
 - Jeff Bolz, NVIDIA
 - Graeme Leese, Broadcom
 - Jason Ekstrand, Intel
 - Daniel Koch, NVIDIA

=== Description

This extension adds Vulkan support for the
{spirv}/KHR/SPV_KHR_workgroup_memory_explicit_layout.html[`SPV_KHR_workgroup_memory_explicit_layout`]
SPIR-V extension, which allows shaders to explicitly define the layout of
code:Workgroup storage class memory and create aliases between variables
from that storage class in a compute shader.

The aliasing feature allows different "`views`" on the same data, so the
shader can bulk copy data from another storage class using one type (e.g. an
array of large vectors), and then use the data with a more specific type.
It also enables reducing the amount of workgroup memory consumed by allowing
the shader to alias data whose lifetimes do not overlap.

The explicit layout support and some form of aliasing is also required for
layering OpenCL on top of Vulkan.

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

=== New SPIR-V Capabilities

 * <<spirvenv-capabilities-table-workgroup-memory-explicit-layout,
   code:WorkgroupMemoryExplicitLayoutKHR>>
 * <<spirvenv-capabilities-table-workgroup-memory-explicit-layout-8-bit-access,
   code:WorkgroupMemoryExplicitLayout8BitAccessKHR>>
 * <<spirvenv-capabilities-table-workgroup-memory-explicit-layout-16-bit-access,
   code:WorkgroupMemoryExplicitLayout16BitAccessKHR>>

=== Version History

 * Revision 1, 2020-06-01 (Caio Marcelo de Oliveira Filho)
   - Initial version
