创建 Vulkan Instance/Device 并启用所有支持的 extensions/features

Create Vulkan Instance/Device with all supported extensions/features enabled

在 Vulkan 中,创建 vkInstancevkDevice 时,必须指定将使用的所有扩展在 instance/device 创建期间启用。同样,在创建 vkDevice 时必须指定所需的所有物理设备功能。所以我的问题是,是否有任何真正的理由反对简单地启用所有可用的 extensions/features,类似于在 OpenGL 中如何始终启用所有 extensions/features 并且应用程序只是查询为了他们的支持?我的意思是使用 vkEnumerateInstanceExtensionPropertiesvkEnumerateDeviceExtensionProperties 和类似的返回的所有扩展。

我问是因为我认为启用所有可用的 extensions/features 比使用不同的方法更简单,我想知道它是否较差,例如导致一些性能开销,仅启用必需的(或可选使用的) ) features/extesions.

enabling all available extensions/features is simpler than using a different approach

有什么不同的做法?在实际使用指向它的函数指针之前,您仍然需要测试扩展是否存在,不是吗?

is there any real reason against simply enabling all availble extensions/features, similarly to [...] OpenGL

使用 Vulkan 的全部目的是您可以很好地控制与 GPU 交互的每个细节。从扩展到是否创建深度缓冲区,再到显式多线程和多设备同步,完全取决于您的需要,仅此而已。

如果您喜欢更轻松的旅程,没有什么能阻止您使用 OpenGL,尤其是如果您不想多走一英里(或者说 10 英里)。在 OpenGL 中编写高性能应用程序比编写中等性能的 Vulkan 应用程序要容易得多。

首先,您不能启用某些功能和扩展的组合..

其次,即使只是启用一项功能也可能导致某种过载。值得注意的是,您不希望启用所有这些强大的 image\buffer 功能。