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クロスに渡すと、このエラーが発生します。Compilation failed: SPIR-V instruction goes out of bounds.
私は本当にこのエラーに困惑しています。どんな助けでも大歓迎です。