首页 文章

金属函数无法使用Xcode 8进行编译

提问于
浏览
0

自从迁移到Xcode 8和iOS10后,我的基于金属的应用程序根本无法运行 . 在启动时,我收到错误:“编译器因XPC_ERROR_CONNECTION_INTERRUPTED而失败”

由于 MTLComputePipelineState 未成功创建并在调用 MTLDevice 函数 makeComputePipelineState(function:) 时抛出错误,因此在崩溃之前在控制台中出现两到三次 . 我对该项目所做的唯一更改是更新到Swift 3.0,但是控制台似乎意味着编译器错误,由于崩溃,我假设是由于某些金属代码没有正确编译 .

任何帮助将不胜感激,这让我过早老化 .

更新:

我在 .metal 文件中找到导致问题的行:

int gi1 = permMod12[ii+i1+perm[jj+j1+perm[kk+k1]]];

permMod12是一个静态常量数组,声明为:

static constant int permMod12 [512] = {7,4,5,7...}

烫发同样是静态和恒定的:

static constant int perm [512] = {151,160...}

变量 iii1jjj1kkk1 都是在同一内核中计算的整数 .

内核非常大,所以我将link发布到GitHub位置 . 这是导致问题的名为 simplex3Dsimplex4D 的函数 . 这些非常相似,所以只关注其中一个,它们是碳副本,但4D有另一个变量运行( lll1l 等) .

问题当然是用计算变量查找这些数组,就像我将变量更改为简单文字时没有错误一样 .

需要执行内核才能发生错误 .

对这个新信息的任何帮助都会很棒 .

2 回答

  • 0

    我遇到过这种情况,似乎没有解决这个问题的独特解决方案 . 在我的情况下,当使用标准化坐标采样器的纹理也使用 read() 函数时,会出现问题 . 当我将 read() 功能切换到 sample() 时,这个奇怪的错误被删除了 . 我希望你的问题已经解决了 .

  • 0

    我也遇到了同样的错误:“编译器因XPC_ERROR_CONNECTION_INTERRUPTED而失败” . 问题得到了解决 . 它源于尝试使用'threadgroup bool'类型变量 . 重构代码以使用'threadgroup short'变量代替布尔值解决了错误 . (如果bool类型是或不是有效的线程组类型,则无法在Metal Version 2规范中找到 . )

相关问题