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

3

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

这样做的原因有两个:

  1. 根据编译代码格式,自动生成编译后的着色器代码可能更简单、更干净,而不必处理人类可读格式。
  2. 去除着色器编译阶段将加快运行时生成着色器的创建速度。

是否有关于编译后的 MSL 代码格式的文档,例如在 .metallib 文件中找到的格式?编译后的格式是否特定于 GPU,或者它存在作为中间语言格式,在 newLibraryWithData:error: 方法内进行最终编译阶段时被带到 GPU 级别?

1个回答

5
metallib文件的格式没有公开文档。这些库文件基本上包含元数据和编译后的着色器代码,使用LLVM衍生的中间语言,这种语言是设备无关的。第二个后端编译步骤将中间语言转换为最终的机器代码。不能直接生成中间代码,但如果您需要此功能,应向苹果公司提交增强请求错误。

谢谢。你对理解内部结构的来源是什么(例如- 它是中间语言加元数据等)? - Bill Hollings
这是一个真实的陈述,但是苹果从未对MSL编译器基于LLVM/Clang以及metal命令行工具的输出是中间表示形式这一事实保密。 - warrenm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接