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

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

=== Other Extension Metadata

*Last Modified Date*::
    2019-05-02
*Interactions and External Dependencies*::
  - This extension requires
    {spirv}/EXT/SPV_EXT_fragment_shader_interlock.html[`SPV_EXT_fragment_shader_interlock`]
  - This extension provides API support for
    https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_fragment_shader_interlock.txt[`GL_ARB_fragment_shader_interlock`]
*Contributors*::
  - Daniel Koch, NVIDIA
  - Graeme Leese, Broadcom
  - Jan-Harald Fredriksen, Arm
  - Jason Ekstrand, Intel
  - Jeff Bolz, NVIDIA
  - Ruihao Zhang, Qualcomm
  - Slawomir Grajewski, Intel
  - Spencer Fricke, Samsung

=== Description

This extension adds support for the code:FragmentShaderPixelInterlockEXT,
code:FragmentShaderSampleInterlockEXT, and
code:FragmentShaderShadingRateInterlockEXT capabilities from the
`SPV_EXT_fragment_shader_interlock` extension to Vulkan.

Enabling these capabilities provides a critical section for fragment shaders
to avoid overlapping pixels being processed at the same time, and certain
guarantees about the ordering of fragment shader invocations of fragments of
overlapping pixels.

This extension can be useful for algorithms that need to access per-pixel
data structures via shader loads and stores.
Algorithms using this extension can access per-pixel data structures in
critical sections without other invocations accessing the same per-pixel
data.
Additionally, the ordering guarantees are useful for cases where the API
ordering of fragments is meaningful.
For example, applications may be able to execute programmable blending
operations in the fragment shader, where the destination buffer is read via
image loads and the final value is written via image stores.

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

=== New SPIR-V Capabilities

  * <<spirvenv-capabilities-table-FragmentShaderSampleInterlockEXT,FragmentShaderInterlockEXT>>
  * <<spirvenv-capabilities-table-FragmentShaderPixelInterlockEXT,FragmentShaderPixelInterlockEXT>>
  * <<spirvenv-capabilities-table-FragmentShaderShadingRateInterlockEXT,FragmentShaderShadingRateInterlockEXT>>

=== Version History

  * Revision 1, 2019-05-24 (Piers Daniell)
    - Internal revisions
