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

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

=== Other Extension Metadata

*Last Modified Date*::
    2022-02-21
*Interactions and External Dependencies*::
  - This extension requires
    {spirv}/KHR/SPV_KHR_ray_cull_mask.html[`SPV_KHR_ray_cull_mask`]
  - This extension provides API support for
    {GLSLregistry}/ext/GLSL_EXT_ray_cull_mask.txt[`GLSL_EXT_ray_cull_mask`]
  - Interacts with `apiext:VK_KHR_ray_tracing_pipeline`
  - Interacts with `apiext:VK_KHR_synchronization2`
*Contributors*::
  - Stu Smith, AMD
  - Tobias Hector, AMD
  - Marius Bjorge, Arm
  - Tom Olson, Arm
  - Yuriy O’Donnell, Epic Games
  - Yunpeng Zhu, Huawei
  - Andrew Garrard, Imagination
  - Dae Kim, Imagination
  - Joshua Barczak, Intel
  - Lionel Landwerlin, Intel
  - Daniel Koch, NVIDIA
  - Eric Werness, NVIDIA
  - Spencer Fricke, Samsung

=== Description

`VK_KHR_ray_tracing_maintenance1` adds a collection of minor ray tracing
features, none of which would warrant an entire extension of their own.

The new features are as follows:

  * Adds support for the `SPV_KHR_ray_cull_mask` SPIR-V extension in Vulkan.
    This extension provides access to built-in code:CullMaskKHR shader
    variable which contains the value of the code:OpTrace* `Cull Mask`
    parameter.
    This new shader variable is accessible in the intersection, any-hit,
    closest-hit and miss shader stages.
  * Adds support for a new pipeline stage and access mask built on top of
    `apiext:VK_KHR_synchronization2`:
  ** ename:VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR to
     specify execution of <<acceleration-structure-copying, acceleration
     structure copy commands>>
  ** ename:VK_ACCESS_2_SHADER_BINDING_TABLE_READ_BIT_KHR to specify read
     access to a <<shader-binding-table, shader binding table>> in any
     shader pipeline stage
  * Adds two new acceleration structure query parameters:
  ** ename:VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SIZE_KHR to query the
     acceleration structure size on the device timeline
  ** ename:VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_BOTTOM_LEVEL_POINTERS_KHR
     to query the number of bottom level acceleration structure pointers for
     serialization
  * Adds an optional new indirect ray tracing dispatch command,
    flink:vkCmdTraceRaysIndirect2KHR, which sources the shader binding table
    parameters as well as the dispatch dimensions from the device.
    The <<features-rayTracingPipelineTraceRaysIndirect2,
    pname:rayTracingPipelineTraceRaysIndirect2>> feature indicates whether
    this functionality is supported.


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

=== New Built-In Variables

  * <<interfaces-builtin-variables-cullmask,code:CullMaskKHR>>

=== New SPIR-V Capabilities

  * <<spirvenv-capabilities-table-RayCullMaskKHR, code:RayCullMaskKHR>>

=== Issues

None Yet!

=== Version History

  * Revision 1, 2022-02-21 (Members of the Vulkan Ray Tracing TSG)
  ** internal revisions
