Vulkan-Docs/appendices/VK_NV_ray_tracing.txt

198 lines
7.2 KiB
Plaintext
Raw Normal View History

Change log for November 4, 2018 Vulkan 1.1.91 spec update: * Update release number to 91. Public Issues: * Update Ubuntu subsystem build instructions in `BUILD.adoc` (public pull request 624). * Delete the `VK_KHR_mir_surface` extension from the Specification and XML, due to EOL of the only driver known to have supported it, and near-EOL of Mir itself (public issue 814). * Fix options for some figures that were using old ones (public pull request 841). * Fix various accidentally repeated words (public pull request 843). * Use `time.process_time()`, introduced in Python 3.3, in the scripts instead of `time.clock()`, which will be removed in Python 3.8 (public pull request 844). Internal Issues: * Update valid usage statements for `VK_ANDROID_external_memory_android_hardware_buffer` in slink:VkMemoryAllocateInfo, slink:VkImportAndroidHardwareBufferInfoANDROID, and flink:vkGetAndroidHardwareBufferPropertiesANDROID to actually be verifiable (internal issue 1419). * Update valid usage statements for `VK_ANDROID_external_memory_android_hardware_buffer` in slink:VkMemoryAllocateInfo, slink:VkImageCreateInfo, and slink:VkImageViewCreateInfo to move valid usage statements in doubly-nested bullet points up one level, accomodating limitations of the valid usage extraction script that creates `validusage.json` (internal issue 1434). * Fix typo etext:VK_ACCESS_SHADING_RATE_IMAGE_BIT_NV to the correct ename:VK_ACCESS_SHADING_RATE_IMAGE_READ_BIT_NV. * Add missing etext:VK_STRUCTURE_TYPE_* tokens to appendices for extensions missing them. New Extensions: * `VK_AMD_memory_overallocation_behavior` * `VK_NV_ray_tracing`, replacing `VK_NVX_raytracing`
2018-11-04 06:50:13 +00:00
include::meta/VK_NV_ray_tracing.txt[]
*Last Modified Date*::
2018-11-20
Change log for November 4, 2018 Vulkan 1.1.91 spec update: * Update release number to 91. Public Issues: * Update Ubuntu subsystem build instructions in `BUILD.adoc` (public pull request 624). * Delete the `VK_KHR_mir_surface` extension from the Specification and XML, due to EOL of the only driver known to have supported it, and near-EOL of Mir itself (public issue 814). * Fix options for some figures that were using old ones (public pull request 841). * Fix various accidentally repeated words (public pull request 843). * Use `time.process_time()`, introduced in Python 3.3, in the scripts instead of `time.clock()`, which will be removed in Python 3.8 (public pull request 844). Internal Issues: * Update valid usage statements for `VK_ANDROID_external_memory_android_hardware_buffer` in slink:VkMemoryAllocateInfo, slink:VkImportAndroidHardwareBufferInfoANDROID, and flink:vkGetAndroidHardwareBufferPropertiesANDROID to actually be verifiable (internal issue 1419). * Update valid usage statements for `VK_ANDROID_external_memory_android_hardware_buffer` in slink:VkMemoryAllocateInfo, slink:VkImageCreateInfo, and slink:VkImageViewCreateInfo to move valid usage statements in doubly-nested bullet points up one level, accomodating limitations of the valid usage extraction script that creates `validusage.json` (internal issue 1434). * Fix typo etext:VK_ACCESS_SHADING_RATE_IMAGE_BIT_NV to the correct ename:VK_ACCESS_SHADING_RATE_IMAGE_READ_BIT_NV. * Add missing etext:VK_STRUCTURE_TYPE_* tokens to appendices for extensions missing them. New Extensions: * `VK_AMD_memory_overallocation_behavior` * `VK_NV_ray_tracing`, replacing `VK_NVX_raytracing`
2018-11-04 06:50:13 +00:00
*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
Change log for November 18, 2018 Vulkan 1.1.93 spec update: * Update release number to 93. Public Issues: * Add spec language for ename:VK_INDEX_TYPE_NONE_NV and fix up slink:VkAccelerationStructureTypeNV (public issue 848). * Add missing suffix in description of slink:VkSubpassDescription2KHR parameters (public pull request 851). * Fix miscellaneous typos (public pull request 855). * Add driver ID for Pastel (public pull request 856). * Add missing include directive for slink:VkMemoryWin32HandlePropertiesKHR implicit valid usage statements (public pull request 857). Internal Issues: * Restrict the storage classes permitted for SPIR-V atomics to what is actually supported, in the <<spirvenv-module-validation, Validation Rules within a Module>> section (internal issue 1123). * Add a missing Valid Usage statement to slink:VkRenderPassCreateInfo for the case pname:stencilLoadOp == ename:VK_LOAD_OP_CLEAR, pname:layout == ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL (internal issue 1408). * Modify optimize-pdf script and Makefile to retain non-optimized original PDF on errors (internal issue 1435). * Add <<spirvenv-module-validation, SPIR-V validation rules>> stating that only the listed code:BuiltIn decorations are permitted, and only when relevante features and extensions are enabled (internal issue 1449). * Remove some duplicated Valid Usage IDs created via cut & paste error (internal issue 1455). * Build HTML output for extension reference pages (internal issue 1461). ** Improve genRef.py handling of aliases defined inside other refpages. ** Emit aliases in pygenerator.py. ** Add XML noautovalidity flag for VkRenderPassCreateFlags until there are some corresponding FlagBits defined. ** Corrected types= attribute on some refpage blocks to 'flags' ** Added refpage blocks for some missing types detected by CI tests. * Fixed many Valid Usage statement issues in slink:VkRenderPassCreateInfo, slink:VkSubpassDescription, slink:VkSubpassDescription2KHR, slink:VkSubpassDependency2KHR, flink:vkCmdBeginRenderPass, flink:vkCmdBeginRenderPass2KHR, and slink:VkRenderPassBeginInfo discovered while adding `VK_KHR_create_renderpass2` to the validation layers. New Extensions: * `VK_EXT_scalar_block_layout` * `VK_EXT_separate_stencil_usage`
2018-11-18 10:55:14 +00:00
* Extending elink:VkIndexType
** ename:VK_INDEX_TYPE_NONE_NV
Change log for November 4, 2018 Vulkan 1.1.91 spec update: * Update release number to 91. Public Issues: * Update Ubuntu subsystem build instructions in `BUILD.adoc` (public pull request 624). * Delete the `VK_KHR_mir_surface` extension from the Specification and XML, due to EOL of the only driver known to have supported it, and near-EOL of Mir itself (public issue 814). * Fix options for some figures that were using old ones (public pull request 841). * Fix various accidentally repeated words (public pull request 843). * Use `time.process_time()`, introduced in Python 3.3, in the scripts instead of `time.clock()`, which will be removed in Python 3.8 (public pull request 844). Internal Issues: * Update valid usage statements for `VK_ANDROID_external_memory_android_hardware_buffer` in slink:VkMemoryAllocateInfo, slink:VkImportAndroidHardwareBufferInfoANDROID, and flink:vkGetAndroidHardwareBufferPropertiesANDROID to actually be verifiable (internal issue 1419). * Update valid usage statements for `VK_ANDROID_external_memory_android_hardware_buffer` in slink:VkMemoryAllocateInfo, slink:VkImageCreateInfo, and slink:VkImageViewCreateInfo to move valid usage statements in doubly-nested bullet points up one level, accomodating limitations of the valid usage extraction script that creates `validusage.json` (internal issue 1434). * Fix typo etext:VK_ACCESS_SHADING_RATE_IMAGE_BIT_NV to the correct ename:VK_ACCESS_SHADING_RATE_IMAGE_READ_BIT_NV. * Add missing etext:VK_STRUCTURE_TYPE_* tokens to appendices for extensions missing them. New Extensions: * `VK_AMD_memory_overallocation_behavior` * `VK_NV_ray_tracing`, replacing `VK_NVX_raytracing`
2018-11-04 06:50:13 +00:00
=== New Enums
** elink:VkGeometryFlagBitsNV
** elink:VkGeometryInstanceFlagBitsNV
** elink:VkBuildAccelerationStructureFlagBitsNV
** elink:VkCopyAccelerationStructureModeNV
** elink:VkGeometryTypeNV
** elink:VkRayTracingShaderGroupTypeNV
** elink:VkAccelerationStructureMemoryRequirementsTypeNV
Change log for November 18, 2018 Vulkan 1.1.93 spec update: * Update release number to 93. Public Issues: * Add spec language for ename:VK_INDEX_TYPE_NONE_NV and fix up slink:VkAccelerationStructureTypeNV (public issue 848). * Add missing suffix in description of slink:VkSubpassDescription2KHR parameters (public pull request 851). * Fix miscellaneous typos (public pull request 855). * Add driver ID for Pastel (public pull request 856). * Add missing include directive for slink:VkMemoryWin32HandlePropertiesKHR implicit valid usage statements (public pull request 857). Internal Issues: * Restrict the storage classes permitted for SPIR-V atomics to what is actually supported, in the <<spirvenv-module-validation, Validation Rules within a Module>> section (internal issue 1123). * Add a missing Valid Usage statement to slink:VkRenderPassCreateInfo for the case pname:stencilLoadOp == ename:VK_LOAD_OP_CLEAR, pname:layout == ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL (internal issue 1408). * Modify optimize-pdf script and Makefile to retain non-optimized original PDF on errors (internal issue 1435). * Add <<spirvenv-module-validation, SPIR-V validation rules>> stating that only the listed code:BuiltIn decorations are permitted, and only when relevante features and extensions are enabled (internal issue 1449). * Remove some duplicated Valid Usage IDs created via cut & paste error (internal issue 1455). * Build HTML output for extension reference pages (internal issue 1461). ** Improve genRef.py handling of aliases defined inside other refpages. ** Emit aliases in pygenerator.py. ** Add XML noautovalidity flag for VkRenderPassCreateFlags until there are some corresponding FlagBits defined. ** Corrected types= attribute on some refpage blocks to 'flags' ** Added refpage blocks for some missing types detected by CI tests. * Fixed many Valid Usage statement issues in slink:VkRenderPassCreateInfo, slink:VkSubpassDescription, slink:VkSubpassDescription2KHR, slink:VkSubpassDependency2KHR, flink:vkCmdBeginRenderPass, flink:vkCmdBeginRenderPass2KHR, and slink:VkRenderPassBeginInfo discovered while adding `VK_KHR_create_renderpass2` to the validation layers. New Extensions: * `VK_EXT_scalar_block_layout` * `VK_EXT_separate_stencil_usage`
2018-11-18 10:55:14 +00:00
** elink:VkAccelerationStructureTypeNV
Change log for November 4, 2018 Vulkan 1.1.91 spec update: * Update release number to 91. Public Issues: * Update Ubuntu subsystem build instructions in `BUILD.adoc` (public pull request 624). * Delete the `VK_KHR_mir_surface` extension from the Specification and XML, due to EOL of the only driver known to have supported it, and near-EOL of Mir itself (public issue 814). * Fix options for some figures that were using old ones (public pull request 841). * Fix various accidentally repeated words (public pull request 843). * Use `time.process_time()`, introduced in Python 3.3, in the scripts instead of `time.clock()`, which will be removed in Python 3.8 (public pull request 844). Internal Issues: * Update valid usage statements for `VK_ANDROID_external_memory_android_hardware_buffer` in slink:VkMemoryAllocateInfo, slink:VkImportAndroidHardwareBufferInfoANDROID, and flink:vkGetAndroidHardwareBufferPropertiesANDROID to actually be verifiable (internal issue 1419). * Update valid usage statements for `VK_ANDROID_external_memory_android_hardware_buffer` in slink:VkMemoryAllocateInfo, slink:VkImageCreateInfo, and slink:VkImageViewCreateInfo to move valid usage statements in doubly-nested bullet points up one level, accomodating limitations of the valid usage extraction script that creates `validusage.json` (internal issue 1434). * Fix typo etext:VK_ACCESS_SHADING_RATE_IMAGE_BIT_NV to the correct ename:VK_ACCESS_SHADING_RATE_IMAGE_READ_BIT_NV. * Add missing etext:VK_STRUCTURE_TYPE_* tokens to appendices for extensions missing them. New Extensions: * `VK_AMD_memory_overallocation_behavior` * `VK_NV_ray_tracing`, replacing `VK_NVX_raytracing`
2018-11-04 06:50:13 +00:00
=== 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>>
Change log for November 4, 2018 Vulkan 1.1.91 spec update: * Update release number to 91. Public Issues: * Update Ubuntu subsystem build instructions in `BUILD.adoc` (public pull request 624). * Delete the `VK_KHR_mir_surface` extension from the Specification and XML, due to EOL of the only driver known to have supported it, and near-EOL of Mir itself (public issue 814). * Fix options for some figures that were using old ones (public pull request 841). * Fix various accidentally repeated words (public pull request 843). * Use `time.process_time()`, introduced in Python 3.3, in the scripts instead of `time.clock()`, which will be removed in Python 3.8 (public pull request 844). Internal Issues: * Update valid usage statements for `VK_ANDROID_external_memory_android_hardware_buffer` in slink:VkMemoryAllocateInfo, slink:VkImportAndroidHardwareBufferInfoANDROID, and flink:vkGetAndroidHardwareBufferPropertiesANDROID to actually be verifiable (internal issue 1419). * Update valid usage statements for `VK_ANDROID_external_memory_android_hardware_buffer` in slink:VkMemoryAllocateInfo, slink:VkImageCreateInfo, and slink:VkImageViewCreateInfo to move valid usage statements in doubly-nested bullet points up one level, accomodating limitations of the valid usage extraction script that creates `validusage.json` (internal issue 1434). * Fix typo etext:VK_ACCESS_SHADING_RATE_IMAGE_BIT_NV to the correct ename:VK_ACCESS_SHADING_RATE_IMAGE_READ_BIT_NV. * Add missing etext:VK_STRUCTURE_TYPE_* tokens to appendices for extensions missing them. New Extensions: * `VK_AMD_memory_overallocation_behavior` * `VK_NV_ray_tracing`, replacing `VK_NVX_raytracing`
2018-11-04 06:50:13 +00:00
* <<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.