フォト

Google AdSense


  • AdSense
無料ブログはココログ

« GPU Pro 5届いた | トップページ | TypescriptでWebGL »

2014.05.09

Windows 8.1向けDirect3Dサンプルで地味に好きなサンプル : HLSL shader compiler sample

Windows 8.1向けのDirect3D11.2のサンプルで地味に好きなサンプルが"HLSL shader compiler sample"。

HLSL shader compiler sample
http://code.msdn.microsoft.com/windowsapps/HLSL-shader-compiler-sample-e5a1d002

Shaderlinking
クリックすると大きなサイズになります

このサンプルは、HLSL シェーダー リンクを使ったサンプルで、左下のSourceの箇所を書き換えると2つのシェーダ関数の中の変更を適用した新たなシェーダを生成します。生成されたシェーダアセンブラのコードはOutputに出てきます。

HLSL シェーダー リンクでは、シェーダ全体を再コンパイルするのでは無く関数単位で変更してリンクするといった形になります。Direct3D11.0ではDynamic Shader Linkageがありましたが、こちらはそれとは異なり、シェーダをプリコンパイルしたライブラリ化してリンクしてシェーダー バイト コードを生成すると言うことができますので、作成されたシェーダの実行時のパフォーマンス的なペナルティはありません(・・・のはず)。

ちなみに、Windows 8.0のWindows Storeアプリで実は規約でアプリ上でシェーダをコンパイルするのは禁止で開発時だけ使える機能でした。そのことについては、下記にちょっと書かれています。

インボックス HLSL コンパイラ
http://msdn.microsoft.com/ja-jp/library/windows/apps/bg182880.aspx#eleven

そんな感じだったのですが、Windows 8.1にDirect3D11.2になってAPIが色々と追加されましてHLSL シェーダー リンクという機能が追加されました。そのサンプルが、上記のサンプルですね。

http://msdn.microsoft.com/ja-jp/library/windows/apps/bg182880.aspx#one

たとえば、D3DCompileFromFileのページには"Note You can use this API to develop your Windows Store apps, but you can't use it in apps that you submit to the Windows Store."と書かれています。

D3DCompileFromFile
http://msdn.microsoft.com/en-us/library/windows/desktop/hh446872(v=vs.85).aspx

この機能を使う際に、ライブラリ化したいHLSL関数にはexport修飾子を付けます。

export keyword
http://msdn.microsoft.com/en-us/library/windows/desktop/bb509568(v=vs.85).aspx#export

HLSL シェーダー リンクを使うとWindows 8.0の時には禁止されていたランタイムでのシェーダ変更ができるので、Windows Storeアプリ向けにShaderToy的なアプリを出せそうな気がするんですよね。その他に、シェーダエディタとかツールに良さそうではありますね。

あと、ノードベースのシェーダエディタなどにも役立ちそうです。

ゲーム機ではなかなかこうした機能は使えなさそうな気はしますが、Windows Storeアプリでシェーダ開発者のためのツールを作ってみるというのには良さそうですね。

« GPU Pro 5届いた | トップページ | TypescriptでWebGL »

Programming」カテゴリの記事

画像付き」カテゴリの記事

コメント

コメントを書く

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

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

« GPU Pro 5届いた | トップページ | TypescriptでWebGL »