创建 instance/device 后,有什么方法可以启用扩展或功能吗?

Is there any way to enable extensions or features after an instance/device is created?

我正在用 Vulkan 做一些包装工作,使 API 更安全,我想知道我是否可以先创建一个实例或设备,然后再启用扩展或功能。

首先,根据规范:

VUID-VkDeviceCreateInfo-pProperties-04451

If the VK_KHR_portability_subset extension is included in pProperties of vkEnumerateDeviceExtensionProperties, ppEnabledExtensionNames must include "VK_KHR_portability_subset"

这看起来不错,但请注意,要在设备上启用 VK_KHR_portability_subset 扩展,您必须启用其依赖项 VK_KHR_get_physical_device_properties2,这是一个 实例 扩展.这使得实例必须启用 VK_KHR_get_physical_device_properties2 以防 04451 将检查设备何时创建。

其次,以后开启功能会很方便,比如用户传入了一些参数,需要一些功能,我可以隐式为这个用户开启。

功能和扩展在创建时指定。从那时起,它们就是实例或设备的固有部分。以后不能修改。

您可以创建新的实例或设备。但是你不能改变现有的。