Metal gölgelendirme dili kodumu konsol çıktısıyla (Swift'de print
gibi) ayıklayabilir miyim?Metal Gölgelendirme Dili - (Konsol) Çıkışı?
Evet ise, nasıl?
Hayır ise, .metal dosyamdan değişken çıktılarının başka yolları var mı? (Belki de .metal dosyasından .Encoder arabelleğini kullanarak .swift dosyasına veri ileterek?)
KomutEncoder aracılığıyla bir Int değişkenine (.swift dosyamda bulunan) bir başvuru göndermeyi denemedim. benim .metal dosyama. .metal dosyasında int değişkenine bir değer atarım, ancak Int'i hızlı dosyamda yazdırırsam, atanan değer orada olmaz.
.swift dosyası:
...
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)")
...
.metal dosyası:
...
kernel void shader(..., device int &printBuffer [[8]], ...) {
...
printBuffer = 123;
...
}
konsol çıkış burada yanlış gidiyor birkaç şey vardır myMetalOutput: 0
Bu cevap tam değildir. Sadece "newBufferWithBytes" ın yanlış olduğunu söylüyorsunuz, ancak bunun yerine ne kullanacağınızı yazmayın. Cevap muhtemelen 'newBufferWithBytesNoCopy''dir, ancak bu hala sorunu çözmez, bu değeri ve' addCompletedHandler 'kullanarak yazdırma için değeri döndürmeye çalışıyorum ve hala 0 yazdırıyor. – Ixx
OP'in bu yanıtı tamamladığı düşünüldü, kabul edilmesinden dolayı. Muhtemelen yeni bir soru açmanız gereken, biraz farklı kullanım durumunuz olabilir. – warrenm
Tam olarak aynı kullanım durumum var, yeni bir soru açmak bir kopya olarak işaretlenecektir, bu yüzden sorunun bu cevapta olduğunu düşünüyorum. – Ixx