Windows Advanced Rasterization Platform (WARP)-Leitfaden

In diesem Artikel werden die Windows Advanced Rasterization Platform (WARP) und die folgenden Aspekte von WARP beschrieben.

Was ist WARP?

WARP ist ein hochgeschwindigkeits-, vollständig konformer Software-Rasterizer. Es ist eine Komponente der DirectX-Grafiktechnologie, die von der Direct3D 11-Runtime eingeführt wurde. Die Direct3D 11-Runtime wird unter Windows 7, Windows Server 2008 R2 und Windows Vista mit dem Update [KB971644] installiert. Windows 8, Windows 10, Windows Server 2012 & oben und Windows RT enthalten die Direct3D 11.1-Runtime, die über eine aktualisierte Version von WARP verfügt. Windows 10 Fall Creators Update (1709) enthält eine Version von WARP, die sowohl Direct3D 11- als auch Direct3D 12-Runtimes unterstützt.

WARP-Vorteile

WARP bietet die folgenden Vorteile:

Entfernen der Notwendigkeit von benutzerdefinierten Softwarerasterern

WARP vereinfacht die Entwicklung, da es nicht mehr erforderlich ist, einen benutzerdefinierten Softwarerasterer zu erstellen und Ihre Anwendung dafür zu optimieren, anstatt Ihre Anwendung auf Hardware zu optimieren. Durch die Bereitstellung eines einzigen Universellen Softwarerasterizers müssen Sie keine Algorithmen für das Rendern von Bildern mehr auf mehrere Arten schreiben, um auf Hardware oder Software mit unterschiedlichen Features und Funktionen auszuführen. Sie können Algorithmen dennoch auf mehrere Arten implementieren, um eine bessere Leistung oder Skalierung zu erzielen. Sie müssen jedoch die API oder Renderingarchitektur, die zum Implementieren dieser Algorithmen verwendet wird, nicht ändern. Stattdessen können Sie sich auf die Erstellung einer großartigen Direct3D 10- oder höher-Anwendung konzentrieren, die gleich aussieht und auf Hardware oder Software gut funktioniert.

Aktivieren der maximalen Leistung von Grafikhardware

Wenn eine Anwendung so eingestellt ist, dass sie effizient auf Hardware ausgeführt wird, wird sie auch auf WARP effizient ausgeführt. Das Umgekehrte ist auch wahr; Jede Anwendung, die für die gute Ausführung auf WARP optimiert ist, funktioniert gut auf der Hardware. Anwendungen, die Direct3D 10 und höher ineffizient verwenden, können möglicherweise nicht effizient auf unterschiedlicher Hardware skaliert werden. WARP hat ähnliche Leistungsprofile wie Hardware, sodass das Optimieren einer Anwendung für große Batches, die Minimierung von Zustandsänderungen, das Entfernen von Synchronisierungspunkten oder Sperren sowohl Hardware als auch WARP von Vorteil ist.

Aktivieren des Renderings, wenn Direct3D-Hardware nicht verfügbar ist

WARP ermöglicht ein schnelles Rendering in einer Vielzahl von Situationen, in denen Hardwareimplementierungen unerwünscht oder nicht verfügbar sind, einschließlich:

  • Wenn der Benutzer über keine Direct3D-fähige Hardware verfügt
  • Wenn eine Anwendung als Dienst oder in einer Serverumgebung ausgeführt wird
  • Wenn eine Anwendung die Direct3D-Hardwareressourcen für andere Zwecke reservieren möchte
  • Wenn ein Video-Karte nicht installiert ist
  • Wenn ein Videotreiber nicht verfügbar ist oder nicht ordnungsgemäß funktioniert
  • Wenn ein Video Karte nicht genügend Arbeitsspeicher hat, hängt oder benötigt zu viele Systemressourcen, um sie zu initialisieren.

Nutzung vorhandener Ressourcen für das Softwarerendering

Es gibt eine riesige Community, viele Bücher, Websites, SDKs, Beispiele, Whitepaper, Mailinglisten und andere Ressourcen, die Ihnen helfen können, die Vorteile des Shader-basierten Renderings von Direct3D 10 und höher zu nutzen. Mit WARP als Softwarefallback können Sie vorhandenes Hardwarewissen verwenden, um die Leistung Ihrer Anwendung zu verbessern, wenn sie mit Hardware oder Software ausgeführt wird. Darüber hinaus können viele hervorragende Tools aus den Grafik- Karte-Anbietern und im DirectX SDK Ihnen helfen, Leistungsprobleme von Grafikanwendungen zu entwerfen, zu erstellen, zu entwickeln, zu debuggen und zu analysieren. Diese Tools und Kenntnisse können jetzt von der Anwendungsentwicklung profitieren, die sowohl auf Hardware als auch auf Software ausgerichtet ist, wenn Sie WARP verwenden.

Aktivieren von Szenarien ohne Grafikhardware

Verschiedene Algorithmen und Anwendungen (Bildverarbeitungsalgorithmen, Drucken, Remoting, virtuelle PCs und andere Emulatoren, hochwertiges Schriftartenrendering, Diagramme, Graphen usw.) wurden in der Regel für die CPU optimiert, da sie nicht von der Hardware abhängig sind. Mit WARP können Sie eine einzelne Architektur verwenden, die diese Algorithmen und Anwendungen ausführt und vollständig in Software ausgeführt werden kann. Wenn jedoch die Hardwarebeschleunigung verfügbar ist, können Sie sie nutzen.

Abschließen der DirectX-Grafikplattform

MIT WARP können Sie auf alle Grafikfeatures von Direct3D 10 und höher zugreifen, auch auf Computern ohne Direct3D 10 und höher. Direct3D 10-Funktionsbits (Caps) wurden entfernt; Das heißt, Sie müssen nicht mehr überprüfen, ob Grafikfunktionen über Grafikhardware verfügbar sind, da Direct3D 10 und höher diese Verfügbarkeit garantiert. Sie können jetzt alle Features einer vielzahl von Grafikkarten verwenden, da Sie wissen, dass ihre Anwendung sich überall verhält und gleich aussieht. Sie können die Leistung dieser Anwendungen skalieren, indem Sie einfach teure Grafikfeatures auf Low-End-Grafikkarten deaktivieren oder auf kleinere Ziele rendern.

WARP-Funktionen und -Anforderungen

WARP unterstützt alle Direct3D 10- und 10.1-Features vollständig. So unterstützt WARP beispielsweise die folgenden wichtigsten Features:

  • Alle Genauigkeitsanforderungen der Direct3D 10- und 10.1-Spezifikation
  • Direct3D 11 bei Verwendung mit den Featureebenen 9_1, 9_2, 9_3, 10_0 und 10_1 (weitere Informationen zu Featureebenen finden Sie unter D3D_FEATURE_LEVEL).
  • Alle optionalen Texturformate, z. B. Multisample-Renderziele und Sampling von Float-Oberflächen
  • Antialiased, hochwertiges Rendering bis zu 8x Multisample Antialiasing (MSAA)
  • Anisotrope Filterung
  • 32-Bit- und 64-Bit-Anwendungen und 32-Bit-Anwendungen mit großen Adressen

Wenn Sie das Plattformupdate für Windows 7 unter Windows 7 SP1 oder Windows Server 2008 R2 SP1 installieren, umfasst dieses Betriebssystem die Direct3D 11.1-Runtime und eine Version von WARP, die Direct3D 11.x unterstützt, wenn sie mit den Featurestufen 9_1, 9_2, 9_3, 10_0, 10_1 und 11_0 verwendet wird.

Windows 8, Windows 10, Windows Server 2012 & oben und Windows RT die Direct3D 11.1-Runtime und eine neue Version von WARP enthalten. Diese Version unterstützt Direct3D 11.x bei Verwendung mit den Featureebenen 9_1, 9_2, 9_3, 10_0, 10_1, 11_0 und 11_1.

Windows 10 Fall Creators Update (1709) enthält eine neue Version von WARP, die Direct3D 12-Featureebenen 12_0 und 12_1 unterstützt.

Die Mindestcomputeranforderungen für WARP sind identisch mit denen für Windows Vista, insbesondere:

  • Cpu mit mindestens 800 MHz
  • MMX, SSE oder SSE2 ist nicht erforderlich.
  • Mindestens 512 MB RAM

Verwenden von WARP

Für Direct3D 12 muss zum Erstellen eines WARP-Geräts zuerst der WARP-Adapter identifiziert werden. Um dies zu erleichtern, stellt DXGI 1.4 die IDXGIFactory4::EnumWarpAdapter-Methode bereit. Der WARP-Adapter kann dann für D3D12CreateDevice bereitgestellt werden, um ein WARP-Gerät zu erstellen.

Direct3D 10-, 10.1- und 11-Komponenten können einen zusätzlichen Treibertyp verwenden, den Sie beim Erstellen des Geräts angeben können (z. B. beim Aufrufen der D3D11CreateDevice-Funktion ). Dieser Treibertyp ist D3D10_DRIVER_TYPE_WARP oder D3D_DRIVER_TYPE_WARP. Wenn Sie diesen Treibertyp angeben, erstellt die Runtime ein WARP-Gerät und initialisiert kein Hardwaregerät.

Da WARP dieselbe Softwareschnittstelle für Direct3D wie der Verweisrasterer verwendet, kann jede Direct3D-Anwendung, die die Ausführung mit dem Verweisrasterer unterstützen kann, mithilfe von WARP getestet werden. Um WARP zu verwenden, benennen Sie D3d10warp.dll in D3d10ref.dll um, und platzieren Sie sie im selben Ordner wie das Beispiel oder die Anwendung. Wenn Sie als Nächstes zu ref wechseln, wird WARP-Rendering angezeigt.

Wenn Sie WARP in D3d10ref.dll umbenennen und in C:\Programme (x86)\Microsoft DirectX SDK (Juni 2010)\Samples\C++\Direct3D\Bin\x86 platzieren, können Sie alle DirectX-Beispiele für WARP ausführen, indem Sie im Beispiel auf die Schaltfläche "Ref umschalten" klicken oder das Beispiel mit der in der Befehlszeile angegebenen /ref ausführen.

Alle Anwendungen, die Direct3D verwenden können, können WARP verwenden. Dies umfasst die folgenden Anwendungstypen:

Gelegenheitsspiele

Spiele haben in der Regel einfache Renderinganforderungen. Sie erfordern jedoch auch die Verwendung beeindruckender visueller Effekte, die möglicherweise eine Hardwarebeschleunigung erfordern. Die meisten der meistverkauften Spieletitel für Windows sind Entweder Simulationen oder Gelegenheitsspiele, von denen keine leistungsstarke Grafik erfordert. Beide Spielstile profitieren jedoch stark von modernen Shader-basierten Grafiken und der Möglichkeit, auf Hardware zu skalieren.

Vorhandene Nicht-Gaming-Anwendungen

Eine große Anzahl grafischer Anwendungen erfordert eine minimale Anzahl von Codepfaden in ihrer Renderingebene. WARP ermöglicht es diesen Anwendungen, einen einzelnen Direct3D-Codepfad zu implementieren, der auf eine große Anzahl von Computerkonfigurationen abzielen kann.

Erweiterte Renderingspiele

Spieleentwickler möchten möglicherweise grafikspezifische Karte- oder treiberspezifische Renderingfehler isolieren. Daher können alle Spiele, auch sehr grafisch anspruchsvolle Spiele, davon profitieren, ihre Inhalte mithilfe von WARP rendern zu können. Sie können WARP verwenden, um zu überprüfen, ob alle visuellen Artefakte, die Sie finden, Fehler oder Probleme mit Hardware oder Treibern darstellen.

Andere Anwendungen

Zu den Zielanwendungen für WARP gehören auch solche Anwendungen, die derzeit möglicherweise nicht Direct3D 10 oder Direct3D 10.1 verwenden. Zu diesen Zielanwendungen gehören Anwendungen, die immer auf allen Computern funktionieren müssen, Bildverarbeitungsanwendungen, die keine CPU- und GPU-Versionen von Bildverarbeitungsalgorithmen schreiben, Bildverarbeitungsalgorithmen, bei denen die Geschwindigkeit oder die Verwendung der GPU nicht entscheidend ist, z. B. Druck, und Emulatoren und virtuelle Umgebungen, die erweiterte 3D-Grafiken anzeigen.

WARP-Architektur und -Leistung

WARP basiert auf der Codebasis des Verweisrasters. Daher verwendet WARP die gleiche Softwareschnittstelle sowohl für Direct3D 10 und höher als auch für DXGI. WARP ist in Windows 7 in der D3d10warp.dll enthalten, die sich in Windows-Systemordnern befindet. Zwei Versionen von WARP werden auf 64-Bit-Computern installiert, eine x86- und eine x64-Version. Die x64-Version kann unter bestimmten Umständen schneller ausgeführt werden, da der in WARP enthaltene Codegenerator die zusätzlichen Register nutzen kann, die verfügbar sind, wenn Benutzer 64-Bit-Anwendungen ausführen.

WARP enthält die folgenden beiden Echtzeitcompiler mit hoher Geschwindigkeit:

  • Der high-level Intermediate Language Compiler, der HLSL-Bytecode und den aktuellen Renderzustand in einen optimierten Stream von Vektorbefehlen für die Phasen Geometry-Shader (GS), Vertex-Shader (VS) und Pixel-Shader (PS) der Pipeline konvertiert.
  • Der leistungsstarke Just-in-Time-Codegenerator, der diese Befehle verwenden und optimierte SSE2-, SSE4.1-, x86-, x64-, arm- und arm64-Assemblycode generieren kann.

WARP verwendet den Threadpool und die komplexe Aufgabenverwaltung und Abhängigkeitsnachverfolgung, die in Windows Vista eingeführt wurden, damit alle Teile der Renderingpipeline effizient auf die verfügbaren CPU-Kerne verteilt werden können.

WARP verwendet verzögertes Rendering. Das heißt, WARP kann Renderingbefehle batchweise ausführen, sodass die Rasterung nur erfolgt, wenn genügend Daten verfügbar sind, um alle CPU-Ressourcen effizient zu nutzen. Die Arbeit am Standard Anwendungsthreads wird minimiert, damit die Anwendung Befehle so schnell wie möglich übermitteln kann. Wenn eine Anwendung auch multithreaded ist und den Threadpool verwendet, wird die Arbeit gleichmäßig zwischen WARP und der Anwendung verteilt.

Der WARP-Codegenerator wurde optimiert, um die moderne CPU-Architektur optimal zu nutzen. WARP wird auf allen Computern ausgeführt, auf denen Windows Vista und höhere Betriebssysteme ausgeführt werden können, auch wenn der Computer SSE nicht unterstützt. WARP wurde jedoch für Computer optimiert, die SSE2 unterstützen. Es enthält auch Optimierungen für bestimmte Architekturen von AMD- und Intel-Prozessoren sowie Unterstützung für die SSE 4.1-Erweiterungen.

WARP erfordert keine Grafikhardware für die Ausführung. Sie kann auch in Situationen ausgeführt werden, in denen die Hardware nicht verfügbar ist oder nicht initialisiert werden kann.

Anwendungen und Beispiele, die für die Ausführung auf Direct3D 10 und höher ohne WARP-Kenntnisse konzipiert und erstellt wurden, werden wahrscheinlich mit WARP gut ausgeführt. Es wird jedoch empfohlen, die Qualitätseinstellungen und die Auflösung so weit wie möglich zu senken, um nutzbare Bildraten zu erzielen. Sie können WARP verwenden, um Anwendungen zu entwickeln und zu optimieren, die sowohl auf Hardware als auch auf Software gut ausgeführt werden können.

Da WARP mehrere CPU-Kerne für die parallele Ausführung verwendet, schneidet es am besten auf modernen Mehrkern-CPUs ab. WARP wird auch auf Computern mit installierten SSE4.1-Erweiterungen deutlich schneller ausgeführt. Microsoft hat erhebliche Tests und Leistungsoptimierungen auf Computern mit mindestens acht Kernen und SSE4.1 durchgeführt, da diese High-End-Computer während der Lebensdauer von Windows 7 und höheren Betriebssystemen häufiger werden.

Wenn WARP auf der CPU ausgeführt wird, ist es im Vergleich zu einer Grafik Karte auf verschiedene Arten begrenzt. Die Front-Side-Busgeschwindigkeit einer CPU liegt in der Regel bei oder unter 10 GB/s. Im Gegensatz dazu verfügt ein Grafik-Karte häufig über dedizierten Arbeitsspeicher, der eine Grafikbandbreite von 20 bis 100 GB/s oder mehr benötigt. Grafikhardware verfügt auch über Einheiten mit festen Funktionen, die komplexe und teure Aufgaben wie Texturfilterung, Formatdekomprimierung oder Konvertierungen asynchron mit geringem Mehraufwand oder Stromkosten ausführen können. Die Ausführung dieser Vorgänge auf einer typischen CPU ist sowohl hinsichtlich des Energieverbrauchs als auch der Leistungszyklen teuer.

Die typischen Leistungszahlen für einen Intel Penryn-basierten 3,0-GHz-Quad Core-Computer zeigen, dass WARP in einigen Fällen low-end integrierte Direct3D 10- und höhere Grafik-GPUs in einer Reihe von Benchmarks übertreffen kann. Diskrete Low-End-Grafikhardware ist bei der Ausführung dieser Benchmarks in der Regel 4 bis 5 Mal schneller als WARP. Diese integrierten oder diskreten Low-End-GPUs verfügen über eine minimale Auslastung von CPU-Ressourcen. Mid-Range- oder High-End-Grafikkarten sind für viele Anwendungen deutlich schneller als WARP, insbesondere wenn eine Anwendung die Parallelität und Speicherbandbreite nutzen kann, die diese Grafikkarten bieten.

WARP ist kein Ersatz für Grafikhardware, zumal eine vernünftige Low-End-Direct3D 10 und höher diskrete Hardware jetzt kostengünstig ist. Das Ziel von WARP ist es, Anwendungen zu ermöglichen, die Direct3D-kompatible Hardware zu verwenden, ohne über erheblich unterschiedliche Codepfade oder Testanforderungen zu verfügen, unabhängig davon, ob sie auf Hardware oder in Software ausgeführt werden.

Die folgenden beiden Tabellen zeigen WARP-Beispieldaten mit verschiedenen CPUs und Grafikkarten.

Die erste Tabelle zeigt WARP-Beispieldaten mit Direct3D 10 Crysis mit einer Ausführung von 800 x 600 mit allen Qualitätseinstellungen auf den niedrigsten Ebenen:

CPU Time Ave FPS Min FPS Mindestrahmen Max. FPS Maximaler Frame
Core i7 8 Core @ 3,0 GHz 271.57 7.36 3,46 1966 15,01 995
Penryn 4 Core @ 3,0 GHz 351.35 5,69 2.49 1967 10.95 980
Penryn 2 Core @ 3,0 GHz 573.98 3.48 1,35 1964 6,61 988
Core 2 Duo @ 2,6 GHz 707.19 2.83 0.81 1959 5.18 982
Core 2 Duo @ 2,4 GHz 763.25 2.62 0,76 1964 4.70 984
Core 2 Duo @ 2,1 GHz 908.87 2,20 0.64 1965 3.72 986
Xeon 8 Core @ 2,0 GHz 424.04 4.72 1,84 1967 9,56 988
AMD FX74 4 Core @ 3,0 GHz 583.12 3.43 1,41 1967 5.78 986
Phenom 9550 4 Kern @ 2,2 GHz 664.69 3,01 0,53 1959 5.46 987

Die zweite Tabelle zeigt Beispieldaten, die denselben Test für eine Vielzahl von Grafikkarten ausführen:

Grafikkarte Time Ave FPS Min FPS Mindestrahmen Max. FPS Maximaler Frame
NVIDIA 8800 GTS 23.58 84.80 60.78 1957 130.83 1022
NVIDIA 8500 GT 47.63 41.99 25.67 1986 72.57 991
NVIDIA Quadro 290 67.16 29.78 18.19 1969 49.87 1017
NVIDIA 8400 GS 59.01 33.89 21.22 1962 51.82 1021
ATI 3400 53.79 37.18 22.97 618 59.77 1021
ATI 3200 67.19 29.77 18.91 1963 45.74 980
ATI 2400 PRO 67.04 29.83 17.97 606 45.91 987
Intel DX10 Integriert 386.94 5.17 1,74 1974 16.22 995

WARP-Konformität

WARP besteht alle standardmäßigen Windows Hardware Quality Labs (WHQL)-Konformitätstests für die Überprüfung von Direct3D-Hardwaregeräten.

WARP wurde mit einer Suite von Direct3D 10- und Direct3D 10.1-Anwendungen und Benchmarks sowie mit SDK-Beispielen von DirectX, NVIDIA und AMD getestet.

WARP verwendete das Debugging - und Analysetool PIX für Windows bei seinen Tests. Microsoft verfügt über eine große Bibliothek mit Einzelframeerfassungen von Anwendungen, die zum Vergleich zwischen Hardware und WARP verwendet werden. Der Großteil der Images scheint zwischen Hardware und WARP nahezu identisch zu sein; wenn manchmal kleine Unterschiede auftreten, befinden sie sich innerhalb der Toleranzen, die durch die Direct3D 10-Spezifikation definiert sind.