Compute Shader synchronisieren

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
Benutzeravatar
Jonathan
Establishment
Beiträge: 2366
Registriert: 04.08.2004, 20:06
Kontaktdaten:

Compute Shader synchronisieren

Beitrag von Jonathan »

Ich habe jetzt ein Compute-Shader basiertes Partikelsystem und bin damit auch soweit sehr zufrieden. Doch nun musste ich feststellen, dass auf manchen Systemen die Partikel nicht angezeigt werden und ich frage mich, wie ich das aus der Ferne debuggen kann. Vom System her, sollte es auf dem fraglichen PC auf jeden Fall laufen.

Da manchmal Partikel im Ursprung angezeigt werden, vermute ich, dass mit der Ausführung des Compute Shaders irgendetwas nicht stimmt. Ich denke, es könnte an der Synchronisation zwischen Compute- und Vertex-Shader liegen. Momentan benutze ich Shader-Storage-Buffer um die Vertex-Buffer der Partikel zu modifizieren und dementsprechend glMemoryBarrier mit GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT.
Was ich mich aber Grundsätzlich frage, ist wie diese Funktion überhaupt grundsätzlich funktioniert. Laut Internet, blockiert der Aufruf nicht, sondern erst der nächste Render-Aufruf, der die Daten dann benutzt muss warten, bis der Compute-Shader fertig ist. Aber woher genau hat er die Information? Es gibt halt nur einen Parameter, also muss sich der Befehl ja irgendwie global auf alles auswirken...
Ansonsten bin ich für alle Tipps, woran es sonst noch liegen kann, dankbar. Ich habe zumindest bei mir mal per nSight gecheckt, ob alles ok ist, da sah aber alles gut aus (bis auf ein paar Warnings, dass ich Shader-Uniforms gesetzt habe, die nicht existieren). Auf fremden PCs debuggt es sich halt immer so schlecht...
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
Antworten