« UnityのHDSRPを使ったサンプルアセットFilm Sample Project | トップページ | Physically Based Renderingがオンラインで無料公開 »

2018.10.13

EA SEEDのHalcyonのDirect3D12やVulkan向けのシェーダの話

Running Microsoft FXC in Docker
https://www.wihlidal.com/blog/pipeline/2018-09-17-linux-fxc-docker/

1か月くらい前に出てる記事ですが、ようやく読みました。

ちょうどこの記事では、EA SEEDのHalcyon(R&DチームのSEEDのエンジン。PICA PICAデモなどで使用)のシェーダの話が書かれています。

まず、Direct3D12には旧来型のHLSL 5.1までのDXBCを出力するfxcのコンパイラとHLSL 6.xからのLLVMベースのDirectXShaderCompiler(DXC)がありますが、ドライバが枯れている分DXBCがDXCが出力するDXILにパフォーマンス的に勝つこともあるし、DXILのシェーダが問題になることも(ただし、オープンソースなので報告すると数日で修正される)あるので、DXBCが使われるケースはまだまだあるようですね。

Halcyonではそうした事情から、シェーダはfxcとDXCのものが混在しているようですね。

続いてVulkanの話ですが、HalcyonではVulkanのSPIR-VのシェーダはDXCから出力しているそうです。DXCは当初は、SPIR-Vのバイナリを出力することはできなかったわけですが、現在はGoogleのエンジニアが加わり、HLSLからSPIR-Vをのバイナリ出力ができるようになりました。

…ということで、HalcyonではシェーダはすべてHLSLが使われているようですね(GLSLは使われていない)。

この記事で興味深いのはDirect3D12とVulkan出のシェーダの比較ですね。記事中の表では、各シェーダのDirect3D12とVulkanのパフォーマンスが比較されています。Direct3D12ではDXBCとDXILのどちらが使用されているかも記述されてます(Using DXBC)。Direct3D12では37のシェーダのうちDXBCが使われてるものは5つある、といった感じです。

この表から見て取れるものとして、

・全体としてはDirect3D12側がパフォーマンス
・DXIL(Using DXBCがNo)とVuklkanの処理時間が同じものはDXCのSPIR-V出力がほぼ同じパフォーマンスが出せているし、場合によってはVulkanが勝つものもある
・DXBCが用いられていて、Vulkanを引き離すところがある(DXILとの比較がないですが、おそらくDXILが遅い)

パフォーマンスの差は、GPUのドライバの最適化度具合なわけですが、大きく離れていたりDXBCがSPIR-Vに負けるケースなどについては細かく記事中で言及されています(LightingとかReflectionパス)。

DXCのSPIR-V出力の完成度に関しては、あまり自分で検証したことがなかったのですがこの記事を見ていると完成度が高まってきたところはありそうですね。まだ、問題のある個所はありますがそろそろ移行を考えるには良い時期なのかもしれませんね。

ちょっと一か月遅れぐらいで読みましたが、興味深い記事でした。


« UnityのHDSRPを使ったサンプルアセットFilm Sample Project | トップページ | Physically Based Renderingがオンラインで無料公開 »

Programming」カテゴリの記事

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

« UnityのHDSRPを使ったサンプルアセットFilm Sample Project | トップページ | Physically Based Renderingがオンラインで無料公開 »