以前 Vulkan の世界へ DirectX11 で作成したテクスチャをインポートするという実験をしました。今回はそれの逆、 DirectX11 の世界で Vulkan 側で作成したテクスチャを使用するということを試してみました。
Vulkan からのテクスチャエクスポート ということになりますね。今回もまた NVIDIA 拡張での実験です。
注意事項
前回は NVIDIA のページに比較的詳しい手順が記載されていたためうまく出来ましたが、今回のテクスチャ エクスポートについてはほとんど情報がありませんでした。
一番詳しいドキュメントは VK_NV_external_memory_win32.txt になると思います。
そのため、試行錯誤してようやく「なんとなく動いている」ところまで着た感触です。
実験
動作環境ですが、 Vulkan SDK 1.0.42 で、 Windows10 x64, NVIDIA ドライバ 381.65 を使用しています。
同じプログラムを Windows7 の環境で実行したらうまくテクスチャの共有が成功せずでした・・・。これについてはあきらめています。
Vulkanでテクスチャに描画を行い、それを DirectX11 で使用しています。
・・・より正確には一度 D3D11 側でコピーを行っています。というのも Vulkan のレンダーターゲットをエクスポートしたら、 D3D11 側で D3D11_BIND_SHADER_RESOURCE が付いておらず、 D3D11_BIND_RENDER_TARGET のみとなっていました。
Vulkan 側ではちゃんと VK_IMAGE_USAGE_SAMPLED_BIT を設定しているのですが。まだ何か設定漏れ、見落としがあるのかもしれないなと思っています。
感想
ひとまずは Vulkan からテクスチャをエクスポートして DirectX11 で使用するという目的は達成できたと思います。
安定性や、Windows7 での動作という点には問題が残っていますが、まずはここで一区切りと言うことにしました。なお Windows7 でうまくいっていない箇所は OpenSharedResource で失敗しているところです。ハンドルはあるのにここで失敗のためお手上げです。
今回もまた Vulkan Validation Layer が存在すると正常に動作しませんでした。 NVIDIA 拡張の利用と本当に相性が悪いです。
コメント