「DirectX Shader CompilerでSPIR-Vを出力する」の版間の差分

提供: MonoBook
ナビゲーションに移動 検索に移動
 
58行目: 58行目:
 
* [[SPIR-VからHLSLを生成する]]
 
* [[SPIR-VからHLSLを生成する]]
 
* [[MacにMoltenVKを入れてVulkanを使ってみる]]
 
* [[MacにMoltenVKを入れてVulkanを使ってみる]]
 +
 +
[[category: 3DCG]]
 +
[[category: シェーディング言語]]
  
 
[[category: HLSL]]
 
[[category: HLSL]]
 
[[category: SPIR-V]]
 
[[category: SPIR-V]]

2020年5月19日 (火) 02:11時点における最新版


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

関連項目[編集 | ソースを編集]