差分

ナビゲーションに移動 検索に移動

DirectX Shader CompilerでSPIR-Vを出力する

1,981 バイト追加, 2019年11月6日 (水) 00:36
ページの作成:「 DirectX Shader Compiler(dxc)動作テスト用のHLSLを用意する。 MonoGameでfxファイルを新規作成すると出来上がるソースコード…」


[[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

== 関連項目 ==

* [[DirectX Shader Compiler]]
* [[MacでDirectX Shader Compilerをビルドする‎]]

案内メニュー