dxc编译hlsl生成spirv

       使用一个最简单的绘制三角形的hlsl

struct VSInput
{
	float2 Position : POSITION;
	float3 Color : COLOR;
};

struct VSOutput
{
	float4 Position : SV_POSITION;
	float3 Color : COLOR;
};

VSOutput vert(VSInput vin)
{
	VSOutput vout = (VSOutput)0;

	vout.Position = float4(vin.Position, 0.0, 1.0);
	vout.Color = vin.Color;

	return vout;
}

float4 frag(VSOutput pin) : SV_TARGET
{
	return float4(pin.Color, 1.0);
}

       正常情况下,如果编译VS和PS生成spirv,需要执行如下的命令

dxc -spirv -T vs_6_0 -E vert hlsl/shader.hlsl -Fo vert.spv
dxc -spirv -T ps_6_0 -E frag hlsl/shader.hlsl -Fo frag.spv

       但是这种方法生成的spirv不包含调试信息,在shader单步调试时,只能调试spirv-cross生成的glsl,虽然已经很不错了,但是很多变量都转义了,函数也会inline,影响判断

       但是,dxc允许生成调试符号,在dx12 shader debug时额外有效,抱着试试的心态,我在vulkan下试了一下,结果居然可以生成带hlsl源文件信息的spirv,dxc加调试符号的命令为-Zi

dxc -spirv -T vs_6_0 -E vert hlsl/shader.hlsl -Fo vert.spv -Zi
dxc -spirv -T ps_6_0 -E frag hlsl/shader.hlsl -Fo frag.spv -Zi

renderdoc在vulkan下调试hlsl的截屏

spv debug

hlsl debug