mirror of
https://github.com/status-im/Vulkan-Docs.git
synced 2025-01-11 14:34:08 +00:00
f1a7c4b4f3
* 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.
198 lines
7.3 KiB
Plaintext
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.
|