首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一个来自多个.metal文件(计算内核和CIKernel实现)的默认.metal?

一个来自多个.metal文件(计算内核和CIKernel实现)的默认.metal?
EN

Stack Overflow用户
提问于 2019-11-06 21:44:21
回答 2查看 890关注 0票数 0

在将自定义核心图像过滤器内核迁移到金属阴影语言时,我在构建默认金属库(default.metallib)时遇到了一个错误:

代码语言:javascript
复制
metallib: error: exactly one input file required

我当时的印象是,这些文件可以放在单独的.metal文件中。试图将它们合并到一个文件中会导致以下错误:

代码语言:javascript
复制
Metal library creation failed: Error Domain=MTLLibraryErrorDomain Code=3 "Filters module must contain no vertex/fragment/kernel functions but contains 1 kernel function"

命名为metalcoreimage可以防止计算内核在默认库中显示为可用函数。

找到这个答案,它建议构建单独的库:

Metal: vertexFunction defined in .metal file becomes nil once setting Compiler and Linker Options for MSL cikernel

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-11-07 08:28:04

现在不能使用默认的金属构建管道将包含核心图像内核的多个.metal文件编译到一个库中。当设置.air标志时,链接器不允许将多个.metallib文件合并到一个-cikernel中。

要么将所有内核放入一个.metal文件,要么使用我在上面链接到的答案中发布的解决方案。

票数 0
EN

Stack Overflow用户

发布于 2020-01-07 16:54:06

您可以创建多个Foo.metalBar.metal文件。只是不要把它们作为链接器的目标。

相反,#include "Foo.metal"#include "Bar.metal"Main.metal文件中。并且只添加Main.metal文件作为链接器目标。

这样,只有一个.metal文件,它包含所有其他.metal文件。很简单。

因此,Main.metal文件的内容看起来可能非常简单:

代码语言:javascript
复制
#include "Foo.metal"
#include "Bar.metal"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58738946

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档