本サイトでは、アフィリエイト広告およびGoogleアドセンスを利用しています。

VK_LAYER_LUNARG_standard_validation は使用不可に

PC環境を一新したタイミングで、 Vulkan SDK を 1.2.135 に更新しました。これが今回出遭った事件の始まりでした。タイトルにもあるように VK_LAYER_LUNARG_standard_validation が使えなくなったのです。

リリースノートより引用

状況

こまめにSDKの更新をチェックして、リリースノートにも目を通している人ならば既知の内容だと思います。少し前から VK_LAYER_LUNARG_standard_validation の検証レイヤーは非推奨とされ Deprecated マークが付いていたようです。それが、 Vulkan SDK 1.2.135 から完全に削除となり、使用不可能状態になりました。

リリースノート: https://vulkan.lunarg.com/doc/sdk/1.2.135.0/windows/release_notes.html

デバッグレポート用の関数アドレスも取得でき、動いているだろうと安心してしまったのが、気づくのが遅れた原因でした。

対応策

自分が考えた対応策としては以下の2点です。

  • Vulkan SDK 1.2.135 をアンインストールして、昔のバージョンに戻す
    • 1.1.130 をインストールしたところ使用可能状態に戻りました。
  • 将来も使えるコードに書き直す

今回コードの実装・確認を急いでいたので、昔のバージョンに戻して作業を続行しました。
デバッグ実行時に以下に示すようにレイヤーのDLLがロードされているようなら動作しています。

‘C:\VulkanSDK\1.1.130.0\Bin\VkLayer_khronos_validation.dll’ が読み込まれました。シンボルが読み込まれました。

SDK を旧バージョンに戻す場合には、必ず新しいバージョンをアンインストールが必要となるようです。単に旧バージョンを追加インストールでは機能の復活にはなりません(でした)。

書き直す方法

今後も使えるコードに書き直すためには、 “VK_LAYER_LUNARG_standard_validation” を変更します。変更先は、 ” VK_LAYER_KHRONOS_validation” になります。

知っての通り、VK_LAYER_LUNARG_standard_validation はメタレイヤーであり、そのメタレイヤー自体が廃止の方向となったために起こった状態となります。

まとめ

まだまだ多くのアプリケーション開発において、 VK_LAYER_LUNARG_standard_validation を有効化してチェックするとなっているように思います。しかし今回自分が陥ったように検証レイヤーが動いていない、となると不具合の発見が遅れ、将来のどこかでバグが爆発するかなと思います。

また多くの Vulkan チュートリアルの文献では、従来のままになっているので注意が必要です。 Vulkan のレイヤーの仕組みがこんな風に変わるとは自分も思っていませんでした。新しいレイヤーが随時増えていくのは見えていましたが、メタレイヤー自体が廃止になるとは…。

少し調べてみたら Vulkan SDK 1.0.57 の時点で非推奨の扱いとなっているドキュメントが見当たりました。全然つい最近の話ではなかったですね …

Vulkan
すらりんをフォローする
すらりん日記

コメント

  1. cx20 より:

    vulkan_book_1のSimple Triangleのサンプルを試したところ、Release版では動くのにDebug版では落ちるので、何でだろう?と悩んでいたところでした。

    https://github.com/techlabxe/vulkan_book_1/blob/master/common/vkappbase.cpp#L179

    //const char* layers[] = { “VK_LAYER_LUNARG_standard_validation” };
    const char* layers[] = { “VK_LAYER_KHRONOS_validation” };

    に書き換えたら動作するようになりました。情報ありがとうございます!

タイトルとURLをコピーしました