今天,Khronos®发布了Vulkan®,GLSL和SPIR-V扩展规范集的最终版本,将光线跟踪无缝集成到现有的Vulkan框架中。这是一个重要的里程碑,因为它是业界第一个开放的、跨厂商的、跨平台的光线追踪加速标准,并且可以使用现有的GPU计算或专用的光线追踪核心进行部署。对于在DirectX 12中使用DirectX光线追踪(DXR)的人来说,Vulkan光线追踪将是熟悉的,但也引入了高级功能,例如负载平衡光线追踪设置操作到主机CPU的能力。虽然光线追踪将首先部署在桌面系统上,但这些Vulkan扩展已经被设计为支持并鼓励光线追踪也部署在移动设备上。
这些扩展最初于2020年3月作为临时版本发布。从那时起(见图1),我们已经收到并整合了来自硬件供应商和软件开发人员的反馈,包括Khronos内部和更广泛的行业,但是API的整体形状和提供的功能基本上没有改变。感谢所有审查和使用临时扩展的人,特别是那些提供反馈的人!
今天发布的扩展规范只是Vulkan光线追踪的开始。在接下来的几天和几周内,额外的生态系统组件,如着色器工具链和验证层,将更新为支持光线追踪功能,以确保开发人员可以轻松地在他们的应用程序中使用这些扩展。这些生态系统更新的进展可以在GitHub上跟踪。这将在12月中旬发布支持Khronos Vulkan光线追踪的Vulkan SDK(1.2.162.0或更高版本)时达到高潮。
这篇文章将重点介绍Vulkan光线追踪扩展的临时版本和最终版本之间最重要的区别,并解释这些变化背后的一些原因。
给我看看眼镜!
Vulkan光线追踪扩展集提供的整体功能自其临时版本以来没有改变。今天发布的最后一组扩展是:
- Vulkan扩展规范
- SPIR-V扩展规范
- GLSL扩展规范
扩展结构
最明显的变化是临时的VK_KHR_ray_tracing扩展被分成了3个扩展:
VK_KHR_acceleration_structure
——加快结构建设和管理VK_KHR_ray_tracing_pipeline
-用于光线追踪着色器阶段和管道,以及VK_KHR_ray_query
-为所有着色器阶段提供光线查询特性。
我们收到的反馈是,一些市场希望能够在没有射线管道的情况下支持射线查询,为了避免重复和人为依赖,我们对原始扩展进行了细分。实现者可以选择支持VK_KHR_ray_tracing_pipeline、VK_KHR_ray_query,或者两者都支持,这取决于市场需求。这两个扩展都依赖于VK_KHR_acceleration_structure扩展来为加速结构管理提供一个公共基础。主要的桌面供应商仍然致力于支持射线管道和射线查询。有关对可选特性的支持和其他市场的支持的具体情况,请与各个供应商联系。
Vulkan光线跟踪扩展不再被标记为临时的,因此五个扩展的扩展接口现在在主要的vulkan_core.h头文件中定义,而不是临时的vulkan_beta.h,用户不再需要#define VK_ENABLE_BETA_EXTENSIONS来启用Vulkan光线跟踪功能。
扩展的依赖关系也发生了变化。Vulkan 1.1和SPIR-V 1.4现在是必需的。VK_KHR_acceleration_structure需要Vulkan 1.1, VK_EXT_descriptor_indexing, VK_KHR_buffer_device_address和VK_KHR_deferred_host_operations。我们意识到,一长串的扩展依赖项很烦人,理想情况下,我们希望只需要Vulkan 1.2,但不是所有的平台都支持Vulkan 1.2,我们不想为采用光线追踪功能增加任何人为的障碍。如果得到所有目标市场的支持,应用程序可以直接针对Vulkan 1.2进行简化。我们还考虑不将VK_KHR_deferred_host_operations作为显式依赖项,但是对管道创建的更改需要保留它。我们将VK_KHR_pipeline_library作为VK_KHR_ray_tracing_pipeline的软需求,而不是严格的需求,因此应用程序只需要在实际使用它时启用它。除了VK_KHR_acceleration_structure之外,VK_KHR_ray_tracing_pipeline和VK_KHR_ray_query都至少需要SPIR-V 1.4,因为在该版本中添加了入口点需求的更改。SPIR-V 1.5也可以用于Vulkan 1.2实现。
在功能方面,以下是所有实现的强制要求。
VK_KHR_acceleration_structure要求:
VK_KHR_deferred_host_operations
accelerationStructure
,descriptorBindingAccelerationStructureUpdateAfterBind
,- 所需的所有功能
descriptorIndexing
特性(如果支持Vulkan 1.2)或VK_EXT_descriptor_indexing
扩展和 bufferDeviceAddress
源自Vulkan 1.2或theVK_KHR_buffer_device_address
支持的实现VK_KHR_ray_tracing_pipeline
要求:
VK_KHR_acceleration_structure
,rayTracingPipeline
,rayTracingPipelineTraceRaysIndirect
,rayTraversalPrimitiveCulling
,如果VK_KHR_ray_query
也支持,和VK_KHR_pipeline_library
。
支持的实现VK_KHR_ray_query
要求:
VK_KHR_acceleration_structure
,rayQuery
。
此外,还有一些可选用扩展定义的功能。
为VK_KHR_acceleration_structure
这些都是:
accelerationStructureCaptureReplay
,accelerationStructureIndirectBuild
,accelerationStructureHostCommands
。
为VK_KHR_ray_tracing_pipeline
这些都是:
rayTracingPipelineShaderGroupHandleCaptureReplay
,rayTracingPipelineShaderGroupHandleCaptureReplayMixed
,rayTraversalPrimitiveCulling
,如果VK_KHR_ray_query
不支持。
欲了解更多信息,请访问这里。