Vulkan确认哪些物理设备可用

确认哪些物理设备可用
Vulkan的所有工作都是在逻辑设备上进行的,根据逻辑设备创建资源、管理逻辑设备的内存、记录通过逻辑设备创建的命令缓冲区,以及向逻辑设备队列提交需要处理的命令。在我们编写的应用程序中,逻辑设备代表为之启用了一系列功能和扩展的物理设备。要创建逻辑设备,需要在指定硬件平台上选择一个可用的物理设备。怎样才能知道一台指定的计算机上有哪些物理设备和哪些物理设备是可用的呢?这就需要确认它们。

具体处理过程
(1)获取已创建的Vulkan实例的句柄,将其赋予VkInstance类型的变量instance中。
(2)创建一个uint32_t类型的变量,将其命名为devices_count。
(3)调用vkEnumeratePhysicalDevices(instance,&devices_count,nullptr)函数。将第一个参数设置为Vulkan实例的句柄;将第二个参数设置为指向devices_count变量的指针(devices_count变量的地址);将第三个参数设置为nullptr。
(4)如果这个函数调用操作成功完成了,devices_count变量就会被赋予所有可用物理设备的数量。
(5)为存储物理设备名单准备存储空间,最佳解决方案是使用元素类型为VkPhysicalDevice的std::vector容器。将存储std::vector容器的这个变量命名为available_devices。
(6)调整std::vector容器的大小,使之至少能够容纳不小于devices_count变量值数量的物理设备数据。
(7)调用vkEnumeratePhysicalDevices(instance,&devices_count,&available_devices[0])函数,仍将第一个参数设置为Vulkan实例的句柄;将第二个参数设置为指向devices_count变量的指针;但应将第三个参数设置为元素类型为VkPhysicalDevice的数组,且该数组中元素(每个元素代表一个可用的物理设备)的个数应不小于devices_count变量的值。本例将第三个参数设置为std::vector容器available_devices中第一个元素的地址。
(8)如果该函数调用操作成功完成,std::vector容器available_devices中就会含有指定硬件平台上支持Vulkan的所有物理设备的名单。

具体运行情况
确认可用物理设备的操作可分为两个阶段,第一个阶段是查明指定硬件平台上有多少个可用的物理设备。通过将最后一个参数设置为nullptr,调用vkEnumeratePhysicalDevices()函数可以做到这一点。

Vulkan确认哪些物理设备可用
这样我们就能够知道有多少个物理设备支持Vulkan,从而知道为了存储这些设备的句柄需要准备多少存储空间。做好准备工作后,我们就可以执行第二个阶段,并获取物理设备的句柄。第二个阶段还是调用vkEnumeratePhysicalDevices()函数,但是必须将它的第三个参数设置为指向VkPhysicalDevice类型数组的指针。

Vulkan确认哪些物理设备可用
vkEnumeratePhysicalDevices()函数调用操作成功完成后,我们先前准备的存储空间就会装满物理设备的句柄,而这些物理设备就是安装在运行我们编写的应用程序的计算机上的物理设备。
现在我们已经获取了可用物理设备的名单,通过浏览这份名单,可检查每个设备的属性,查明可在这些物理设备上执行哪些操作并查明这些物理设备支持哪些扩展。

酷客网相关文章:

赞(0)

评论 抢沙发

评论前必须登录!

 

Vulkan实战