使用Xcode 8

时间:2016-09-19 13:46:23

标签: ios xcode metal

自从迁移到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都是在同一内核中计算的整数。 / p>

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

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

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

对这些新信息的任何帮助都会很棒。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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