vkEnumerateInstanceExtensionProperties : pLayerName 参数是什么意思?

问题描述

我想知道运行我的软件的 PC 是否具有特定的 GPU 扩展。为了实现这一点,我使用了这个函数 vkEnumerateInstanceExtensionProperties,但我不明白第一个参数。

如果我使用 NULL 为 pLayerName 参数调用函数,则 pPropertyCount 设置为 12。

但根据 OpenGL Extensions Viewer,我的 GPU 上有超过 12 个可用的扩展。 OpenGL 扩展查看器按前缀(GL_KHR、GL_EXT、GL_NV、GL_ARB...)对扩展进行排序,这是“层”吗?

解决方法

没有“GPU 扩展”这样的东西。扩展只是一种机制,它允许 API 的实现公开比 API 通常更多的功能。对于 GPU 而言,通过扩展公开的功能只是功能,与 GPU 提供的任何其他通过 API 直接公开的功能没有区别。

扩展总是与某些 API 相关。这就是为什么它们被称为“扩展”的原因;它们“扩展”了 API 的功能。 OpenGL 和 Vulkan 是独立的 API;因此,它们提供了不同的可能扩展。其中一些在其他 API 中具有等效版本,但在大多数情况下,扩展集完全不同。

OpenGL 扩展查看器将告诉您没有任何可通过 Vulkan API 访问的内容。

Vulkan 层不是扩展。层通常由既不是您的应用程序也不是 Vulkan 实现本身的代码提供。层位于两者之间,它们的存在主要是为了允许某些程序跟踪从应用程序到实现的 API 调用和逻辑。