Metal编译的metallib着色器文件的格式?

Bil*_*ngs 2 shader metal

对于运行时生成的着色器代码,我感兴趣的是探索是否可以直接自动生成已编译的Metal Shader Language(MSL)代码(在.metallib文件中找到并与该newLibraryWithData:error:方法一起使用),而不是自动生成人类可读的MSL源代码(与该newLibraryWithSource:options:error:方法一起使用)。

这样做的理由有两个:

  1. 根据编译代码格式的不同,程序自动生成编译的着色器代码可能会更简单,更简洁,而不是搞乱人类可读的格式。
  2. 删除着色器编译阶段将加快运行时生成的着色器的创建速度。

文件中提供了有关已编译MSL代码格式的.metallib文档吗?编译格式是特定于GPU的,还是作为中间语言格式存在,该newLibraryWithData:error:方法在方法的最后编译阶段被带到GPU级别?

war*_*enm 5

metallib文件格式未公开记录。库文件实质上包含元数据和LLVM派生的中间语言(与设备无关)的编译着色器代码。后端有第二个编译步骤,可将这种中间语言转换为最终的机器代码。不可能直接生成中间代码,但是如果您要使用此功能,则应向Apple提交增强请求错误。