Vulkan-Docs/appendices/VK_NV_ray_tracing.txt
Jon Leech f1a7c4b4f3 Change log for January 13, 2019 Vulkan 1.1.98 spec update:
* Update release number to 98.

Public Issues:

  * Fix missing markup in flink:vkDestroyPipelineLayout valid usage
    statement (pull request 882).
  * Add missing contributors for `<<VK_EXT_buffer_device_address>>` (public
    pull request 891).

Internal Issues:

  * Detect nested bullet points in valid usage blocks and warn about them
    during VUID assignment (internal issue 1382).
  * Update the style guide to document the process for reserving new bits in
    bitmask types (internal issue 1411).
  * Clarify for slink:VkApplicationInfo::pname:apiVersion and in the
    <<fundamentals-validusage-versions, Valid Usage for Newer Core
    Versions>> section when it is valid for an application to use a certain
    version of Vulkan API functionality (for an instance and for a
    device/physical device); and when the validation layers must generate an
    error (internal issue 1412).
  * Add optional <<memory-model-availability-visibility, transitive
    availability/visibility operations to the memory model, including a new
    pname:vulkanMemoryModelAvailabilityVisibilityChains feature for
    slink:VkPhysicalDeviceVulkanMemoryModelFeaturesKHR (internal issue
    1460).
  * Add the code:StorageBuffer storage class to those in the
    <<interfaces-resources-descset, Descriptor Set Interface>> (internal
    issue 1480).
  * Add missing `returnedonly` tags for a number of returned extension
    structures that can be passed in pname:pNext chains (internal issue
    1515).
  * Clean up and rearrange some spec language for
    slink:VkRenderPassCreateInfo and slink:VkAttachmentReference.txt
    (internal issue 1522).
  * Correctly round the code:OpVectorTimesScalar and
    code:OpMatrixTimesScalar SPIR-V operations in the <<Precision of core
    SPIR-V Instructions>> table (internal merge request 2996).
  * Work around cases in flink:vkCmdBeginTransformFeedbackEXT,
    flink:vkCmdEndTransformFeedbackEXT, and
    slink:VkPipelineCoverageModulationStateCreateInfoNV where an array
    parameter is `optional` but the length is not in `vk.xml`. This is an
    interim fix using `noautovalidity` + handcoded VU replacing those that
    should be autogenerated (internal issue 2944 and
    https://github.com/KhronosGroup/Vulkan-ValidationLayers/issues/480).
  * Remove redundant capability validation of the code:float16 and code:int8
    SPIR-V capabilities from the <<spirvenv-capabilities, Capabilities>>
    section, since they are already covered in the preceding table.
  * Update check_spec_links script, including validation for reference page
    open blocks. Fix errors identified by the script.
2019-01-13 05:53:27 -08:00

198 lines
7.3 KiB
Plaintext

include::meta/VK_NV_ray_tracing.txt[]
*Last Modified Date*::
2018-11-20
*Interactions and External Dependencies*::
- This extension requires the
https://htmlpreview.github.io/?https://github.com/KhronosGroup/SPIRV-Registry/blob/master/extensions/NV/SPV_NV_ray_tracing.html[`SPV_NV_ray_tracing`]
SPIR-V extension.
- This extension requires the
https://github.com/KhronosGroup/GLSL/blob/master/extensions/nv/GLSL_NV_ray_tracing.txt[`GL_NV_ray_tracing`]
extension for GLSL source languages.
*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
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`
=== New Object Types
* slink:VkAccelerationStructureNV
=== New Enum Constants
* Extending elink:VkStructureType:
** ename:VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_NV
** ename:VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_NV
** ename:VK_STRUCTURE_TYPE_GEOMETRY_NV
** ename:VK_STRUCTURE_TYPE_GEOMETRY_TRIANGLES_NV
** ename:VK_STRUCTURE_TYPE_GEOMETRY_AABB_NV
** ename:VK_STRUCTURE_TYPE_BIND_ACCELERATION_STRUCTURE_MEMORY_INFO_NV
** ename:VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_NV
** ename:VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_NV
** ename:VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_NV
** ename:VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_INFO_NV
** ename:VK_STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_NV
* Extending elink:VkShaderStageFlagBits:
** ename:VK_SHADER_STAGE_RAYGEN_BIT_NV
** ename:VK_SHADER_STAGE_ANY_HIT_BIT_NV
** ename:VK_SHADER_STAGE_CLOSEST_HIT_BIT_NV
** ename:VK_SHADER_STAGE_MISS_BIT_NV
** ename:VK_SHADER_STAGE_INTERSECTION_BIT_NV
** ename:VK_SHADER_STAGE_CALLABLE_BIT_NV
* Extending elink:VkPipelineStageFlagBits:
** ename:VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_NV
** ename:VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_NV
* Extending elink:VkBufferUsageFlagBits:
** ename:VK_BUFFER_USAGE_RAY_TRACING_BIT_NV
* Extending elink:VkPipelineBindPoint:
** ename:VK_PIPELINE_BIND_POINT_RAY_TRACING_NV
* Extending elink:VkDescriptorType:
** ename:VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV
* Extending elink:VkAccessFlagBits:
** ename:VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_NV
** ename:VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_NV
* Extending elink:VkQueryType:
** ename:VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_NV
* Extending elink:VkPipelineCreateFlagBits:
** ename:VK_PIPELINE_CREATE_DEFER_COMPILE_BIT_NV
* Extending elink:VkIndexType:
** ename:VK_INDEX_TYPE_NONE_NV
=== New Enums
** elink:VkGeometryFlagBitsNV
** elink:VkGeometryInstanceFlagBitsNV
** elink:VkBuildAccelerationStructureFlagBitsNV
** elink:VkCopyAccelerationStructureModeNV
** elink:VkGeometryTypeNV
** elink:VkRayTracingShaderGroupTypeNV
** elink:VkAccelerationStructureMemoryRequirementsTypeNV
** elink:VkAccelerationStructureTypeNV
=== New Structures
** slink:VkRayTracingPipelineCreateInfoNV
** slink:VkGeometryTrianglesNV
** slink:VkGeometryAABBNV
** slink:VkGeometryDataNV
** slink:VkGeometryNV
** slink:VkAccelerationStructureCreateInfoNV
** slink:VkBindAccelerationStructureMemoryInfoNV
** slink:VkWriteDescriptorSetAccelerationStructureNV
** slink:VkAccelerationStructureMemoryRequirementsInfoNV
** slink:VkPhysicalDeviceRayTracingPropertiesNV
** slink:VkRayTracingShaderGroupCreateInfoNV
** slink:VkAccelerationStructureInfoNV
=== New Functions
* flink:vkCreateAccelerationStructureNV
* flink:vkDestroyAccelerationStructureNV
* flink:vkGetAccelerationStructureMemoryRequirementsNV
* flink:vkBindAccelerationStructureMemoryNV
* flink:vkCmdBuildAccelerationStructureNV
* flink:vkCmdCopyAccelerationStructureNV
* flink:vkCmdTraceRaysNV
* flink:vkCreateRayTracingPipelinesNV
* flink:vkGetRayTracingShaderGroupHandlesNV
* flink:vkGetAccelerationStructureHandleNV
* flink:vkCmdWriteAccelerationStructuresPropertiesNV
* flink:vkCompileDeferredNV
=== 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-raytracing,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.