Vulkan具有 instance 和 device 扩展名,但是我找不到任何有关它们之间的区别的信息。设备扩展或实例扩展到底是什么意思?为什么VK_KHR_external_memory是设备扩展,而VK_KHR_external_memory_capabilities是实例扩展?为什么它不只是一个统一的扩展系统?
答案 0 :(得分:7)
实例扩展和设备扩展之间的差异就是实例和设备之间的差异。
Vulkan实例是用于设置设备的一段代码。它处理诸如枚举VkPhysicalDevice
和查询其属性之类的事情,以及处理自己创建VkDevice
的调用。
Vulkan设备用于处理Vulkan渲染系统。
设备扩展与激活该扩展时创建的特定VkDevice
对象的行为有关。因此,该扩展名无法描述在设备创建前 发生的事情的行为。
例如,外部存储器对渲染系统有明显的影响。因此,它是设备扩展。但是,特定的VkPhysicalDevice
对象具有不同的属性,可以针对其外部存储器功能进行查询。您需要能够在创建设备之前 来查询这些属性,因为如果设备没有提供所需的属性,那么根本就没有必要制造设备。或者至少是使带有该扩展名的设备处于活动状态。
但是设备扩展控制设备的行为。如果由于尚未创建设备而还没有设备,因为您正在尝试决定是否完全创建设备...您会做什么?
好吧,该行为必须是实例扩展。它扩展了Vulkan处理设备设置的部分,而不是控制设备本身行为的部分。