В настоящее время я пишу несколько пользовательских фильтров Core Image, используя Metal.Ради структуры я хочу поместить разные ядра в разные файлы .metal
с некоторыми общими включениями, как вы сделали бы с «обычными» исходными файлами.Однако, когда инструмент metallib
объединяет различные файлы .air
, созданные компилятором Metal, в один файл .metallib
, отображаются только те функции ядра, которые определены в первом входном файле .air
, присвоенном metallib
.Функции из других .air
файлов, похоже, не включены.В чем причина этого?
Я подумал (как это происходит при компиляции файлов Metal по умолчанию), что все источники Metal скомпилированы в одну библиотеку, которая затем используется каждым пользовательским классом CIFilter
для создания экземпляра их внутреннего CIKernel
с функцией, которая им нужна.Теперь я закончил скомпилировать файл .metallib
для каждого настраиваемого фильтра с настраиваемыми правилами сборки и скопировать их все в мою инфраструктуру с использованием настраиваемой фазы сборки.Похоже, это не тот путь ...