Vulkan:实例和设备扩展之间的区别?

Vulkan: Difference between instance and device extensions?

Vulkan 有 instancedevice 扩展,但我无法在任何地方找到关于它们之间区别的任何信息。如果某物是设备扩展或实例扩展,这到底意味着什么?为什么 VK_KHR_external_memory a device extension and VK_KHR_external_memory_capabilities 是实例扩展?为什么它不是一个单一的、统一的扩展系统?

实例扩展和设备扩展的区别就是实例和设备的区别。

Vulkan 实例是用于设置设备的一段代码。它处理枚举 VkPhysicalDevices 和查询它们的属性,以及创建 VkDevices 本身的调用。

Vulkan 设备用于处理 Vulkan 渲染系统。

设备扩展与特定 VkDevice 对象的行为有关,该对象是在激活该扩展的情况下创建的。因此,该扩展无法描述 在设备创建 .

之前发生的事情的行为

例如,外部存储器对渲染系统有明显的影响。所以它是一个设备扩展。但是,特定的 VkPhysicalDevice 对象具有不同的属性,可以根据它们的外部存储器功能查询这些属性。在创建设备之前,您需要能够查询这些属性,因为如果设备不提供您需要的属性,那么制造设备就毫无意义。或者至少,使具有该扩展名的设备处于活动状态。

但是设备扩展管理 设备 的行为。如果您还没有设备是因为您还没有创建一个设备,因为您正在尝试决定是否要创建一个设备...您会怎么做?

嗯,该行为必须是实例扩展。它扩展了 Vulkan 的一部分,处理设备的设置,而不是管理设备本身的行为。