Metal编译的metallib着色器文件的格式?
Format of Metal compiled metallib shader file?
对于运行时生成的着色器代码,我有兴趣探索是否可以直接自动生成已编译的 Metal Shader Language (MSL) 代码(如 .metallib
文件,并与 newLibraryWithData:error:
方法一起使用),而不是自动生成人类可读的 MSL 源代码(与 newLibraryWithSource:options:error:
方法一起使用)。
这样做的理由有两个:
- 根据编译代码格式,程序自动生成编译着色器代码可能更简单、更清晰,而不是乱用人类可读格式。
- 删除着色器编译阶段将加速运行时生成的着色器的创建。
在 .metallib
文件中找到的已编译 MSL 代码格式的文档是否可用?编译格式是特定于 GPU 的,还是作为一种中间语言格式存在,在 newLibraryWithData:error:
方法的最后编译阶段进入 GPU 级别?
metallib
文件的格式没有公开记录。库文件本质上包含元数据和编译的着色器代码,采用 LLVM 派生的中间语言,与设备无关。还有第二个后端编译步骤,将这种中间语言转换为最终的机器代码。无法直接生成中间代码,但如果这是您想要的功能,您应该向 Apple 提交增强请求错误。
对于运行时生成的着色器代码,我有兴趣探索是否可以直接自动生成已编译的 Metal Shader Language (MSL) 代码(如 .metallib
文件,并与 newLibraryWithData:error:
方法一起使用),而不是自动生成人类可读的 MSL 源代码(与 newLibraryWithSource:options:error:
方法一起使用)。
这样做的理由有两个:
- 根据编译代码格式,程序自动生成编译着色器代码可能更简单、更清晰,而不是乱用人类可读格式。
- 删除着色器编译阶段将加速运行时生成的着色器的创建。
在 .metallib
文件中找到的已编译 MSL 代码格式的文档是否可用?编译格式是特定于 GPU 的,还是作为一种中间语言格式存在,在 newLibraryWithData:error:
方法的最后编译阶段进入 GPU 级别?
metallib
文件的格式没有公开记录。库文件本质上包含元数据和编译的着色器代码,采用 LLVM 派生的中间语言,与设备无关。还有第二个后端编译步骤,将这种中间语言转换为最终的机器代码。无法直接生成中间代码,但如果这是您想要的功能,您应该向 Apple 提交增强请求错误。