1,981 バイト追加,
2019年11月6日 (水) 00:36
[[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をビルドする]]