14

在新的 Vulkan API 中,需要一个结构来创建VkInstance: VkApplicationInfo。这是定义:

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.,这使得它更加无用。以后可以通过使用(例如)avkGetAppInfo(instance)等在应用程序中检索此结构中的信息吗?这个结构背后有一个邪恶的总体计划吗?或者只是一个糟糕的设计?无论如何,我很好奇它为什么存在以及为什么我应该使用它。

4

1 回答 1

17

从规范:

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

这就是它的用途。

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

所以 Vulkan 有两个选择:它可以假装不可避免的事情不会发生,这意味着 IHV 无论如何都会这样做,使用各种启发式方法来检测您的应用程序。或者您的应用程序可以只自我介绍并省去中间人。

Vulkan 允许您执行后者。表现良好的引擎可能会代表您的程序做同样的事情。

于 2016-07-07T23:20:57.337 回答