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

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

=== Other Extension Metadata

*Last Modified Date*::
    2020-08-11
*IP Status*::
    No known IP claims.
*Interactions and External Dependencies*::
  - Requires the
    {spirv}/KHR/SPV_KHR_terminate_invocation.html[`SPV_KHR_terminate_invocation`]
    SPIR-V extension.
*Contributors*::
  - Alan Baker, Google
  - Jeff Bolz, NVIDIA
  - Jesse Hall, Google
  - Ralph Potter, Samsung
  - Tom Olson, Arm

=== Description

This extension adds Vulkan support for the
{spirv}/KHR/SPV_KHR_terminate_invocation.html[`SPV_KHR_terminate_invocation`]
SPIR-V extension.
That SPIR-V extension provides a new instruction,
code:OpTerminateInvocation, which causes a shader invocation to immediately
terminate and sets the coverage of shaded samples to `0`; only previously
executed instructions will have observable effects.
The code:OpTerminateInvocation instruction, along with the
code:OpDemoteToHelperInvocation instruction from the
`apiext:VK_EXT_shader_demote_to_helper_invocation` extension, together
replace the code:OpKill instruction, which could behave like either of these
instructions.
code:OpTerminateInvocation provides the behavior required by the GLSL
code:discard statement, and should be used when available by GLSL compilers
and applications that need the GLSL code:discard behavior.

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

=== Version History

  * Revision 1, 2020-08-11 (Jesse Hall)
