VkApplicationInfo的作用是什么?

18
在新的Vulkan API中,需要一个结构体来创建 VkInstanceVkApplicationInfo。以下是定义:
typedef struct VkApplicationInfo {
    VkStructureType    sType;
    const void*        pNext;
    const char*        pApplicationName;
    uint32_t           applicationVersion;
    const char*        pEngineName;
    uint32_t           engineVersion;
    uint32_t           apiVersion;
} VkApplicationInfo;

我认为没有必要传递应用程序名称、应用程序版本、引擎名称或引擎版本。也许实现可以使用 pNext 成员做一些事情,或者检查实现是否支持指定的 apiVersion。除此之外,我不理解为什么要指定其他成员。Vulkan 规范说,你甚至可以使用 NULL 而不是使用实际的 VkApplicationInfo,这使其变得更加无用。这个结构体的信息是否可以在应用程序中稍后通过使用(例如)vkGetAppInfo(instance) 或类似方法来获取?这个结构体背后有一个邪恶的主计划吗?还是只是一个糟糕的设计?无论如何,我很想知道它存在的原因以及为什么我应该使用它。


我也不知道pEngineName是用来干什么的。它应该是字符串"Godot"、"Unity"或类似的东西吗? - undefined
1个回答

20

来自规范:

如果不为NULL,[pApplicationInfo]可以帮助实现识别固有于应用程序类的行为。

所以这就是它的作用。

IHVs(独立硬件供应商)将为任何受欢迎到足以吸引这种兴趣的程序提供特定于应用程序的优化。这是不可避免的。

因此,Vulkan有两个选择:要么假装不可避免的事情不会发生,这意味着IHV仍然会使用各种启发式方法来检测您的应用程序。或者您的应用程序可以自我介绍并切断中间人。

Vulkan允许您执行后者。并且表现良好的引擎也可能代表您执行相同的操作。


IHV是什么?(硬件供应商之类的东西,对吧?) - Jerfov2
1
你在谈论什么样的优化?你提到了“驱动程序特定的优化”,但这是什么意思? - Jerfov2
3
IHV代表独立硬件厂商,来自谷歌。 - Zieng
@Jerfov2 IHV在流行应用程序中有优化机会。 有些不会妥协结果,有些则无法区分,还有一些是小的妥协。 例如,IHV可以使用离线工具测试不同的编译器设置,以针对其硬件的特定版本优化着色器,在有限的寄存器和缓存资源之间平衡性能等。 另一个例子是将高精度32位值替换为低精度16位值,其中性能提高而结果无法区分。 IHV可以在运行时检测特定的应用程序和着色器,并进行替换以改善用户体验。 - Greg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接