Vulkan_Ray Tracing 02_初始化

本文主要参考NVIDIA Vulkan Ray Tracing Tutorial教程,环境配置与程序均可参照此文档执行(个人水平有限,如有错误请参照原文)。

一、初始化

为了能够使用Vulkan光线追踪,我们需要VK_KHR_ACCELERATION_STRUCTURE和VK_KHR_RAY_TRACING_PIPELINE拓展,以上两个扩展还依赖于其他扩展,因此需要添加以下所有扩展程序:

// #VKRay: 激活光线追踪扩展
VkPhysicalDeviceAccelerationStructureFeaturesKHR 
accelFeature{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_FEATURES_KHR};
//加速结构拓展支持
contextInfo.addDeviceExtension(VK_KHR_ACCELERATION_STRUCTURE_EXTENSION_NAME, false, &accelFeature); 
VkPhysicalDeviceRayTracingPipelineFeaturesKHR rtPipelineFeature{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_FEATURES_KHR};
//vkCmdTraceRaysKHR可使拓展
contextInfo.addDeviceExtension(VK_KHR_RAY_TRACING_PIPELINE_EXTENSION_NAME, false, &rtPipelineFeature); 
//光线追踪管道拓展
contextInfo.addDeviceExtension(VK_KHR_DEFERRED_HOST_OPERATIONS_EXTENSION_NAME);  

此处添加的拓展会添加到contextInfo中,并根据vkEnumerateDeviceExtensionProperties获取的拓展集合判断设备是否支持光追拓展。

之后将拓展填充至VkDeviceCreateInfo的enabledExtensionCount与ppEnabledExtensionNames
上,然后调用vkCreateDevice创建vulkan设备。

调用成功之后,程序会启用Vulkan光追功能并使用相关设备光追功能的信息填充上边的两个结构体。

在这里插入图片描述

之后,我们需要新增一个初始化光追的函数initRayTracing()以及一个存储当前显卡光线线追踪能力的成员变量:

// #VKRay
void                                            initRayTracing();
VkPhysicalDeviceRayTracingPipelinePropertiesKHR m_rtProperties{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_PROPERTIES_KHR};

initRayTracing函数的具体实现如下所示:

// 初始化Vulkan光线追踪
void HelloVulkan::initRayTracing()
{
  // 查询显卡支持的光追属性
  VkPhysicalDeviceProperties2 prop2{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2};
  prop2.pNext = &m_rtProperties;
  vkGetPhysicalDeviceProperties2(m_physicalDevice, &prop2);
}

此处可以使用vkGetPhysicalDeviceProperties2来查询 GPU 支持的光线追踪功能拓展值。

其中需要注意两个数据:

  1. 最大递归深度:即从单个光线执行的嵌套光线追踪调用的数量。即是光线在递归路径追踪器中可以在场景中反弹的次数。出于性能目的,递归实际上应保持在最低限度,有利于循环公式。
  2. 着色器标头大小:在创建着色器绑定表(SBT)的时候时候需要用到。
    在这里插入图片描述
    最后在更新描述符集之后,调用initRayTracing()函数即可。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值