2016-09-19 35 views
0

自從轉向Xcode 8和iOS10以來,我的基於金屬的應用程序根本無法運行。在推出我得到的錯誤:「編譯器失敗,XPC_ERROR_CONNECTION_INTERRUPTED」無法使用Xcode 8編譯的金屬函數

這出現在控制檯兩到三次因MTLComputePipelineState沒有成功創建崩潰並調用MTLDevice功能makeComputePipelineState(function:)時拋出一個錯誤之前。我對該項目進行的唯一更改是更新到Swift 3.0,但控制檯似乎意味着編譯器錯誤,這是由於我假設的崩潰導致某些金屬代碼無法正確編譯。

任何幫助將不勝感激,這是過早老化我。

UPDATE:

我位於造成的.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和​​都是在同一內核中計算的整數。

內核很大,所以我會發佈一個link到GitHub位置。這是導致問題的稱爲simplex3Dsimplex4D的功能。這些非常相似,所以只關注其中的一個,它們是碳副本,但4D有另一個變量運行(ll,l1,l等)。

這個問題當然似乎是用計算變量查找這些數組,因爲當我將變量更改爲簡單文字時,沒有錯誤。

內核需要執行才能發生錯誤。

任何幫助這個新的信息將是偉大的。

+1

這幾乎肯定是一個編譯器錯誤。請檢查Xcode中的設備日誌以查看MTLCompilerService中的崩潰情況,並將日誌附加到包含儘可能多其他信息的雷達上。 – warrenm

+0

檢查之後,它們中包含的MTLCompilerService不會崩潰。 –

+0

另外值得注意的是,當我嘗試運行沒有其他函數調用的內核時,它運行良好。當我嘗試從內核中調用另一個函數時彈出錯誤。現在不在我的電腦上,但我會在上傳一個例子 –

回答

0

我遇到過這種情況,似乎沒有獨特的解決方案來解決這個問題。在我的情況下,當使用標準座標採樣器的紋理也使用read()函數時發生問題。當我將read()函數切換到sample()時,這個奇怪的錯誤已被刪除。我希望你的問題已經解決了。