È possibile eseguire il debug del codice del linguaggio di ombreggiatura in metallo utilizzando l'output della console (come print
in Swift)?Lingua Metal Shading - Uscita (console)?
Se sì, come?
Se no, esistono altri modi per generare variabili dal mio file .metal? (Forse passando i dati dal file .metal al mio file .swift usando il comandoEncoder-buffer?)
Ho tentato senza successo di passare un riferimento a una variabile Int (che si trova nel mio file .swift) tramite il comandoEncoder al mio file .metal. Nel file .metal, assegno un valore alla variabile int, ma se stampo Int nel mio file swift, il valore assegnato non è lì.
file di .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)")
...
file di .metal:
...
kernel void shader(..., device int &printBuffer [[8]], ...) {
...
printBuffer = 123;
...
}
L'uscita della console è sempre myMetalOutput: 0
Questa risposta non è completa. Dici solo che l'uso di 'newBufferWithBytes' è sbagliato ma non scrivi cosa usare invece. La risposta è probabilmente 'newBufferWithBytesNoCopy' ma questo ancora non risolve il problema, sto cercando di restituire il valore da stampare usando questo e' addCompletedHandler' e sta ancora stampando 0. – Ixx
Sembrerebbe che l'OP consideri completa questa risposta, a causa di essere accettato. Sembra che tu possa avere un caso d'uso leggermente diverso, per il quale probabilmente dovresti aprire una nuova domanda. – warrenm
Ho esattamente lo stesso caso d'uso, l'apertura di una nuova domanda sarebbe contrassegnata come duplicata, quindi penso che il problema sia in questa risposta. – Ixx