Skip to content

Commit

Permalink
Change log for January 30, 2025 Vulkan 1.4.307 spec update:
Browse files Browse the repository at this point in the history
Internal Issues

  * Update common blit image VUs to clamp slice blitting to a single
    layer/slice when the `maintenance8` feature is supported (internal issue
    4160).
  * Mention added SPIR-V version support that was not previously shown for
    <<versions-1.1, Vulkan Version 1.1>> (internal issue 4166).
  * Update the introduction to the <<extensions, Layers & Extensions>>
    appendix to reflect how we publish specifications now (internal MR
    7131).
  * Update VkSurfaceFormat2KHR VU 06750 to depend on the underlying
    extension not being support, rather than the
    pname:imageCompressionControlSwapchain feature (internal MR 7138).

New Extensions

  * VK_NV_cooperative_vector
  * VK_NV_cluster_acceleration_structure
  * VK_NV_partitioned_acceleration_structure
  * VK_NV_ray_tracing_linear_swept_spheres
  • Loading branch information
oddhack committed Jan 30, 2025
1 parent 9ff9326 commit 645c59c
Show file tree
Hide file tree
Showing 42 changed files with 6,907 additions and 99 deletions.
12 changes: 5 additions & 7 deletions .gitlab-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -38,19 +38,17 @@ consistency-check:
allow_failure: false

# Consistency check for extension development branches
# First verify that SPEC_VERSION >= 1
# Then verify that core + extension spec builds for extension development branches
# First verify that SPEC_VERSION >= 1 (-test argument)
# Then verify that core + extension spec builds for extension development
# branches (-build argument)
# This only runs on merge requests where CI_COMMIT_BRANCH is defined, and is
# a valid extension name, or is mapped to one in an exception list in
# scripts/testSpecVersion.py
spec_extension_branch_check:
stage: build
script:
- extension=`scripts/testSpecVersion.py -canonicalize -branch "$CI_COMMIT_BRANCH"`
# $extension will be empty if $CI_COMMIT_BRANCH is not a valid extension name
- test -z "$extension" || scripts/testSpecVersion.py -branch $extension
- test -z "$extension" || ./makeSpec -clean -spec core -extension $extension html
allow_failure: true
- scripts/testSpecVersion.py -branch "$CI_COMMIT_BRANCH" -test -build
allow_failure: false

# Build a test spec and check against expectation, to make sure the spec toolchain works as expected
spec-toolchain:
Expand Down
25 changes: 25 additions & 0 deletions ChangeLog.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,31 @@ appears frequently in the change log.

'''

Change log for January 30, 2025 Vulkan 1.4.307 spec update:

Internal Issues

* Update common blit image VUs to clamp slice blitting to a single
layer/slice when the `maintenance8` feature is supported (internal issue
4160).
* Mention added SPIR-V version support that was not previously shown for
<<versions-1.1, Vulkan Version 1.1>> (internal issue 4166).
* Update the introduction to the <<extensions, Layers & Extensions>>
appendix to reflect how we publish specifications now (internal MR
7131).
* Update VkSurfaceFormat2KHR VU 06750 to depend on the underlying
extension not being support, rather than the
pname:imageCompressionControlSwapchain feature (internal MR 7138).

New Extensions

* VK_NV_cooperative_vector
* VK_NV_cluster_acceleration_structure
* VK_NV_partitioned_acceleration_structure
* VK_NV_ray_tracing_linear_swept_spheres

'''

Change log for January 24, 2025 Vulkan 1.4.306 spec update:

Github Issues
Expand Down
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,7 @@ VERBOSE =
# ADOCOPTS options for asciidoc->HTML5 output

NOTEOPTS = -a editing-notes -a implementation-guide
PATCHVERSION = 306
PATCHVERSION = 307
BASEOPTS =

ifneq (,$(findstring VKSC_VERSION_1_0,$(VERSIONS)))
Expand Down
60 changes: 60 additions & 0 deletions appendices/VK_NV_cluster_acceleration_structure.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
// Copyright (c) 2024-2025 NVIDIA Corporation
//
// SPDX-License-Identifier: CC-BY-4.0

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

=== Other Extension Metadata

*Last Modified Date*::
2024-09-09
*Contributors*::
- Vikram Kushwaha, NVIDIA
- Eric Werness, NVIDIA
- Christoph Kubisch, NVIDIA
- Jan Schmid, NVIDIA
- Pyarelal Knowles, NVIDIA

=== Description

Acceleration structure build times can become a bottleneck in ray tracing
applications dealing with extensive dynamic geometry.
This extension addresses the problem by enabling applications to construct
bottom-level acceleration structures (BLAS) from pre-generated acceleration
structures based on clusters of triangles (CLAS), leading to significant
improvements in build times.

It provides a host-side query function to fetch the requirements and a
versatile multi-indirect call for managing cluster geometry.
This call enables applications to generate cluster geometry, construct
Cluster BLAS from CLAS lists, and move or copy CLAS and BLAS.
By sourcing inputs from device memory and processing multiple elements
simultaneously, the call reduces the host-side costs associated with
traditional acceleration structure functions.


This extension adds support for the following SPIR-V extension in Vulkan:

* `SPV_NV_cluster_acceleration_structure`

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

=== New or Modified Built-In Variables

* <<interfaces-builtin-variables-clusteridnv,code:ClusterIDNV>>

=== New SPIR-V Capability

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

=== Version History

* Revision 2, 2024-09-09 (Vikram Kushwaha)
** Changes to some structures causing incompatibility with Revision 1
* Revision 1, 2024-08-29 (Vikram Kushwaha)
** Initial draft




61 changes: 61 additions & 0 deletions appendices/VK_NV_cooperative_vector.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
// Copyright (c) 2021-2025 The Khronos Group, Inc.
//
// SPDX-License-Identifier: CC-BY-4.0

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

=== Other Extension Metadata

*Last Modified Date*::
2024-05-23
*Interactions and External Dependencies*::
- This extension requires
{spirv}/NV/SPV_NV_cooperative_vector.html[`SPV_NV_cooperative_vector`]
- This extension provides API support for
{GLSLregistry}/nv/GL_NV_cooperative_vector.txt[`GL_NV_cooperative_vector`]
*Contributors*::
- Jeff Bolz, NVIDIA

=== Description

This extension adds support for using cooperative vector types in SPIR-V.
Unlike cooperative matrix types, a variable with a cooperative vector type
is logically stored in the invocation it belongs to, but they can cooperate
behind the scenes when performing matrix-vector multiplies.
Cooperative vectors do not require a fully occupied subgroup or uniform
control flow like cooperative matrices, although these do increase the
likelihood of being on the fast path.
And unlike normal vector types, they have arbitrary length and support a
relatively limited set of operations.
These types are intended to help accelerate the evaluation of small neural
networks, where each invocation is performing its own independent evaluation
of the network.

Cooperative vector types are defined by the
{spirv}/NV/SPV_NV_cooperative_vector.html[`SPV_NV_cooperative_vector`]
SPIR-V extension and can be used with the
{GLSLregistry}/nv/GLSL_NV_cooperative_vector.txt[`GL_NV_cooperative_vector`]
GLSL extension.

This extension includes support for enumerating the combinations of types
that are supported by the implementation, and for converting matrix data to
and from an optimized opaque layout.

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

=== New SPIR-V Capabilities

* <<spirvenv-capabilities-table-CooperativeVectorNV,CooperativeVectorNV>>

=== Issues

=== Version History

* Revision 4, 2024-05-23 (Jeff Bolz)
** Add maxCooperativeVectorComponents
* Revision 3, 2024-05-23 (Jeff Bolz)
** Add training functions
* Revision 2, 2024-02-10 (Jeff Bolz)
** Add device-side matrix conversion
* Revision 1, 2023-12-13 (Jeff Bolz)
** Initial revisions
38 changes: 38 additions & 0 deletions appendices/VK_NV_partitioned_acceleration_structure.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
// Copyright (c) 2025 NVIDIA Corporation
//
// SPDX-License-Identifier: CC-BY-4.0

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

=== Other Extension Metadata

*Last Modified Date*::
2025-01-09
*Contributors*::
- Vikram Kushwaha, NVIDIA
- Eric Werness, NVIDIA
- Christoph Kubisch, NVIDIA
- Jan Schmid, NVIDIA
- Pyarelal Knowles, NVIDIA

=== Description

With an increase in scene complexity and expansive game worlds, the number
of instances has surged in ray tracing over the last few years.
The current Top Level Acceleration Structure (TLAS) API necessitates a full
rebuild of the entire data structure even when only a few instances are
modified.

This extension introduces Partitioned Top Level Acceleration Structures
(PTLAS) as an alternative to the existing TLAS.
PTLAS enables the efficient reuse of previously constructed parts of the
acceleration structure, resulting in much faster build times and supporting
a higher number of instances.

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

=== Version History

* Revision 1, 2025-01-09 (Vikram Kushwaha)
** Initial draft

59 changes: 59 additions & 0 deletions appendices/VK_NV_ray_tracing_linear_swept_spheres.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
// Copyright (c) 2025 NVIDIA Corporation
//
// SPDX-License-Identifier: CC-BY-4.0

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

=== Other Extension Metadata

*Last Modified Date*::
2025-01-03
*Interactions and External Dependencies*::
- This extension requires
{spirv}/NV/SPV_NV_linear_swept_spheres.html[`SPV_NV_linear_swept_spheres`]
- This extension provides API support for
{GLSLregistry}/nv/GLSL_NV_linear_swept_spheres.txt[`GL_NV_linear_swept_spheres`]
*Contributors*::
- Vikram Kushwaha, NVIDIA
- Eric Werness, NVIDIA
- Daniel Koch, NVIDIA
- Ashwin Lele, NVIDIA
- Nathan Morrical, NVIDIA

=== Description

This extension adds two new primitives for ray tracing: a sphere primitive
and a linear swept sphere (LSS) primitive.
The purpose of the LSS primitive is to enable rendering of high quality hair
and fur using a compact primitive representation encoded in the acceleration
structure.
Sphere primitives are defined by a position and a radius and are a subset of
LSS, but are useful in their own right, for example for particle systems.


This extension adds support for the following SPIR-V extension in Vulkan:

* `SPV_NV_linear_swept_spheres`

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

=== New or Modified Built-In Variables

* <<interfaces-builtin-variables-hitissphere,code:HitIsSphereNV>>
* <<interfaces-builtin-variables-hitislss,code:HitIsLSSNV>>
* <<interfaces-builtin-variables-hitsphereposition,code:HitSpherePositionNV>>
* <<interfaces-builtin-variables-hitsphereradius,code:HitSphereRadiusNV>>
* <<interfaces-builtin-variables-hitlsspositions,code:HitLSSPositionsNV>>
* <<interfaces-builtin-variables-hitlssradii,code:HitLSSRadiiNV>>

=== New SPIR-V Capabilities

* <<spirvenv-capabilities-table-RayTracingSpheresGeometryNV,
code:RayTracingSpheresGeometryNV>>
* <<spirvenv-capabilities-table-RayTracingLinearSweptSpheresGeometryNV,
code:RayTracingLinearSweptSpheresGeometryNV>>

=== Version History

* Revision 1, 2025-01-03 (Vikram Kushwaha)
** Initial draft
22 changes: 8 additions & 14 deletions appendices/extensions.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -11,32 +11,26 @@ Extensions to the Vulkan API can: be defined by authors, groups of authors,
and the Khronos Vulkan
ifdef::VKSC_VERSION_1_0[Safety Critical]
Working Group.
In order not to compromise the readability of the Vulkan Specification, the
core Specification does not incorporate most extensions.
The online Registry of extensions is available at URL

ifndef::VKSC_VERSION_1_0[https://registry.khronos.org/vulkan/]
ifdef::VKSC_VERSION_1_0[https://registry.khronos.org/vulkansc/]

and allows generating versions of the Specification incorporating different
extensions.

Authors creating extensions and layers must: follow the mandatory procedures
described in the <<vulkan-styleguide, Vulkan Documentation and Extensions>>
document when creating extensions and layers.

The remainder of this appendix documents a set of extensions chosen when
this document was built.
Versions of the Specification published in the Registry include:

* Core API + mandatory extensions required of all Vulkan implementations.
The version of the Vulkan specification published
ifndef::VKSC_VERSION_1_0[]
* Core API + all registered and published Khronos (`KHR`) extensions.
on the https://docs.vulkan.org/[Vulkan Documentation] site and
endif::VKSC_VERSION_1_0[]
* Core API + all registered and published extensions.
in the Registry includes all registered and published extensions.
It is also possible to build the specification with an arbitrary set of
extensions included, and the specification you are viewing may not include
all extensions.

Extensions are grouped as Khronos `KHR`, multivendor `EXT`, and then
alphabetically by author ID.
In the remainder of this appendix, extensions are grouped as Khronos `KHR`,
multivendor `EXT`, and then alphabetically by author ID.
Within each group, extensions are listed in alphabetical order by their
name.

Expand Down
11 changes: 11 additions & 0 deletions appendices/glossary.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -332,6 +332,12 @@ Cooperative Matrix::
matrix are spread across a set of invocations such as a subgroup.
endif::VK_NV_cooperative_matrix,VK_KHR_cooperative_matrix[]

ifdef::VK_NV_cooperative_vector[]
Cooperative Vector::
A SPIR-V vector type optimized for the evaluation of small neural
networks.
endif::VK_NV_cooperative_vector[]

ifdef::VK_NV_corner_sampled_image[]
Corner-Sampled Image::
A slink:VkImage where unnormalized texel coordinates are centered on
Expand Down Expand Up @@ -1535,6 +1541,11 @@ Provoking Vertex::
This is generally the "`first`" vertex in the primitive, and depends on
the primitive topology.

ifdef::VK_NV_partitioned_acceleration_structure,VK_KHR_acceleration_structure[]
PTLAS::
<<partitioned-tlas, Partitioned Top Level Acceleration Structures>>
endif::VK_NV_partitioned_acceleration_structure,VK_KHR_acceleration_structure[]

Push Constants::
A small bank of values writable via the API and accessible in shaders.
Push constants allow the application to set values used in shaders
Expand Down
Loading

0 comments on commit 645c59c

Please sign in to comment.