VkApplicationInfo有什么意义?

Jer*_*ov2 7 c graphics api-design vulkan

在新的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;
Run Code Online (Sandbox Code Playgroud)

我认为不必传递应用程序名称,应用程序版本,引擎名称或引擎版本.也许实现可以使用该pNext成员进行任何操作或者可以检查实现是否支持apiVersion指定的.除此之外,我不明白为什么指定其他成员.Vulkan规范说你甚至可以使用NULL而不是使用实际的VkApplicationInfo,这使它更加无用.可以通过使用(例如)a vkGetAppInfo(instance)或类似的方法在应用程序中稍后检索此结构中的信息吗?这个结构背后有一个邪恶的总体规划吗?或者只是一个糟糕的设计?无论如何,我很好奇为什么它存在以及为什么我应该使用它.

Nic*_*las 10

从规格:

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

这就是它的用途.

任何特定于应用程序的优化都将发生在任何足以吸引这种兴趣的程序中.这是不可避免的.

所以Vulkan有两个选择:它可以假装不可避免的某种情况不会发生,这意味着IHV无论如何都会这样做,使用各种启发式检测你的应用程序.或者你的应用程序可以自我介绍并切断中间人.

Vulkan允许你做后者.表现良好的引擎也可能代表您的程序.

  • @ Jerfov2 IHV代表Google的独立硬件供应商。 (2认同)