Was ist das moderne Äquivalent zu Anzeigelisten?

9

Anzeigelisten waren eine OpenGL-Funktion, mit der theoretisch jeder Teil der API beschleunigt werden konnte, indem eine Gruppe von Befehlen zur späteren Verwendung gespeichert wurde. Nach meinem Verständnis ist dies im Hinblick auf die derzeitigen Bemühungen zur Reduzierung des Overheads des Fahrers sehr sinnvoll.

Anzeigelisten waren in Version 3.1 jedoch veraltet. Was ist das moderne API-Äquivalent und stellt DirectX eine ähnliche Funktion zur Verfügung? Wenn es keine solche Funktionalität mehr gibt, was ist der Grund dafür?

Julien Guertault
quelle

Antworten:

12

Nvidia verfügt über eine Erweiterung zum Erstellen von Befehlspuffern im modernen GL .

Der Grund für das Fehlen ähnlicher Funktionen liegt darin, dass beim Rendern viele Zustände auftreten und die Anzeigeliste von vielen verschiedenen Zuständen beeinflusst wird. Zum Ändern des Mischzustands muss beispielsweise der Fragment-Shader auf einer bestimmten Hardware gepatcht werden.

NVidia löste das Problem, indem alle Status erfasst und nach einem Versand in den Status zurückgesetzt wurden:

1) Was motiviert das Design?

Das Hauptziel besteht darin, vorvalidierte Befehlspuffer wiederverwenden zu können. Andere APIs und Vorschläge haben dies mit verschiedenen Inkarnationen von Befehlslisten oder Statusobjekten angegangen. Ein wiederkehrendes Problem besteht jedoch darin, dass Interaktionen zwischen verschiedenen Phasen der Pipeline diese Verbreitung und Wiederverwendung verhindern. Diese Interaktionen sind häufig hardwarespezifisch (und unterscheiden sich von Anbieter zu Anbieter oder sogar von Generation zu Generation), und neue Interaktionen werden durch neue Funktionen eingeführt, die bei der Einführung des Prävalenzschemas nicht vorstellbar waren.

Wir versuchen, dies zu beheben, indem wir ein monolithisches Zustandsobjekt haben, das (fast) den gesamten Zustand der Pipeline umfasst. Dies sollte genügend Informationen für alle Implementierungen bereitstellen, um die erforderliche Kreuzvalidierung durchzuführen. Wir versuchen, diese so zu erstellen, dass der neue API-Footprint minimiert wird. Da wir den Status ALL (einschließlich aller in Zukunft hinzugefügten) möchten, erfassen wir ihn einfach aus dem aktuellen Status des Kontexts.

[...]

23) In welchem ​​Zustand bleibt der Status, der durch Token geändert wird, nach dem Versandanruf übrig?

BEHOBEN: Status wird zurückgesetzt.

(aus dem oben verlinkten Erweiterungstext)

Der wahre Nachfolger ist jedoch die Befehlspufferfunktionalität in DX12 und Vulkan. Diese erfassen auch den gesamten Renderstatus in einem einzigen Objekt, das beim Erstellen und Füllen des Befehlspuffers verwendet werden soll. Die NVidia-Erweiterung basiert auf dieser Architektur, da NVidia am Vulkan-Design beteiligt ist.

Ratschenfreak
quelle