「DirectX Shader CompilerでSPIR-Vを出力する」の版間の差分
ナビゲーションに移動
検索に移動
Administrator (トーク | 投稿記録) (ページの作成:「 DirectX Shader Compiler(dxc)動作テスト用のHLSLを用意する。 MonoGameでfxファイルを新規作成すると出来上がるソースコード…」) |
Administrator (トーク | 投稿記録) |
||
52行目: | 52行目: | ||
== 関連項目 == | == 関連項目 == | ||
− | |||
* [[DirectX Shader Compiler]] | * [[DirectX Shader Compiler]] | ||
* [[MacでDirectX Shader Compilerをビルドする]] | * [[MacでDirectX Shader Compilerをビルドする]] | ||
+ | * [[DirectX Shader CompilerでSPIR-Vを出力する]] | ||
+ | * [[SPIR-VからGLSLを生成する]] | ||
+ | * [[SPIR-VからHLSLを生成する]] | ||
+ | * [[MacにMoltenVKを入れてVulkanを使ってみる]] | ||
+ | |||
+ | [[category: HLSL]] | ||
+ | [[category: SPIR-V]] |
2019年11月11日 (月) 09:49時点における版
DirectX Shader Compiler(dxc)動作テスト用のHLSLを用意する。 MonoGameでfxファイルを新規作成すると出来上がるソースコードを流用している。
matrix WorldViewProjection; struct VertexShaderInput { float4 Position : POSITION0; float4 Color : COLOR0; }; struct VertexShaderOutput { float4 Position : SV_POSITION; float4 Color : COLOR0; }; VertexShaderOutput MainVS(in VertexShaderInput input) { VertexShaderOutput output = (VertexShaderOutput)0; output.Position = mul(input.Position, WorldViewProjection); output.Color = input.Color; return output; } float4 MainPS(VertexShaderOutput input) : COLOR { return input.Color; }
dxcでは従来の「technique」と「pass」の概念がなくなった。
technique BasicColorDrawing { pass P0 { VertexShader = compile vs_3_0 MainVS(); PixelShader = compile ps_3_0 MainPS(); } };
このpass句の中の1行1行がdxcコマンドになった感じである。 technique句があるとエラーになるのでコメントアウトして、代わりにdxcコマンドを呼び出すシェルスクリプトを書くといい感じのようだ。
./dxc -T vs_6_0 -E MainVS light.fx ./dxc -T ps_6_0 -E MainPS light.fx
SPIR-Vを出力するには「-spirv」オプションを付けるだけだ。
./dxc -spirv -T vs_6_0 -E MainVS light.fx ./dxc -spirv -T ps_6_0 -E MainPS light.fx
dxcを実行するとファイルが生成されるのではなく標準出力にアセンブリ形式がドスンと表示される。男らしさがヤバい。
アセンブリ言語形式ではなくバイナリ形式でファイルに保存するには「-Fo」オプションを指定する。
./dxc -spirv -T vs_6_0 -E MainVS light.fx -Fo light_vs.spv ./dxc -spirv -T ps_6_0 -E MainPS light.fx -Fo light_ps.spv