我可以使用控制檯輸出(例如Swift中的print
)來調試我的金屬陰影語言代碼嗎?金屬着色語言 - (控制檯)輸出?
如果是,如何?
如果否,是否有任何其他方式輸出我的.metal文件中的變量? (也許通過使用commandEncoder緩衝區將.metal文件中的數據傳遞給我的.swift文件)
我試圖通過commandEncoder將引用傳遞給Int變量(在我的.swift文件中),但未成功到我的.metal文件。在.metal文件中,我爲int變量賦值,但是如果我在swift文件中打印Int,那麼賦值不在那裏。
.swift文件:
...
var myMetalOutput: Int = 0
...
let printBuffer = device.newBufferWithBytes(&myMetalOutput, length: sizeof(Int), options: MTLResourceOptions.CPUCacheModeDefaultCache)
commandEncoder.setBuffer(printBuffer, offset: 0, atIndex: 8)
...
commandBuffer.commit()
drawable.present()
print("myMetalOutput: \(myMetalOutput)")
...
。金屬文件:
...
kernel void shader(..., device int &printBuffer [[8]], ...) {
...
printBuffer = 123;
...
}
控制檯輸出總是myMetalOutput: 0
這個答案是不完整的。你只說使用'newBufferWithBytes'是錯誤的,但不要寫什麼來代替。答案可能是'newBufferWithBytesNoCopy',但這仍然不能解決問題,我試圖返回值打印使用這個和'addCompletedHandler',它仍然打印0. – Ixx
看起來OP認爲這個答案完成,由於它被接受。這聽起來像你可能有一個稍微不同的用例,爲此你可能應該開一個新的問題。 – warrenm
我有完全相同的用例,打開一個新問題將被標記爲重複,所以我認爲問題出在這個答案中。 – Ixx