Одна MTLLibrary по умолчанию из нескольких файлов .metal (вычислить реализации ядра и CIKernel)? - PullRequest
0 голосов
/ 07 ноября 2019

При переносе пользовательских ядер фильтра Core Image на Metal Shading Language я столкнулся с ошибкой при создании библиотеки Metal по умолчанию (default.metallib):

metallib: error: exactly one input file required

У меня сложилось впечатление, что они могут быть отдельнымифайлы .metal. Попытка объединить их в один файл приводит к этой ошибке:

Metal library creation failed: Error Domain=MTLLibraryErrorDomain Code=3 "Filters module must contain no vertex/fragment/kernel functions but contains 1 kernel function"

Пространство имен до metal и coreimage не позволяют ядру вычислений отображаться как доступная функция в библиотеке по умолчанию.

Найден этот SO-ответ, в котором рекомендуется создавать отдельные библиотеки:

Металл: функция vertexFunction, определенная в файле .metal, становится нулевой после установки параметров компилятора и компоновщика для MSL cikernel

1 Ответ

0 голосов
/ 07 ноября 2019

Вы не можете использовать конвейер сборки по умолчанию Metal для компиляции нескольких файлов .metal, содержащих ядра Core Image, в одну библиотеку прямо сейчас. Компоновщик не позволяет объединять несколько файлов .air в один .metallib при установке флага -cikernel.

Вы должны либо поместить все свои ядра в один файл .metal, либо использовать решение Iопубликовано в ответе, на который вы ссылались выше.

...