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

时间:2016-03-20 04:27:58

标签: shader metal

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

基本原理有两个方面:

  1. 根据编译代码格式,程序自动生成编译的着色器代码可能更简单,更清晰,而不是乱用人类可读的格式。
  2. 删除着色器编译阶段将加速创建运行时生成的着色器。
  3. 文档是否可用于编译的MSL代码格式,如.metallib文件中所示?编译格式是GPU特定的,还是作为中间语言格式存在,在newLibraryWithData:error:方法的最终编译阶段采用GPU级别?

1 个答案:

答案 0 :(得分:5)

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