我目前正在使用Metal编写一些自定义的Core Image滤镜。出于结构上的考虑,我想将不同的内核放入具有一些常见包含的不同.metal
文件中,就像处理“普通”源文件一样。
但是,当metallib
工具将由Metal编译器创建的不同.air
文件捆绑到一个.metallib
文件中时,只有第一个输入.air
文件中定义的内核函数才被赋予metallib
可见。其他.air
文件中的功能似乎未包含在内。是什么原因呢?
我认为(作为Metal文件的默认编译行为),所有Metal源都被编译到一个库中,然后每个自定义CIFilter
类都使用该库以其内部函数实例化其内部CIKernel
需要。
现在,我为带有自定义构建规则的每个自定义过滤器编译了一个.metallib
文件,并使用自定义构建阶段将它们全部复制到了我的框架中。这似乎不是预期的方式...