0

我有这种使用dndxc将 hlsl 着色器编译为 SPIR-V 的方法:

public static string LoadShader(string filename, Shader.Stage stage, string entrypoint) {
  List<string> args = new List<string>();
  args.Add("-spirv");
  args.Add("-fspv-target-env=vulkan1.1");
  

  IDxcOperationResult result = compiler.Compile(
    library.CreateBlobFromFile(filename, IntPtr.Zero),
    filename,
    entrypoint, stage == Shader.Stage.Vertex ? "vs_6_2" : stage == Shader.Stage.Fragment ? "ps_6_2" : "cs_6_2",
    args.ToArray(), args.Count,
    null, 0,
    library.CreateIncludeHandler()
  );

  if(result.GetStatus() != 0) {
    throw new Exception(GetStringFromBlob(result.GetErrors()));
  }

  return GetStringFromBlob(result.GetResult());
}

这似乎生成了有效的 spirv 源,但是稍后在程序中将它传递给 SPIR-V cross(或者就此而言,通过命令行上的二进制文件)会产生这个错误:Compilation failed: SPIR-V instruction goes out of bounds.
我真的被这个错误难住了;任何帮助将非常感激。

4

0 回答 0