我目前正在使用Metal编写一些自定义Core Image过滤器 . 为了结构起见,我想将不同的内核放入不同的 .metal 文件中,并使用一些常见的包含,就像使用“普通”源文件一样 . 但是,当 metallib 工具将Metal编译器创建的不同 .air 文件捆绑到一个 .metallib 文件中时,只有在给予 metallib 的第一个输入 .air 文件中定义的内核函数是可见的 . 似乎没有包含其他 .air 文件中的函数 . 这是什么原因?

我认为(这是Metal文件的默认编译行为)所有Metal源都被编译成一个库,然后每个自定义 CIFilter 类使用它来实现其内部 CIKernel 所需的功能 . 我现在最终使用自定义构建规则为每个自定义过滤器编译 .metallib 文件,并使用自定义构建阶段将它们全部复制到我的框架中 . 这似乎不是预期的方式......