Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Artikel werden die Windows Advanced Rasterization Platform (WARP) und die folgenden Aspekte von WARP beschrieben.
- Was ist WARP?
-
WARP-Vorteile
- Entfernen der Notwendigkeit von benutzerdefinierten Software-Rasterizern
- Aktivieren der maximalen Leistung von grafikhardware
- Aktivieren des Renderings, wenn Direct3D-Hardware nicht verfügbar
- Nutzung vorhandener Ressourcen für das Softwarerendering
- Aktivieren von Szenarien, für die keine Grafikhardware erforderlich ist
- Abschließen der DirectX-Grafikplattform
- WARP-Funktionen und -Anforderungen
- Verwendung von WARP-
- Empfohlene Anwendungstypen für WARP-
- WARP-Architektur und -Leistung
- WARP-Konformität
Was ist WARP?
WARP ist ein Hochgeschwindigkeits-, voll konformer Software-Rasterizer. Es handelt sich um eine Komponente der DirectX-Grafiktechnologie, die von der Direct3D 11-Laufzeit eingeführt wurde. Die Direct3D 11-Laufzeit ist unter Windows 7, Windows Server 2008 R2 und Windows Vista mit dem [KB971644]-Update installiert. Windows 8, Windows 10, Windows Server 2012 & oben und Windows RT enthalten die Direct3D 11.1-Laufzeit, 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-Laufzeiten unterstützt.
Verzerrungsvorteile
WARP bietet die folgenden Vorteile:
- Entfernen der Notwendigkeit von benutzerdefinierten Software-Rasterizern
- Aktivieren der maximalen Leistung von grafikhardware
- Aktivieren des Renderings, wenn Direct3D-Hardware nicht verfügbar
- Nutzung vorhandener Ressourcen für das Softwarerendering
- Aktivieren von Szenarien, für die keine Grafikhardware erforderlich ist
- Abschließen der DirectX-Grafikplattform
Entfernen der Notwendigkeit von benutzerdefinierten Software-Rasterizern
WARP vereinfacht die Entwicklung, indem die Notwendigkeit entfernt wird, einen benutzerdefinierten Softwarerasterizer zu erstellen und Ihre Anwendung dafür zu optimieren, anstatt Ihre Anwendung für Hardware zu optimieren. Durch die Bereitstellung eines einzelnen, allgemeinen Software-Rasterizers müssen Sie keine Bildrenderingalgorithmen mehr auf mehrere Arten schreiben, um auf Hardware oder Software mit unterschiedlichen Features und Funktionen auszuführen. Sie können Algorithmen weiterhin auf mehrere Arten implementieren, um eine bessere Leistung oder Skalierung zu erzielen; Sie müssen jedoch nicht die API- oder Renderingarchitektur ändern, die zum Implementieren dieser Algorithmen verwendet wird. Stattdessen können Sie sich auf das Erstellen einer großartigen Direct3D 10- oder höher-Anwendung konzentrieren, die genauso aussieht und gut auf Hardware oder in Software ausgeführt wird.
Aktivieren der maximalen Leistung von Grafikhardware
Wenn eine Anwendung so optimiert ist, dass sie effizient auf Hardware ausgeführt wird, wird sie auch effizient auf WARP ausgeführt. Das Gegenteil ist auch wahr; Jede Anwendung, die so optimiert ist, dass sie gut auf WARP ausgeführt wird, funktioniert gut auf der Hardware. Anwendungen, die Direct3D 10 und höher verwenden, werden möglicherweise nicht effizient auf unterschiedlicher Hardware skaliert. WARP verfügt über ähnliche Leistungsprofile wie Hardware, sodass das Optimieren einer Anwendung für große Batches, das Minimieren von Zustandsänderungen, das Entfernen von Synchronisierungspunkten oder Sperren sowohl Hardware als auch WARP zugute kommt.
Aktivieren des Renderings, wenn Direct3D-Hardware nicht verfügbar ist
WARP ermöglicht schnelles Rendering in einer Vielzahl von Situationen, in denen Hardwareimplementierungen unerwünschte 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 Verwendungen reservieren möchte
- Wenn eine Grafikkarte nicht installiert ist
- Wenn ein Videotreiber nicht verfügbar ist oder nicht ordnungsgemäß funktioniert
- Wenn eine Grafikkarte nicht genügend Arbeitsspeicher hat, hängt sie ab oder benötigt zu viele Systemressourcen, um sie zu initialisieren.
Nutzen vorhandener Ressourcen für das Softwarerendering
Es gibt eine riesige Community, viele Bücher, Websites, SDKs, Beispiele, Whitepapers, Mailinglisten und andere Ressourcen, die Ihnen helfen können, direct3D 10 und höher shaderbasiertes Bildrendering zu nutzen. Mit WARP als Software-Fallback können Sie vorhandene Kenntnisse zur Hardware 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 von den Grafikkartenanbietern 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, für die keine Grafikhardware erforderlich ist
Verschiedene Algorithmen und Anwendungen (Bildverarbeitungsalgorithmen, Drucken, Remoting, virtuelle PCs und andere Emulatoren, qualitativ hochwertiges Schriftartenrendering, Diagramme 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 die vollständig in Software ausgeführt werden kann. Wenn die Hardwarebeschleunigung verfügbar ist, können Sie sie nutzen.
Abschließen der DirectX-Grafikplattform
MIT WARP können Sie auf alle Direct3D 10- und höher-Grafikfeatures auch auf Computern ohne Direct3D 10 und höher auf Grafikhardware zugreifen. Direct3D 10 entfernte Funktionsbits (Kapitälchen); Das heißt, Sie müssen nicht mehr überprüfen, ob Grafikfunktionen von der 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, die wissen, dass sich ihre Anwendung verhält und überall 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. Beispielsweise unterstützt WARP die folgenden wichtigsten Features:
- Alle Genauigkeitsanforderungen der Direct3D 10- und 10.1-Spezifikation
- Direct3D 11 bei Verwendung mit 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, qualitativ hochwertiges Rendering bis zu 8x Multisample Antialiasing (MSAA)
- Anisotropische Filterung
- 32-Bit- und 64-Bit-Anwendungen und 32-Bit-Anwendungen mit großer Adresse
Wenn Sie das Platform Update für Windows 7 unter Windows 7 SP1 oder Windows Server 2008 R2 SP1 installieren, dieses Betriebssystem enthält dann die Direct3D 11.1-Laufzeit und eine Version von WARP, die Direct3D 11.x unterstützt, wenn sie mit Featureebenen 9_1, 9_2, 9_3, 10_0, 10_1 verwendet wird, und 11_0.
Windows 8, Windows 10, Windows Server 2012 & oben und Windows RT umfassen die Direct3D 11.1-Laufzeit und eine neue Version von WARP. Diese Version unterstützt Direct3D 11.x bei Verwendung mit 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 mindesten Computeranforderungen für WARP sind identisch mit Windows Vista, insbesondere:
- Mindestens 800 MHz CPU
- 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 angeben können, wenn Sie das Gerät erstellen (z. B. wenn Sie die D3D11CreateDevice Funktion aufrufen). Dieser Treibertyp ist D3D10_DRIVER_TYPE_WARP oder D3D_DRIVER_TYPE_WARP. Wenn Sie diesen Treibertyp angeben, erstellt die Laufzeit ein WARP-Gerät und initialisiert kein Hardwaregerät.
Da WARP dieselbe Softwareschnittstelle für Direct3D verwendet wie der Referenzrasterizer, kann jede Direct3D-Anwendung, die die Ausführung mit dem Referenzrasterizer unterstützen kann, mithilfe von WARP getestet werden. Um WARP zu verwenden, benennen Sie D3d10warp.dll um, um sie zu D3d10ref.dll, und platzieren Sie sie in demselben Ordner wie das Beispiel oder die Anwendung. Als Nächstes sehen Sie, wenn Sie zu Ref wechseln, das WARP-Rendering.
Wenn Sie WARP in D3d10ref.dll umbenennen und in C:\Program Files (x86)\Microsoft DirectX SDK (Juni 2010)\Samples\C++\Direct3D\Bin\x86 platzieren, können Sie alle DirectX-Beispiele für WARP ausführen, entweder durch Klicken auf die Schaltfläche "Ref ein-/ausschalten" im Beispiel oder durch Ausführen des Beispiels mit /ref, das in der Befehlszeile angegeben ist.
Empfohlene Anwendungstypen für WARP
Alle Anwendungen, die Direct3D verwenden können, können WARP verwenden. Dazu gehören die folgenden Arten von Anwendungen:
Lässige Spiele
Spiele haben in der Regel einfache Renderinganforderungen. Sie erfordern jedoch auch die Verwendung beeindruckender visueller Effekte, die möglicherweise Hardwarebeschleunigung benötigen. Die meisten der am besten verkauften Spieletitel für Windows sind Simulationen oder Casual-Spiele, von denen keines der Hochleistungsgrafiken erfordert. Beide Spielstile profitieren jedoch erheblich von modernen Shader-basierten Grafiken und der Möglichkeit zur Skalierung auf Hardware.
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 Grafikkarten- oder treiberspezifische Renderingfehler isolieren. Daher können alle Spiele, auch extrem grafisch anspruchsvolle Spiele, von der Möglichkeit profitieren, ihre Inhalte mithilfe von WARP zu rendern. Sie können WARP verwenden, um zu überprüfen, ob visuelle Artefakte, die Sie feststellen, Fehler oder Probleme mit Hardware oder Treibern darstellen.
Andere Anwendungen
Die Zielanwendungen für WARP enthalten auch diejenigen, die derzeit 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 Geschwindigkeit oder Verwendung der GPU nicht kritisch ist, z. B. Drucken, Emulatoren und virtuelle Umgebungen, die erweiterte 3D-Grafiken anzeigen.
WARP-Architektur und -Leistung
WARP basiert auf der Referenzrasterizer-Codebasis. Daher verwendet WARP die gleiche Softwareschnittstelle für Direct3D 10 und höher und DXGI. WARP ist in Windows 7 im D3d10warp.dllenthalten, das sich in Windows-Systemordnern befindet. Zwei Versionen von WARP werden auf 64-Bit-Computern installiert, einer x86- und 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 High-Speed-Compiler in Echtzeit:
- Der Compiler der allgemeinen Zwischensprache, der HLSL-Bytecode und den aktuellen Renderzustand in einen optimierten Datenstrom von Vektorbefehlen für den Geometrie-Shader (GS), den Vertex-Shader (VS) und die Pixelshaderphase (PS) der Pipeline konvertiert.
- Der leistungsstarke Just-in-Time-Code-Generator, 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 wurde, damit alle Teile der Renderingpipeline effizient über verfügbare CPU-Kerne verteilt werden können.
WARP verwendet verzögertes Rendering. Das heißt, WARP kann Renderbefehle stapeln, sodass die Rasterung nur erfolgt, wenn genügend Daten verfügbar sind, um alle CPU-Ressourcen effizient zu verwenden. Die Arbeit am Hauptanwendungsthread 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 Ausführung der Grafikhardware. Sie kann auch in Situationen ausgeführt werden, in denen Hardware nicht verfügbar ist oder nicht initialisiert werden kann.
Anwendungen und Beispiele, die entwickelt und für die Ausführung auf Direct3D 10 und höher entwickelt wurden, ohne dass kenntnisse von WARP bekannt sind, werden wahrscheinlich gut mit WARP ausgeführt. Es wird jedoch empfohlen, die Qualitätseinstellungen und die Auflösung so weit wie möglich zu senken, um verwendbare Bildfrequenzen zu erzielen. Sie können WARP verwenden, um Anwendungen zu entwickeln und zu optimieren, die sowohl auf Hardware als auch auf Software gut funktionieren.
Da WARP mehrere CPU-Kerne für die parallele Ausführung verwendet, ist die Leistung am besten auf modernen Multi-Core-CPUs. WARP läuft auch deutlich schneller auf Computern mit installierten SSE4.1-Erweiterungen. Microsoft hat erhebliche Tests und Leistungsoptimierungen auf Computern mit acht oder mehr Kernen und SSE4.1 durchgeführt, da diese High-End-Computer während der Lebensdauer von Windows 7 und höher häufiger werden.
Wenn WARP auf der CPU ausgeführt wird, ist sie im Vergleich zu einer Grafikkarte auf verschiedene Arten begrenzt. Die frontseitige Busgeschwindigkeit einer CPU liegt in der Regel bei oder unter 10 GB/s. Im Gegensatz dazu verfügt eine Grafikkarte häufig über dedizierten Speicher, der 20 bis 100 GB/s oder mehr Grafikbandbreite verwendet. Grafikhardware verfügt auch über Einheiten mit fester Funktion, die komplexe und teure Aufgaben ausführen können, z. B. Texturfilterung, Formatdekomprimierung oder Konvertierungen, asynchron mit geringem Aufwand oder Leistungskosten. Das Ausführen dieser Vorgänge auf einer typischen CPU ist sowohl hinsichtlich des Stromverbrauchs als auch der Leistungszyklen teuer.
Die typischen Leistungsnummern für einen Intel Penryn-basierten 3,0GHz Quad Core-Computer zeigen, dass WARP in einigen Fällen integrierte Direct3D 10 und höhere Grafik-GPUs in einer Reihe von Benchmarks outperformieren kann. Diskrete Low-End-Grafikhardware ist in der Regel 4 bis 5 Mal schneller als WARP bei der Ausführung dieser Benchmarks. Diese integrierten oder diskreten GPUs mit geringem End-Wert verwenden nur minimale CPU-Ressourcen. Mid-Range- oder High-End-Grafikkarten sind wesentlich schneller als WARP für viele Anwendungen, insbesondere wenn eine Anwendung die Parallelität und Speicherbandbreite nutzen kann, die diese Grafikkarten bereitstellen.
WARP ist kein Ersatz für Grafikhardware, insbesondere da vernünftige Low-End Direct3D 10 und höher diskrete Hardware jetzt kostengünstig ist. Ziel von WARP ist es, Anwendungen das Ziel von Direct3D-kompatibler Hardware zu ermöglichen, ohne dass sie erhebliche unterschiedliche Codepfade oder Testanforderungen haben, 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 bei 800x600 mit allen Qualitätseinstellungen auf ihren niedrigsten Ebenen:
CPU | Zeit | Ave FPS | Min FPS | Min Frame | Max. FPS | Max. Frame |
---|---|---|---|---|---|---|
Core i7 8 Core @ 3,0GHz | 271.57 | 7.36 | 3.46 | 1966 | 15.01 | 995 |
Penryn 4 Core @ 3,0GHz | 351.35 | 5.69 | 2.49 | 1967 | 10.95 | 980 |
Penryn 2 Core @ 3,0GHz | 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,1GHz | 908.87 | 2.20 | 0.64 | 1965 | 3.72 | 986 |
Hertz 8 Core @ 2,0GHz | 424.04 | 4.72 | 1.84 | 1967 | 9.56 | 988 |
AMD FX74 4 Core @ 3,0GHz | 583.12 | 3.43 | 1.41 | 1967 | 5.78 | 986 |
Phenom 9550 4 Core @ 2,2GHz | 664.69 | 3.01 | 0.53 | 1959 | 5.46 | 987 |
Die zweite Tabelle zeigt Beispieldaten, die denselben Test auf einer Vielzahl von Grafikkarten ausführen:
Grafikkarte | Zeit | Ave FPS | Min FPS | Min Frame | Max. FPS | Max. 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 WhQL-Konformitätstests (Windows Hardware Quality Labs) 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 PIX Debugging- und Analysetool für Windows in seinen Tests; Microsoft verfügt über eine große Bibliothek mit Einzelframe-Erfassungen von Anwendungen, die zum Vergleichen zwischen Hardware und WARP verwendet werden. Der Großteil der Bilder erscheint fast identisch zwischen Hardware und WARP; Wo manchmal kleine Unterschiede auftreten, befinden sie sich innerhalb der Toleranzen, die durch die Direct3D 10-Spezifikation definiert sind.