| // Copyright (c) 2018-2020 NVIDIA Corporation |
| // |
| // SPDX-License-Identifier: CC-BY-4.0 |
| |
| include::{generated}/meta/{refprefix}VK_NV_ray_tracing.txt[] |
| |
| === Other Extension Metadata |
| |
| *Last Modified Date*:: |
| 2018-11-20 |
| *Interactions and External Dependencies*:: |
| - This extension requires |
| {spirv}/NV/SPV_NV_ray_tracing.html[`SPV_NV_ray_tracing`] |
| - This extension provides API support for |
| https://github.com/KhronosGroup/GLSL/blob/master/extensions/nv/GLSL_NV_ray_tracing.txt[`GL_NV_ray_tracing`] |
| *Contributors*:: |
| - Eric Werness, NVIDIA |
| - Ashwin Lele, NVIDIA |
| - Robert Stepinski, NVIDIA |
| - Nuno Subtil, NVIDIA |
| - Christoph Kubisch, NVIDIA |
| - Martin Stich, NVIDIA |
| - Daniel Koch, NVIDIA |
| - Jeff Bolz, NVIDIA |
| - Joshua Barczak, Intel |
| - Tobias Hector, AMD |
| - Henrik Rydgard, NVIDIA |
| - Pascal Gautron, NVIDIA |
| |
| === Description |
| |
| Rasterization has been the dominant method to produce interactive graphics, |
| but increasing performance of graphics hardware has made ray tracing a |
| viable option for interactive rendering. |
| Being able to integrate ray tracing with traditional rasterization makes it |
| easier for applications to incrementally add ray traced effects to existing |
| applications or to do hybrid approaches with rasterization for primary |
| visibility and ray tracing for secondary queries. |
| |
| To enable ray tracing, this extension adds a few different categories of new |
| functionality: |
| |
| * Acceleration structure objects and build commands |
| * A new pipeline type with new shader domains |
| * An indirection table to link shader groups with acceleration structure |
| items |
| |
| This extension adds support for the following SPIR-V extension in Vulkan: |
| |
| * `SPV_NV_ray_tracing` |
| |
| include::{generated}/interfaces/VK_NV_ray_tracing.txt[] |
| |
| === New or Modified Built-In Variables |
| |
| * <<interfaces-builtin-variables-launchid,code:LaunchIdNV>> |
| * <<interfaces-builtin-variables-launchsize,code:LaunchSizeNV>> |
| * <<interfaces-builtin-variables-worldrayorigin,code:WorldRayOriginNV>> |
| * <<interfaces-builtin-variables-worldraydirection,code:WorldRayDirectionNV>> |
| * <<interfaces-builtin-variables-objectrayorigin,code:ObjectRayOriginNV>> |
| * <<interfaces-builtin-variables-objectraydirection,code:ObjectRayDirectionNV>> |
| * <<interfaces-builtin-variables-raytmin,code:RayTminNV>> |
| * <<interfaces-builtin-variables-raytmax,code:RayTmaxNV>> |
| * <<interfaces-builtin-variables-instancecustomindex,code:InstanceCustomIndexNV>> |
| * <<interfaces-builtin-variables-instanceid,code:InstanceId>> |
| * <<interfaces-builtin-variables-objecttoworld,code:ObjectToWorldNV>> |
| * <<interfaces-builtin-variables-worldtoobject,code:WorldToObjectNV>> |
| * <<interfaces-builtin-variables-hitt,code:HitTNV>> |
| * <<interfaces-builtin-variables-hitkind,code:HitKindNV>> |
| * <<interfaces-builtin-variables-incomingrayflags,code:IncomingRayFlagsNV>> |
| * (modified)code:PrimitiveId |
| |
| === New SPIR-V Capabilities |
| |
| * <<spirvenv-capabilities-table-RayTracingNV,RayTracingNV>> |
| |
| === Issues |
| |
| 1) Are there issues? |
| |
| *RESOLVED*: Yes. |
| |
| === Sample Code |
| |
| Example ray generation GLSL shader |
| |
| [source,c] |
| --------------------------------------------------- |
| #version 450 core |
| #extension GL_NV_ray_tracing : require |
| layout(set = 0, binding = 0, rgba8) uniform image2D image; |
| layout(set = 0, binding = 1) uniform accelerationStructureNV as; |
| layout(location = 0) rayPayloadNV float payload; |
| |
| void main() |
| { |
| vec4 col = vec4(0, 0, 0, 1); |
| |
| vec3 origin = vec3(float(gl_LaunchIDNV.x)/float(gl_LaunchSizeNV.x), float(gl_LaunchIDNV.y)/float(gl_LaunchSizeNV.y), 1.0); |
| vec3 dir = vec3(0.0, 0.0, -1.0); |
| |
| traceNV(as, 0, 0xff, 0, 1, 0, origin, 0.0, dir, 1000.0, 0); |
| |
| col.y = payload; |
| |
| imageStore(image, ivec2(gl_LaunchIDNV.xy), col); |
| } |
| --------------------------------------------------- |
| |
| === Version History |
| |
| * Revision 1, 2018-09-11 (Robert Stepinski, Nuno Subtil, Eric Werness) |
| - Internal revisions |
| * Revision 2, 2018-10-19 (Eric Werness) |
| - rename to VK_NV_ray_tracing, add support for callables. |
| - too many updates to list |
| * Revision 3, 2018-11-20 (Daniel Koch) |
| - update to use InstanceId instead of InstanceIndex as implemented. |