自从迁移到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...}
变量ii
,i1
,jj
,j1
,kk
和k1
都是在同一内核中计算的整数。 / p>
内核非常大,所以我将link发布到GitHub位置。这是导致问题的simplex3D
和simplex4D
函数。这些非常相似,所以只关注其中一个,它们是碳副本,但4D有另一个变量运行(ll
,l1
,l
等。
问题当然是用计算变量查找这些数组,就像我将变量更改为简单文字一样,没有错误。
需要执行内核才能发生错误。
对这些新信息的任何帮助都会很棒。
答案 0 :(得分:0)
我遇到过这种情况,似乎没有解决这个问题的独特解决方案。就我而言,当使用规范化坐标采样器的纹理也使用read()
函数时,就会出现问题。当我将read()
函数切换为sample()
时,这个奇怪的错误被删除了。我希望你的问题已经解决了。
答案 1 :(得分:0)
我也遇到了同样的错误:“编译器因XPC_ERROR_CONNECTION_INTERRUPTED而失败”。问题得到了解决。它源于尝试使用'threadgroup bool'类型变量。重构代码以使用'threadgroup short'变量代替布尔值解决了错误。 (如果bool类型是或不是有效的线程组类型,则无法在Metal Version 2规范中找到。)