Ich habe eine Kernelfunktion (Compute Shader), die in der Nähe Pixel eines Pixels aus einer Textur liest und basierend auf den alten Pixelwerten den Wert des aktuellen Pixels aktualisiert (es ist keine einfache Faltung).iOS Metal - Lesen alter Werte beim Schreiben in Textur
Ich habe versucht, eine Kopie der Textur mit BlitCommandEncoder
erstellen und füttern die Kernel-Funktion mit 2 Texturen - eine schreibgeschützte und eine andere schreibgeschützt. Leider ist dieser Ansatz GPU-weise zeitaufwendig.
Was ist die effizienteste (GPU- und Speicher-weise) Art, alte Werte aus einer Textur zu lesen, während der Inhalt aktualisiert wird?
Haben Sie Ihre App mit Time Profiler (in Instrumenten) und GPU Frame Capture (in Xcode) profiliert? Wenn Sie feststellen, wie viel Zeit Sie damit verbringen, Ressourcen zuzuweisen, den Kernel zu kopieren und auszuführen, können Sie herausfinden, was Sie zuerst optimieren möchten. – warrenm
@warrenm Vielen Dank für Ihre Antwort. Es stellt sich heraus, dass die Routine, die mit dem "BlitCommandEncoder" arbeitet, eine andere, zeitraubende Funktion aufruft, die die Verzögerung verursacht, die Blit-Operationen waren nicht die primäre Quelle der Verzögerung - es war meine Schuld. Beim Betrachten von GPU Frame Capture habe ich jedoch festgestellt, dass die Dauer von Blit-Operationen nicht erwähnt wird (im Gegensatz zu Compute-Operationen) - gibt es keine Möglichkeit, diese zu messen (oder fehlt mir etwas)? – sarasvati
Ich glaube nicht, dass es derzeit eine Möglichkeit gibt, die Dauer von Compute-Encodern in GPU Frame Capture zu erfassen, sorry. – warrenm