DirectX 12: Microsofts neue Programmierschnittstelle auf der GDC

PCGH-Redaktion

Kommentar-System
Teammitglied
Jetzt ist Ihre Meinung gefragt zu DirectX 12: Microsofts neue Programmierschnittstelle auf der GDC

20 Jahre nach DirectX 1 erscheint in diesem Jahr DirectX 12. Microsofts neueste Programmierschnittstelle soll anspruchsvolle 3D-Grafikberechung und -ausgabe gewaltig verbessern. Auf der Game Developers Conference waren erste Spiele mit der neuen Schnittstelle zu sehen.

Bitte beachten Sie: Der Kommentarbereich wird gemäß der Forenregeln moderiert. Allgemeine Fragen und Kritik zu Online-Artikeln von PC Games Hardware sind im Feedback-Unterforum zu veröffentlichen und nicht im Kommentarthread zu einer News. Dort werden sie ohne Nachfragen entfernt.

lastpost-right.png
Zurück zum Artikel: DirectX 12: Microsofts neue Programmierschnittstelle auf der GDC
 
Das hört sich alles doch super an, ich bin schon gespannt auf das erste fertige DX12 Spiel.
Endlich wieder ein Schnittstellenupgrade, das es wert ist installiert zu werden, wo der Nutzer auch fühlt das etwas vorangegangen ist.
 
Viel mehr interessieren mich nun die Tier Bindings. Da ist soviel durcheinander... Wer hat nun 12_0 wer 12_1 usw...

Dann das erst Maxwell v2 und bei AMD erst ab GCN DX 12 unterstützt... von den Tiers gibt es mehrere Aussagen...

z.B. das für 12_1 bereits Tier 1 ausreicht, aber nicht worin die sich unterscheiden.

Ätzendes durcheinander :D
 
Kann man den bei aktuellen Spielen mit einem Performance-Gewinn rechnen? Also ohne, dass die Entwickler extra auf DX12 portieren?
 
Davon spreche ich ja ^^ ... da fehlen Infos.
Jedenfalls ohne DX12 Port gibt es die Verringerung des Overheads nicht, was die Tiers(1,2,3) schlussendlich bewirken ist noch nicht wirklich bekannt... da herrscht imo nen ziemliches Chaos, auch was nun welches Tier beherrscht und was nicht. Dann heißt es z.B. hier, dass es bei GCN generell kein Problem ist und Tier 3 beherrscht... und Maxwell v2 (GM206 and GM204) Tier 2....
 
Zuletzt bearbeitet:
@Butterwichtel: Wie soll das gehen? Wenn die Engine, sprich der Quellcode, identisch bleibt, kann es nur über Treiberoptimierung gehen, allerdings ändert sich dann ja nicht die vom Spiel unterstützte DX-Version. Etwas am Quellcode müssten die Entwickler also schon schrauben ;)
 
Davon spreche ich ja ^^ ... da fehlen Infos.
Jedenfalls ohne DX12 Port gibt es die Verringerung des Overheads nicht, was die Tiers(1,2,3) schlussendlich bewirken ist noch nicht wirklich bekannt... da herrscht imo nen ziemliches Chaos, auch was nun welches Tier beherrscht und was nicht. Dann heißt es z.B. hier, dass es bei GCN generell kein Problem ist und Tier 3 beherrscht... und Maxwell v2 (GM206 and GM204) Tier 2....
http://8pic.ir/images/veemhqc286k5isfbl9i2.jpg

Es gibt verschiedene Feature-Options und nur ein paar haben Tiers.
Einfach Tier 1,2,3 zu schreiben, ohne Kontext ist verwirrend. ;)
 
PC Spiele unter DX12 "konsolig" programmieren zu können wäre schon eine tolle Sache (man beachte die beachtlichen Ergebnisse, die dort trotz bescheidener Hardware erzielt werden). Die Aussage, die von einem Performancegewinn von ca. 10% (30fps -> 33fps) spricht (bei sonst gleicher Grafik?), ist jedoch ein wenig enttäuschend.
 
Die 10% beziehen sich auf das Zusammenspiel von CPU und GPU. Höchstwahrscheinlich war das Game GPU limitiert.

DX12 zielt aber hauptsächlich auf die CPU Performance ab. Die hat im GPU limit eben nur wenig bis gar keine Auswirkungen.
Positiv ist halt, dass wir unsere CPUs in Zukunft wahrscheinlich deutlich seltener aufrüsten müssen, da sind dann wirklich Performance Gewinne von 50-100% Möglich, je nach Spiel eben. Wie viele Jahre eine CPU in Zukunft ausreicht, wenn sagen wir mal BF4 statt 80% CPU Last nur noch 40% Last erzeugt kannst du dir ja dann gut vorstellen.

Direkt an den FPS wird sich DX12 nur bemerkbar machen, wenn das Spiel unter DX11 CPU limitiert war.


Natürlich könnten die Entwickler die freigewordene CPU performance auch nutzen, um mehr Objekte und höhere Weitsicht zu ermöglichen. Wodurch sich der Vorteil der Kostenersparnis wieder relativiert. Man muss aber auch bedenken, dass die Konsolen CPU Seitig nicht so gut bestück sind. Sprich das Spieldesign wird sich die nächsten Jahre überwiegend an den Möglichkeiten der Konsolen CPU orientieren und wir freuen uns, dass in den meisten Games bald mit etwas Glück sogar ein i3 für 60+ FPS ausreichend ist....
 
Zuletzt bearbeitet:
@Laggy.NET
mir solls recht sein, ich denke das geht auch vielen anderen usern auch so, alle "gefühlte" 6 Jahre
für ne neue CPU langt doch dann voll kommen aus, wenn man nur die Grafigkarte austauschen muss um flüssig auf "ULTRA" High zu gamen :)
 
Die Aussage, die von einem Performancegewinn von ca. 10% (30fps -> 33fps) spricht (bei sonst gleicher Grafik?), ist jedoch ein wenig enttäuschend.
10% wie wo was?

Die 10% beziehen sich auf das Zusammenspiel von CPU und GPU. Höchstwahrscheinlich war das Game GPU limitiert.

DX12 zielt aber hauptsächlich auf die CPU Performance ab. Die hat im GPU limit eben nur wenig bis gar keine Auswirkungen.
[...]
Direkt an den FPS wird sich DX12 nur bemerkbar machen, wenn das Spiel unter DX11 CPU limitiert war.
Fetter Einspruch. :P

Durch Bindless Ressources und ExecuteIndirect konnte z.B. in einer vorgeführten Asteroiden Demo von Intel, jeweils 10% gewonnen werden.
Das eingebettete Video von Fable Legends in diesem Artikel gewinnt 20% im GPU-Limit durch UAV Barriers.
Zusätzlich bietet DX12 das Modell Multi-Engine, womit man insgesamt 3 unabhängige Datenströme generieren kann, im Gegensatz zu einem Datenstrom unter DX11.
Graphics, Compute und Copy.

AMDs GCN GPUs haben dank den ACEs mehrere Compute-Queues die sie verteilen können und ein paar DMA-Engines für Copy-Vorgänge.
Das kann richtig programmiert und angepasst ordentlich viel Leistung im GPU-Limit bei Radeon-GPUs bringen.
Z.B. das PS4 exklusive Spiel The Tomorrow Children kann durch async compute bis zu 20% an Leistung im GPU-Limit erreichen.

Gewisse Zahlen sind vielleicht nicht unbedingt praxisnah, noch erstrecken sie sich auf einen Durchschnitt, aber eine Engine die vollen Nutzen von DX12 zieht, kann sowohl im CPU-, als auch GPU-Limit, stark gegenüber DX11 profitieren.
 
...
Durch Bindless Ressources und ExecuteIndirect konnte z.B. in einer vorgeführten Asteroiden Demo von Intel, jeweils 10% gewonnen werden.
Das eingebettete Video von Fable Legends in diesem Artikel gewinnt 20% im GPU-Limit durch UAV Barriers.
Zusätzlich bietet DX12 das Modell Multi-Engine, womit man insgesamt 3 unabhängige Datenströme generieren kann, im Gegensatz zu einem Datenstrom unter DX11.
Graphics, Compute und Copy.

AMDs GCN GPUs haben dank den ACEs mehrere Compute-Queues die sie verteilen können und ein paar DMA-Engines für Copy-Vorgänge.
Das kann richtig programmiert und angepasst ordentlich viel Leistung im GPU-Limit bei Radeon-GPUs bringen.
Z.B. das PS4 exklusive Spiel The Tomorrow Children kann durch async compute bis zu 20% an Leistung im GPU-Limit erreichen.
...

Haha ^^ Wie geil ist das denn? Ich habe so gut wie nix verstanden... das liegt aber sicherlich nicht an dir. ;D

... ... ...

Hoppla, darf ich das überhaupt zugeben? :)
 
Falls man mehr verstehen möchte, ich kann es natürlich weiter ausführen und vielleicht leichter erklären, ohne Garantie auf Richtigkeit. :P
 
Falls man mehr verstehen möchte, ich kann es natürlich weiter ausführen und vielleicht leichter erklären, ohne Garantie auf Richtigkeit. :P

Nuja, bin mir nicht sicher ob ich der einzige bin mit ??? über dem Kopf, ist ja ein Forum für Leute mit deutlich mehr Ahnung als meine Wenigkeit.
Aber ja, für mich wäre einfacher, einfach einfacher. :)

Ich lese immer gerne mit, bin auch wissbegierig, aber du hast gerade den Vogel abgeschossen. Jetzt komme ich mir richtig dumm vor ;)
 
Die 10% beziehen sich auf das Zusammenspiel von CPU und GPU. Höchstwahrscheinlich war das Game GPU limitiert.

DX12 zielt aber hauptsächlich auf die CPU Performance ab. Die hat im GPU limit eben nur wenig bis gar keine Auswirkungen.
Positiv ist halt, dass wir unsere CPUs in Zukunft wahrscheinlich deutlich seltener aufrüsten müssen, da sind dann wirklich Performance Gewinne von 50-100% Möglich, je nach Spiel eben. Wie viele Jahre eine CPU in Zukunft ausreicht, wenn sagen wir mal BF4 statt 80% CPU Last nur noch 40% Last erzeugt kannst du dir ja dann gut vorstellen.

Direkt an den FPS wird sich DX12 nur bemerkbar machen, wenn das Spiel unter DX11 CPU limitiert war.


Natürlich könnten die Entwickler die freigewordene CPU performance auch nutzen, um mehr Objekte und höhere Weitsicht zu ermöglichen. Wodurch sich der Vorteil der Kostenersparnis wieder relativiert. Man muss aber auch bedenken, dass die Konsolen CPU Seitig nicht so gut bestück sind. Sprich das Spieldesign wird sich die nächsten Jahre überwiegend an den Möglichkeiten der Konsolen CPU orientieren und wir freuen uns, dass in den meisten Games bald mit etwas Glück sogar ein i3 für 60+ FPS ausreichend ist....

Da man heute beim zocken mit einem 5 Jahre alten 2600K noch locker hin kommt, brauchen wir wohl die nächsten 10 Jahre nicht mehr aufrüsten... :D
 
Aber ja, für mich wäre einfacher, einfach einfacher. :)
Wer englisch lesen kann, kann sich hier eine grobe Zusammenfassung durchlesen:
DirectX 12 - Looking back at GDC 2015 and a year of amazing progress - DirectX Developer Blog - Site Home - MSDN Blogs

Folgende "Features" gibt es für eine bessere GPU-Performance:

Explicit resource transitions:

Das war die Sache mit den UAV-Barriers.
UAV = Unordered Access Views.

Grob gesagt, unter DX11 mussten Pausen eingefügt werden, damit State-Wechsel/Zugriffe auf die Ressourcen immer in einer festen Reihenfolge ausgeführt werden.
Das DX12 Modell sieht vor, dass der Entwickler es hier selber definiert.
Dadurch muss der Treiber nicht zwangsweise Dinge garantieren, sondern die App selber.
Richtig ausgeführt führt es dazu, dass man sich viele eingefügten Zwangspausen sparen kann, wenn man dem Treiber einfach garantiert das während der Zeit nicht auf die Ressourcen zugegriffen wird.

Die Sache hat bei dem Fable-Legends Beispiel 20% gebracht.

Multi-Engine:

Die ALUs von GPUs führen Arbeiten durch, die in eine Arbeitsschlange gepackt werden, in Queues.
Der Command-Processor ist dafür zuständig, dass die Arbeiten an die ALUs verteilt werden.
Damals gab es praktisch nur 3D-Queues, mit modernen APIs gibt es auch Compute-Queues.
Das Problem an dieser Stelle ist, dass man nicht parallel mehrere Queues verschicken konnte, eben bis jetzt mit DX12. (Und andere moderne APIs)
Bei alten APIs müssen Compute und 3D Aufgaben in eine Queue gepackt werden, da gibt es Abhängigkeiten, es geschieht alles in einer gewissen Reihenfolge.
Viel cooler wäre es natürlich wenn man Compute und 3D unabhängig an die ALUs verschicken könnte und das ganze asynchron berechnet wird.

Um so etwas zu ermöglichen hat AMD z.B. ACEs (asynchronous compute engines) in ihre Hardware verbaut.
Dadurch kann AMD neben 3D Queues, parallel auch Compute-Queues verschicken.

Neben 3D und Compute kann die GPU natürlich auch andere Aufgaben erledigen, z.B. Speicherzugriffe.
Mit DMA-Engines (Direct Memory Access) kannst auch noch das ganze parallel gestalten.

An dieser Stelle habe ich das Beispiel mit dem PS4 exklusivem Spiel gebracht, welches ihr Lightning durch Compute berechnet und dank async compute rund 20% Performance gewonnen hat.
Das ganze muss aber natürlich designen.

AMD steht da gut da, Intel hat keine Hardware die mehrere Queues gleichzeitig abschicken kann.
Intels bisheriger Hardware bringt es also gar nichts, ob man mehrere Queues hat oder alle Aufgaben in eine Queue packt, muss so oder nacheinander verteilt werden.
Intel hat aber eine DMA-Engine, sie geben allerdings einschränkend zu, dass diese langsam ist.

Nvidia hat Hyper-Q, grob das gleiche wie AMDs ACEs, bloß gab es dieses Feature nur beim GK110 und man gibt zwar an, dass jede Maxwell GPU es auch hat, aber da fehlen Infos, welche Beschränkungen es gibt.
Wie viele Queues können verteilt werden etc.

ExecuteIndirect:

Soweit ich es verstanden habe, kann man mit einem API-Befehl dadurch mehrere Draw-Calls auf einmal ausführen lassen.
Normalerweise muss die CPU jedes mal der GPU sagen, was sie als nächstes tun soll.
Mit ExecuteIndirect bekommt man die Möglichkeit, welche wieder nur zur Verfügung steht wenn man gewisse Dinge passend anordnet, durch einen Befehl der GPU praktisch eine Liste zu ergeben.
Die GPU kann dann für eine gewisse Sachen unabhängig von der CPU weiter Sachen ausführen.
Das entlastet stark die CPU, hilft aber auch der GPU ~10% beim Asteroiden Beispiel. (Intel Hardware)

Dann gab es noch die Sache mit Bindless.
Bei alter Hardware wurden Ressourcen immer fest angebunden, wolltest du mehr Ressourcen nutzen musstest du alte erst entbinden etc.
GCN arbeitet intern z.B. immer bindless, es gibt keine binding-slots, allerdings arbeitet DX11 immer noch so, als müssten Ressourcen gebunden werden.
Intels Hardware konnte dadurch rund 10% gewinnen.

Das war ungefähr grob das, was ich verstanden habe.
 
Zurück