是否有一个好的 HLSL 到 SPIR-V 编译器?

Is there a good HLSL to SPIR-V compiler?

我正在用 C++ 编写体素引擎,并且正在实现 Vulkan 渲染器。我决定用 HLSL 编写着色器,并通过 SPIRV-Cross 转换它们。然而,这给我带来了一个问题——glslang 的 HLSL 编译器不允许采样器。例如,这个像素着色器:

uniform sampler2D tex;
float4 main(float2 uv : TEXCOORD0) : COLOR0 {
    return tex2D(tex, uv);
}

给出此编译器输出:

Expected Sampled Image to be of type OpTypeSampledImage
  %19 = OpImageSampleImplicitLod %v4float %17 %18

我不知道我是应该用 GLSL 编写我的着色器,还是使用不同的库。任何帮助将不胜感激。

official DirectX Shader Compiler (that's the one for HLSL 6 and above, not the old DxCompiler) actually supports transforming HLSL into SPIR-V. See their wiki page about it 解释了如何构建启用该功能的编译器,以及如何使用它。

也就是说,uniform sampler2D tex; 实际上不是 HLSL 而是 GLSL 代码。在 HLSL 中,你会写

SamplerState sampler;
Texture2D tex;
float4 main(float2 uv : TEXCOORD0) : COLOR0 {
    return tex.Sample(sampler, uv);
}