Directx 11 vs directx 12: DirectX 12 vs. DirectX 11: which is better for PC gaming?

Vergleich der DX11- und DX12-Versionen des Witcher 3-Updates ohne RT- und Upscaling-Technologien mit ULTRA+-Einstellungen – DTF-Spiele

Vor dem Test müssen wir eine Junk-Datei im Spielverzeichnis > **\steamapps\common\The Witcher 3 löschen \bin\x64_dx12

23668
Ansichten

Löschen/umbenennen Sie die Datei d3d11on12.dll – jetzt funktionieren MSI Afterburner/Riva Tuner und Steam Overlay.

Der Zweck dieser Datei ist unbekannt. Vielleicht ist es nur Müll, den sie vergessen haben zu löschen, vielleicht funktionieren RT und DLSS, wenn Sie diese Datei in der DX11-Version belassen, vielleicht war ursprünglich geplant, das DX11-Spiel zu belassen, aber DX12-Funktionen darin aufzunehmen, wie zum Beispiel ist in World of Warcraft 9 implementiert0003

Inhalt ausgeblendet

Anzeigen

WoW kann drei DX11-APIs verwenden (im Spiel DX11 Legacy genannt), was nur empfohlen wird, wenn Sie über sehr alte Hardware verfügen. In dieser Version nutzt das Spiel die CPU-Ressourcen sehr schlecht und hat sogar niedrige FPS Auf modernster Hardware ist DX11 eine modifizierte Version, die gegenüber DX12 eine verbesserte Prozessorauslastung aufweist, allgemein höhere durchschnittliche FPS hat und DX12 eine vollwertige DX12-Version ist, FPS ist im Durchschnitt niedriger als bei DX11, aber die sogenannte. Die Tiefstwerte von 0,1 % und 0,01 % sind viel höher und insgesamt sieht das Spiel „flüssiger“ aus

Nachdem Sie den Müll entfernt haben, den CDPR (Saber Interactive) in unserem Spiel (Mod) hinterlassen hat, führen Sie die DX11-Version aus, entfernen Sie alle Einstellungen für die im ULTRA + -Patch hinzugefügten Einstellungen. Beachten Sie, dass die HBAO + -Einstellung für Benutzer nicht mehr verfügbar ist mit Nvidia-Grafikkarten, aber ein neues TAAU-Anti-Aliasing ist verfügbar (TAA ist hervorragend implementiert, wir setzen dafür + CDPR, wir versuchen objektiv zu sein). RT-Effekte und DLSS/FSR2-Upscaling-Technologien sind in der DX11-Version nicht verfügbar.

Nachdem wir das Spiel gestartet haben, gehen wir zum zentralen Platz in Novigrad und sehen das folgende Bild:

99 % GPU-Auslastung, 113 FPS im Screenshot, 110-120 FPS in der Dynamik, wenn man diesen Bereich umkreist. Im Allgemeinen habe ich vor der Veröffentlichung des Patches an derselben Stelle das gleiche Ergebnis erzielt. Die ULTRA+-Einstellungen machen im Vergleich zu ULTRA keinen merklichen Unterschied bei den FPS.

Alles oben Genannte lief auf der folgenden Hardware:

R9 5900x (PBO aktiviert, +75 MHz, zählt als Bestand in Spielen)
RTX 3080 10 [email protected] (2560×1440)
[email protected] MHz RAM
NVME SSD 980 PRP 1 TB

Im Allgemeinen zeigt das Spiel in meiner Konfiguration ein hervorragendes Leistungsergebnis. Habe versucht, in 4K-Auflösung mit der DLDSR-Technologie von Nvidia zu laufen, habe 70-85 FPS auf dem gleichen Quadrat

erreicht. Jetzt schließen wir das Spiel und wählen DX12, führen den gleichen Speicher auf dem Novigrad-Quadrat aus:

Die GPU wird fast 30 % weniger beansprucht, was zu niedrigeren FPS führt. 60-90 FPS, die diesen Bereich im Vergleich zur DX11-Version umrunden, sind ein Fehlschlag.

DLSS hilft in dieser Szene überhaupt nicht, da der Grund für dieses Spiel in einer schlechten CPU-Auslastung liegt. In der DX12-Version gibt es sogar einen CPU-Engpass in 4k, die fps in 4k sind ebenfalls um 5-10 fps niedriger im Vergleich zur DX11-Version, DLSS mit DLDSR ermöglicht normalerweise bessere Bilder und eine Steigerung der fps, aber hier Es reduziert nur die Belastung der GPU, fügt Seife hinzu und das war’s, die FPS bei Qualität und Ultra-Leistung sind gleich. Darüber hinaus habe ich die schlechte DLSS-Datei der Version 2.4, die CDPR verwendet, auf die neueste Version 2.5 (die gleiche stabile Datei wie 2.4.6) geändert. Wahrscheinlich wird es in der Standardeinstellung auch schreckliche Geisterbilder geben.

Auch beim Test der DX12-Version (Screenshots werden in 4k-Auflösung sein) sind mir Fehler mit Schatten aufgefallen:

Schauen Sie sich die Schatten des Efeu an der Wand an.

Sie fühlen sich geschmeichelt.

Ich kann nicht sagen, ob dies exklusiv für die DX12-Version gilt oder nicht (wahrscheinlich nicht).

Als nächstes habe ich eine weitere Zone geladen – den Wald. Und es stellte sich heraus, dass die ULTRA+-Einstellungen im Wald im Gegensatz zu Novigrad die Leistung stark beeinflussen:

DX11 ULTRA+ FPS blieb größtenteils bei etwa 65–75 fps, wenn man von diesem Hain zu einem nahegelegenen Teich rennt, dann stiegen die fps auf 95, wahrscheinlich sind die Gras- und Detaileinstellungen von ULTRA+ GPU-intensiv (ähnlich wie Baum-Tessellation in RDR2)

Gleiche Einstellungen, nur das Power Limit der Grafikkarte wird auf 118 % (440 Watt) hochgedreht. FPS bleibt gleich. In diesem Modus frisst die Karte wie eine RTX 4090 (und ihr Anschluss (3 Stück, 8 Pins) ist normal, was zum Nachdenken anregt), nur dass der Punkt hier 0,

ist

DX12 TAAU ULTRA+, auch hier wird das Spiel durch die GPU limitiert, die FPS bringen aber, genau wie in Novigrad, weniger.

Aufgrund der Tatsache, dass die Hauptlast in der Gesamtstruktur auf die GPU entfällt, beginnt DLSS zu funktionieren. Im Screenshot von DLSS Performance. Die FPS in diesem Modus sind im Allgemeinen höher als in der DX11-Version, aber nicht viel.

Hier ist es erwähnenswert, dass sich die Leistung von DLSS Quality nicht von TAAU unterscheidet, was auf eine schlechte Implementierung von DLSS hinweisen kann. Normalerweise führt Quality zu einer Steigerung von ~ 10–15 fps, selbst in technisch so schlechten Spielen wie Battlefield 2042.

Und hier ist die enthaltene RT (alle Einstellungen) + DLSS-Leistung. Achten Sie auf den THRESH, der im Frame Time-Diagramm in der linken Ecke auftritt. Die Umsetzung ist schrecklich.

Unterschiede mit und ohne RT sind sichtbar. Eine andere Sache ist, dass CDPR die HBAO+-Einstellung entfernt hat, das Standard-SSAO auf Screenshots ohne RT fällt überhaupt nicht auf, mit HBAO+ würde es ungefähr so ​​aussehen wie auf dem Screenshot mit RT. Warum es unmöglich war, normale dynamische Beleuchtung (nicht RT) hinzuzufügen, ist unbekannt (rein theoretisch ist es zumindest zeitaufwändiger), aber beispielsweise sehen RT-Schatten in The Witcher nicht viel besser aus als dynamische Schatten in beispielsweise Hitman Blood Money, ein Spiel, in dem es kein RT gibt und das jetzt auf jedem Toaster läuft.

Dieser Beitrag dient lediglich der Bewertung der grafischen und technischen Komponente des Spiels nach dem „NEXT GEN“-Patch. Tatsächlich handelt es sich bei allen „Next Gen“-Grafiken um Mods, die schon sehr lange auf dem Nexus verfügbar sind. Aus dem obigen Vergleich ist ersichtlich, dass CDPR die Vorteile der DX12-API nicht nutzen konnte und sie tatsächlich nur dazu nutzte, RT-, DLSS- und FSR-Upscaling-Technologien in das Spiel zu integrieren (Letztere werden perfekt zu DX11-Spielen hinzugefügt). Ein Beispiel für ein solches Spiel ist God of War, daher ist das Fehlen dieser in der aktualisierten DX11-Version ein fettes Minus. Meine (geringen) Erwartungen an CDPR und PC Die Post-Patch-Version von The Witcher 3 hat sich erfüllt.

Können sie die (neuen) Probleme auf der PC-Version beheben? Wahrscheinlich. Auch die ursprüngliche Veröffentlichung von The Witcher 3 hatte Probleme, die teilweise von den Entwicklern behoben wurden. Aber meiner Meinung nach ist das Versprechen, Probleme zu beheben, immer eine schwache Ausrede. Betrachten Sie nicht die Tatsache, dass es sich um ein „kostenloses“ Update handelt. Man könnte die Probleme ignorieren, wenn es sich um eine separat herunterladbare Version in der Bibliothek handeln würde, wie es beispielsweise die Autoren von Divinity: Original Sin taten, aber CDPR ging den anderen Weg, also das „kostenlose“ Update oder die Fehler, die nach fast 8 Jahren in der russischen Lokalisierung behoben wurden, sollten in keiner Weise davon überlagert werden, vorerst von fragwürdiger Qualität.

Bonus:

CDPR verwendet BULLSHOT (Screenshot mit gefälschten Grafiken) aus der Version von der E3 2014 im neuen Launcher, News mit Screenshot heute vom 14.12.2022.

Dieser Screenshot befindet sich seit der Veröffentlichung im Steam Store. Das ist falsche Werbung in ihrer reinsten Form. Das Spiel verfügt auch jetzt noch nicht über solche Grafiken.

Wichtige Änderungen in Direct3D 12 gegenüber Direct3D 11 – Win32-Apps

  • Artikel

Direct3D 12 stellt eine deutliche Abkehr vom Direct3D 11-Programmiermodell dar. Direct3D 12 ermöglicht es Anwendungen, näher an der Hardware zu sein als je zuvor. Durch die Annäherung an die Hardware ist Direct3D 12 schneller und effizienter. Der Nachteil Ihrer Anwendung gegenüber der höheren Geschwindigkeit und Effizienz mit Direct3D 12 besteht jedoch darin, dass Sie für mehr Aufgaben verantwortlich sind als mit Direct3D 11.0003

  • Explizite Synchronisierung
  • Physische Speicherortverwaltung
  • Förderzustandsobjekte
  • Befehlslisten und Pakete
  • Heaps und Deskriptortabellen
  • Portierung von Direct3D 11
  • Verwandte Themen

Direct3D 12 ist eine Rückkehr zu einem Low-Level-Programm; Es gibt Ihnen mehr Kontrolle über die grafischen Elemente von Spielen und Anwendungen, indem es neue Funktionen bereitstellt: Objekte zur Darstellung des Gesamtzustands der Pipeline, Befehlslisten und Pakete zur Übermittlung von Arbeiten sowie Deskriptor-Heaps und -Tabellen für den Zugriff auf Ressourcen.

In Direct3D 12 wurde Ihre Anwendung schneller und effizienter, aber Sie sind für mehr Aufgaben verantwortlich als mit Direct3D 11.

Explizite Synchronisierung

  • In Direct3D 12 liegt die CPU- und GPU-Synchronisierung jetzt in der expliziten Verantwortung der Anwendung und wird nicht mehr implizit von der Laufzeit ausgeführt, wie in Direct3D 11. Dies bedeutet auch, dass Direct3D 12 nicht automatisch nach Pipeline-Risiken sucht, sodass dies wiederum in der Verantwortung der Anwendungen liegt.
  • In Direct3D 12 sind Anwendungen für die Aktualisierung von Daten über eine Pipeline verantwortlich. Das heißt, das Map/Lock-DISCARD-Muster in Direct3D 11 muss in Direct3D 12 manuell durchgeführt werden. In Direct3D 11, wenn die GPU beim Aufruf von 9 immer noch einen Puffer verwendet0121 ID3D11DeviceContext::Map c D3D11_MAP_WRITE_DISCARD , die Laufzeit gibt einen Zeiger auf den neuen Speicherbereich anstelle der alten Pufferdaten zurück. Dadurch kann die GPU weiterhin die alten Daten verwenden, während die Anwendung die Daten in den neuen Puffer legt. Die Anwendung erfordert keine zusätzliche Speicherverwaltung; Der alte Puffer wird wiederverwendet oder automatisch zerstört, nachdem die GPU fertig ist.
  • In Direct3D 12 werden alle dynamischen Aktualisierungen (einschließlich konstanter Puffer, dynamischer Scheitelpunktpuffer, dynamischer Texturen usw.) explizit von der Anwendung gesteuert. Diese dynamischen Updates umfassen alle erforderlichen GPU-Fencings oder Pufferungen. Die Anwendung ist dafür verantwortlich, den verfügbaren Speicher so lange zu speichern, bis er nicht mehr benötigt wird.
  • Direct3D 12 verwendet nur die Referenzzählung im COM-Stil für die Lebensdauer von Schnittstellen (unter Verwendung eines schwachen Direct3D-Referenzmodells, das an die Gerätelebensdauer gebunden ist). Alle Lebensdauern und Beschreibungen des Ressourcenspeichers liegen in der alleinigen Verantwortung der Anwendung für die ordnungsgemäße Aufbewahrung und werden nicht berücksichtigt. Direct3D 11 verwendet außerdem die Referenzzählung, um die Lebensdauer von Schnittstellenabhängigkeiten zu steuern.

Physische Speicherortkontrolle

Eine Direct3D 12-Anwendung muss Race Conditions zwischen mehreren Warteschlangen, mehreren Adaptern und CPU-Threads verhindern. D3D12 hält CPU und GPU nicht mehr synchron und unterstützt auch keine praktischen Mechanismen zur Ressourcenumbenennung oder viel Pufferung. Es müssen Zäune verwendet werden, um zu verhindern, dass der Speicher von mehreren Verarbeitungseinheiten überschrieben wird, bevor eine andere Verarbeitungseinheit die Nutzung beendet hat.

Die Direct3D 12-Anwendung muss sicherstellen, dass die Daten im Speicher gespeichert werden und von der GPU gelesen werden. Der von jedem Objekt verwendete Speicher wird zum Zeitpunkt der Objekterstellung resident. Anwendungen, die diese Methoden aufrufen, müssen Schutzvorrichtungen verwenden, um sicherzustellen, dass die GPU nicht auf vorbelegte Objekte zugreift.

Ressourcenbarrieren sind eine weitere Art der Synchronisierung, die zur Synchronisierung von Ressourcen- und Unterressourcenübergängen auf einer sehr detaillierten Ebene verwendet wird.

Siehe Direct3D 12-Speicherverwaltung.

Direct3D 11 ermöglicht Ihnen die Verwaltung des Pipelinestatus mithilfe einer großen Menge unabhängiger Objekte. Beispielsweise können der Status der Eingabeassembler, der Status des Pixel-Shaders, der Status des Rasterizers und der Status der Ausgabefusion unabhängig voneinander geändert werden. Dieses Design bietet eine bequeme und relativ hochwertige Darstellung der Grafikpipeline, nutzt jedoch nicht die Vorteile moderner Hardware, vor allem weil die verschiedenen Zustände oft voneinander abhängig sind. Beispielsweise kombinieren viele GPUs den Pixel-Shader und den Ausgabe-Fusion-Status in einer einzigen Hardware-Darstellung. Da Sie mit der Direct3D 11-API diese Pipelinestufen jedoch separat festlegen können, kann der Anzeigetreiber Probleme mit dem Pipelinestatus erst dann beheben, wenn der Status abgeschlossen ist, also vor der Renderzeit. Dieses Schema verzögert das Einrichten des Hardwarestatus, was zusätzlichen Overhead und weniger Draw-Aufrufe pro Frame bedeutet.

Direct3D 12 löst dieses Problem, indem es den Großteil des Pipeline-Status in unveränderliche Pipeline-Statusobjekte (PSOS) konsolidiert, die bei der Erstellung finalisiert werden. Die Hardware und die Treiber können das PSO dann sofort in alle nativen Hardware-Anweisungen und -Zustände umwandeln, die für die Arbeit mit der GPU erforderlich sind. Sie können den verwendeten PSO immer noch dynamisch ändern, aber dazu muss die Hardware nur eine minimale Menge des vorberechneten Status direkt in Hardwareregister kopieren, anstatt den Hardwarestatus in Echtzeit zu berechnen. Mit psos wird der Overhead von Draw-Aufrufen erheblich reduziert und es können viel mehr Draw-Aufrufe pro Frame durchgeführt werden. Weitere Informationen zur Anwendungssoftware finden Sie unter Verwalten des Grafikpipelinestatus in Direct3D 12.

Befehlslisten und Pakete

In Direct3D 11 erfolgt die gesamte Auftragsübermittlung über den unmittelbaren Kontext, bei dem es sich um einen einzelnen Befehlsstrom handelt, der an die GPU gesendet wird. Um eine Multithread-Skalierung zu erreichen, stehen Spielen auch verzögerte Kontexte zur Verfügung. Verzögerte Kontexte in Direct3D 11 lassen sich nicht perfekt auf die Hardware abbilden, sodass in ihnen relativ wenig Arbeit geleistet werden kann.

Direct3D 12 führt ein neues Auftragsübermittlungsmodell ein, das auf Befehlslisten basiert, die alle Informationen enthalten, die zum Ausführen einer bestimmten GPU-Arbeitslast erforderlich sind. Jede neue Befehlsliste enthält Informationen wie PSO-Nutzung, erforderliche Textur- und Pufferressourcen sowie Argumente für alle Zeichenaufrufe. Da jede Anweisungsliste in sich geschlossen ist und keinen Status erbt, kann der Treiber alle erforderlichen GPU-Anweisungen im Voraus und in einem freien Stream vorab berechnen. Der einzige erforderliche sequentielle Prozess ist das abschließende Senden von Befehlslisten an die GPU über die Befehlswarteschlange.

Zusätzlich zu den Befehlslisten führt Direct3D 12 auch eine zweite Ebene der Vorberechnung ein: Pakete . Im Gegensatz zu Befehlslisten, die vollständig in sich geschlossen sind und normalerweise erstellt, einmal gesendet und abgelehnt werden, bieten Pakete eine Form der Statusvererbung, die eine Wiederverwendung ermöglicht. Wenn ein Spiel beispielsweise zwei Charaktermodelle mit unterschiedlichen Texturen zeichnen möchte, besteht ein Ansatz darin, eine Befehlsliste mit zwei Sätzen derselben Zeichenaufrufe zu schreiben. Ein anderer Ansatz besteht jedoch darin, einen Stapel zu „schreiben“, der ein Charaktermodell zeichnet, und den Stapel dann mit unterschiedlichen Ressourcen zweimal in der Befehlsliste „abzuspielen“. Im letzteren Fall muss der Anzeigetreiber die entsprechenden Anweisungen nur einmal auswerten, und das Erstellen einer Befehlsliste entspricht praktisch zwei kostengünstigen Funktionsaufrufen.

Weitere Informationen zu Befehlslisten und Paketen finden Sie unter Senden von Arbeiten an Direct3D 12.

Heaps und Deskriptortabellen

Die Ressourcenbindung in Direct3D 11 ist sehr abstrakt und praktisch, lässt jedoch viele moderne Hardwarefunktionen ungenutzt. In Direct3D 11 erstellen Spiele Ressourcendarstellungsobjekte und binden diese Darstellungen dann an mehrere Slots in verschiedenen Shader-Stufen in der Pipeline. Shader wiederum lesen Daten aus den expliziten Bindungsslots, die zum Zeitpunkt des Zeichnens festgelegt sind. Dieses Modell bedeutet, dass jedes Mal, wenn das Spiel unterschiedliche Ressourcen verwendet, verschiedene Ansichten erneut an verschiedene Slots binden und Draw erneut aufrufen muss. Dieser Fall stellt auch Kosten dar, die durch die volle Ausnutzung der Möglichkeiten moderner Geräte vermieden werden können.

Direct3D 12 ändert das Bindungsmodell, um es an moderne Hardware anzupassen, und verbessert die Leistung erheblich. Anstatt eigenständige Ressourcendarstellungen und explizite Zuordnung zu Slots zu erfordern, bietet Direct3D 12 einen Deskriptor-Heap, in dem Spiele unterschiedliche Ressourcendarstellungen erstellen. Dieses Schema bietet GPUs einen Mechanismus, um eine Hardwareressourcenbeschreibung (Handle) direkt in den Speicher zu schreiben. Um zu deklarieren, welche Ressourcen von der Pipeline für einen bestimmten Draw-Aufruf verwendet werden sollen, geben Spiele eine oder mehrere Deskriptortabellen an, die Teilbereiche des gesamten Deskriptor-Heaps darstellen. Da der Deskriptor-Heap bereits mit den entsprechenden Hardware-Deskriptordaten gefüllt ist, ist die Aktualisierung der Deskriptortabellen ein äußerst wirtschaftlicher Vorgang.

Zusätzlich zu den Leistungsverbesserungen durch Deskriptor-Heaps und -Tabellen ermöglicht Direct3D 12 auch die dynamische Indizierung von Ressourcen in Shadern, was beispiellose Flexibilität bietet und neue Rendering-Methoden eröffnet. Beispielsweise kodieren moderne Lazy-Rendering-Mechanismen normalerweise eine Art Material- oder Objektkennung in einen Zwischen-G-Puffer. In Direct3D 11 müssen diese Subsysteme darauf achten, nicht zu viele Materialien zu verwenden, da die Aufnahme zu vieler Materialien in einen einzelnen G-Puffer den endgültigen Renderdurchgang erheblich verlangsamen kann.