14

VkInstance新しい Vulkan API には、 :を作成するために必要な構造体があります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、さらに役に立たなくなります。この構造体からの情報は、(たとえば) などを使用してアプリで後で取得できますvkGetAppInfo(instance)か? この構造の背後にある邪悪なマスター プランはありますか? それともただのデザインの悪さ?とにかく、なぜそれが存在し、なぜそれを使うべきなのかに興味があります。

4

1 に答える 1

17

仕様から:

NULL でない場合、[pApplicationInfo] は、実装がアプリケーションのクラスに固有の動作を認識するのに役立ちます。

それがそのためです。

IHV (独立系ハードウェア ベンダー) は、その種の関心を引くほど人気のあるプログラムに対して、アプリケーション固有の最適化を提供する予定です。それは避けられません。

したがって、Vulkan には 2 つの選択肢があります。避けられないことが何らかの形で起こらないふりをすることができます。つまり、IHV はさまざまなヒューリスティックを使用してアプリケーションを検出します。または、アプリケーションを自己紹介して仲介者を排除することもできます。

Vulkan では、後者を行うことができます。また、行儀の良いエンジンは、プログラムに代わって同様のことを行う可能性があります。

于 2016-07-07T23:20:57.337 に答える