【发布时间】:2018-10-29 16:46:10
【问题描述】:
Vulkan 有 instance 和 device 扩展,但我在任何地方都找不到关于它们之间区别的任何信息。如果某物是设备扩展或实例扩展,这究竟意味着什么?为什么VK_KHR_external_memory 是设备扩展而VK_KHR_external_memory_capabilities 是实例扩展?为什么它不只是一个单一的、统一的扩展系统?
【问题讨论】:
标签: vulkan
Vulkan 有 instance 和 device 扩展,但我在任何地方都找不到关于它们之间区别的任何信息。如果某物是设备扩展或实例扩展,这究竟意味着什么?为什么VK_KHR_external_memory 是设备扩展而VK_KHR_external_memory_capabilities 是实例扩展?为什么它不只是一个单一的、统一的扩展系统?
【问题讨论】:
标签: vulkan
实例扩展和设备扩展的区别就是实例和设备的区别。
Vulkan 实例是用于设置设备的一段代码。它处理诸如枚举VkPhysicalDevices 和查询它们的属性之类的事情,以及创建VkDevices 本身的调用。
Vulkan 设备用于处理 Vulkan 渲染系统。
设备扩展与特定VkDevice 对象的行为有关,该对象是在激活该扩展的情况下创建的。因此,该扩展无法描述在设备创建之前发生的事情的行为。
例如,外部存储器对渲染系统有明显的影响。所以它是一个设备扩展。但是,特定的VkPhysicalDevice 对象具有不同的属性,可以就其外部存储器功能进行查询。您需要能够在创建设备之前查询这些属性,因为如果设备不提供您需要的属性,那么制造设备根本没有意义。或者至少,使具有该扩展程序的设备处于活动状态。
但设备扩展控制设备的行为。如果您还没有设备,因为您还没有创建设备,因为您正在尝试决定是否要创建设备...您会怎么做?
嗯,这种行为必须是实例扩展。它扩展了 Vulkan 处理设备设置的部分,而不是控制设备本身的行为。
【讨论】: