Vulkan でも IDXGISwapChain を使う

今回の記事は実験的なネタです。 DirectX では描画結果を画面に反映するのに IDXGISwapChain を使用します。一方 Vulkan では VkSwapchainKHR を生成して描画結果を画面に反映します。それぞれのAPIがそれぞれの SwapChain を使うように出来ているのですが、ここで敢えて Vulkan の描画結果を DirectXの IDXGISwapChain に書き込むような実験をしてみました。

結果はおおよそうまく動作しているようで、その結果を撮影しました。ただ動作画面を見てもよくわからないものと思います。描画結果が壊れていないなぁくらいの感じでしかありません。

類似実験について

以前、当ブログで色々と実験していました。テクスチャを Vulkan / DirectX11 とで行き来できないか、など。それが今回のものと近いと思います。

これらの結果を駆使して、Vulkan の描画結果を DXGISwapChain のバッファへ書き込むことを実現しています。

動作状況など

Vulkan SDK 1.2.135 を使用して開発しています。拡張機能を多めに使用していますが、検証レイヤーから文句を言われることなく動作できています。

  • NVIDIA GeForce RTX 2060Super (ドライバ 442.92)
  • RADEON Vega11

手持ちのGPUのみですが NVIDIA / AMD の両方で動作の確認も出来ました。しかし、 AMD のほうは期待する値が返ってこず不定値が入っていたりするなど、拡張機能の使用にやや注意が必要のようです。また Intel UHD 620 の環境ではクラッシュこそしないものの、正常動作させることは今のところ出来ていません。

いずれの環境も Windows10 64bit 1909バージョンで動作させていました。

実装について

以前の内容と同じように実装しています。以前は DirectX11を使っていましたが、今回 DirectX12 を使って IDXGISwapChain を生成しています。また Present を実行すると妙な不具合に出遭ったりしたので、対策コードを仕込んでいます

Presentだけを実行するとメモリが増えていく
DirectX12 のアプリケーション開発において、ほとんど何もしていないのに使用メモリがモリモリ増えていく事案に出遭いました。何もせずに、 Present メソッドを呼び出しているだけですが、使用メモリが増えていきます。自分の環境は以下に示す状態となります。Windows10 x64 1909 バージョンVisual Studio 201...

まとめ

拡張機能に積極的なNVIDIA のみの動作になるだろうと考えていましたが、意外にも最近のAMDでも動作できたことに驚きを感じました。今回のような普通はやらないであろうことが動いたことは自分としては少し嬉しくなりました。

あくまで動作できた、というだけの話でありパフォーマンスの観点からこれが実用になるかどうかはチェックしていません。技術的には可能かどうか、というのを見たかったからです。何かに使おうと思っている人は注意が必要です。

今回のこの結果を友人に見せたところ、驚いてくれました。そしてそのときの感想が、大道芸と化しているね、でした。最近の「DirectX12への統一理論(同人誌)」の話といい、普通はやらないことばかりをトライしていることに気づきました。

1つの技術的ネタとして楽しんでもらえたら幸いです。

DirectX12 への統一理論 - すらりんラボ - BOOTH
DirectX12 の一般的にはなかなか知られていない側面について記述した同人誌です。実際に使える場面があるかどうか、役立つケースがあるかどうかも不明ですが、1つの読み物として DirectX12 に興味のある人はいかがでしょうか? ※ 本書は 2020/06/27 に開催予定だった 「第3回 技術書同人誌博覧会」に向...
DirectX Vulkan
すらりんをフォローする
すらりん日記

コメント

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