Windows Advanced Rasterization Platform (WARP) Guide
I den här artikeln beskrivs Warp (Windows Advanced Rasterization Platform) och följande aspekter av WARP.
- Vad är WARP?
-
WARP-förmåner
- Att ta bort behovet av anpassade rastreringsprogram för programvara
- aktivera maximal prestanda från grafikmaskinvara
- aktivera återgivning när Direct3D-maskinvara inte är tillgänglig
- utnyttja befintliga resurser för programvarurendering
- aktiveringsscenarier som inte kräver grafikmaskinvara
- slutföra DirectX-grafikplattformen
- WARP-funktioner och krav
- Använda WARP-
- rekommenderade programtyper för WARP-
- WARP-arkitektur och prestanda
- WARP-överensstämmelse
Vad är WARP?
WARP är en hög hastighet, helt överensstämmande programvara rastrizer. Det är en komponent i DirectX-grafiktekniken som introducerades av Direct3D 11-körningen. Direct3D 11-körningen är installerad på Windows 7, Windows Server 2008 R2 och Windows Vista med uppdateringen [KB971644]. Windows 8, Windows 10, Windows Server 2012 & ovan och Windows RT innehåller Direct3D 11.1-körningen, som har en uppdaterad version av WARP. Windows 10 Fall Creators Update (1709) innehåller en version av WARP som stöder både Direct3D 11- och Direct3D 12-körningar.
WARP-fördelar
WARP ger följande fördelar:
- Att ta bort behovet av anpassade rastreringsprogram för programvara
- aktivera maximal prestanda från grafikmaskinvara
- aktivera återgivning när Direct3D-maskinvara inte är tillgänglig
- utnyttja befintliga resurser för programvarurendering
- aktiveringsscenarier som inte kräver grafikmaskinvara
- slutföra DirectX-grafikplattformen
Ta bort behovet av anpassade rastreringsprogram för programvara
WARP förenklar utvecklingen genom att ta bort behovet av att skapa en anpassad rastrering av programvara och finjustera programmet för det i stället för att justera programmet för maskinvara. Genom att tillhandahålla en enda, generell program rastrering behöver du inte längre skriva bildåtergivningsalgoritmer på flera sätt för att köra på maskinvara eller programvara med olika funktioner. Du kan fortfarande implementera algoritmer på flera sätt för att uppnå bättre prestanda eller skalning. Du behöver dock inte ändra API:et eller renderingsarkitekturen som används för att implementera dessa algoritmer. I stället kan du fokusera på att skapa ett bra Direct3D 10- eller senare program som ser likadant ut och fungerar bra på maskinvara eller programvara.
Aktivera maximal prestanda från grafikmaskinvara
När ett program är justerat för att köras effektivt på maskinvara körs det även effektivt på WARP. Det omvända är också sant; alla program som är inställda på att köras bra på WARP kommer att fungera bra på maskinvara. Program som använder Direct3D 10 och senare ineffektivt kanske inte skalar effektivt på olika maskinvara. WARP har liknande prestandaprofiler som maskinvara, så att justera ett program för stora batchar, minimera tillståndsändringar, ta bort synkroniseringspunkter eller lås kommer att gynna både maskinvara och WARP.
Aktivera rendering när Direct3D-maskinvara inte är tillgänglig
WARP möjliggör snabb rendering i en mängd olika situationer där maskinvaruimplementeringar är oönskade eller otillgängliga, inklusive:
- När användaren inte har någon Direct3D-kompatibel maskinvara
- När ett program körs som en tjänst eller i en servermiljö
- När ett program vill reservera Direct3D-maskinvaruresurserna för andra användningsområden
- När ett grafikkort inte är installerat
- När en videodrivrutin inte är tillgänglig eller inte fungerar som den ska
- När ett grafikkort har slut på minne, låser sig eller skulle ta för många systemresurser för att initiera
Utnyttja befintliga resurser för programvarurendering
Det finns en enorm gemenskap, många böcker, webbplatser, SDK:er, exempel, white papers, e-postlistor och andra resurser som kan hjälpa dig att dra nytta av Direct3D 10 och senare skuggningsbaserad bildåtergivning. Med WARP som programåterställning kan du använda befintlig kunskap om maskinvara för att förbättra programmets prestanda när det körs med maskinvara eller programvara. Dessutom kan många utmärkta verktyg från grafikkortsleverantörerna och i DirectX SDK hjälpa dig att utforma, skapa, utveckla, felsöka och analysera prestandaproblem för grafikprogram. Dessa verktyg och kunskaper kan nu vara till nytta för programutveckling som är inriktade på både maskinvara och programvara när du använder WARP.
Aktivera scenarier som inte kräver grafikmaskinvara
Olika algoritmer och program (bildbearbetningsalgoritmer, utskrift, fjärrkommunikation, virtuella datorer och andra emulatorer, högkvalitativ teckenåtergivning, diagram, diagram och så vidare) har vanligtvis optimerats för processorn eftersom de inte är beroende av maskinvara. Med WARP kan du använda en enda arkitektur som kör dessa algoritmer och program och som kan köras helt i programvara. men om maskinvaruacceleration är tillgänglig kan du dra nytta av den.
Slutföra DirectX-grafikplattformen
MED WARP kan du komma åt alla Direct3D 10- och senare grafikfunktioner även på datorer utan Direct3D 10 och senare grafikmaskinvara. Direct3D 10 borttagna funktionsbitar (caps); Det innebär att du inte längre behöver kontrollera om grafikfunktioner är tillgängliga från grafikmaskinvara eftersom Direct3D 10 och senare garanterar den här tillgängligheten. Nu kan du använda alla funktioner i ett brett utbud av grafikkort med vetskapen om att deras program kommer att bete sig och se likadana ut överallt. Du kan skala prestanda för dessa program genom att helt enkelt inaktivera dyra grafikfunktioner på kort med låg slut eller återgivning till mindre mål.
WARP-funktioner och krav
WARP har fullt stöd för alla Direct3D 10- och 10.1-funktioner. WARP stöder till exempel följande viktigaste funktioner:
- Alla precisionskrav i Direct3D 10- och 10.1-specifikationen
- Direct3D 11 när det används med funktionsnivåer 9_1, 9_2, 9_3, 10_0 och 10_1 (mer information om funktionsnivåer finns i D3D_FEATURE_LEVEL)
- Alla valfria strukturformat, till exempel återgivningsmål för flera exempel och sampling från flyttalsytor
- Antialias, hög kvalitet rendering upp till 8x multisample antialiasing (MSAA)
- Anisotropisk filtrering
- 32-bitars- och 64-bitarsprogram och stora adressmedvetna 32-bitarsprogram
När du installerar Platform Update för Windows 7 på Windows 7 SP1 eller Windows Server 2008 R2 SP1, det operativsystemet innehåller sedan Direct3D 11.1-körningen och en version av WARP som stöder Direct3D 11.x när den används med funktionsnivåer 9_1, 9_2, 9_3, 10_0, 10_1, och 11_0.
Windows 8, Windows 10, Windows Server 2012 & ovan och Windows RT innehåller Direct3D 11.1-körningen och en ny version av WARP. Den här versionen stöder Direct3D 11.x när den används med funktionsnivåer 9_1, 9_2, 9_3, 10_0, 10_1, 11_0 och 11_1.
Windows 10 Fall Creators Update (1709) innehåller en ny version av WARP som stöder Direct3D 12 funktionsnivåer 12_0 och 12_1.
De minsta datorkraven för WARP är desamma som för Windows Vista, särskilt:
- Minst 800 MHz CPU
- MMX, SSE eller SSE2 krävs inte
- Minst 512 MB RAM-minne
Använda WARP
För Direct3D 12 måste du först identifiera WARP-adaptern för att skapa en WARP-enhet. För att underlätta detta tillhandahåller DXGI 1.4 metoden IDXGIFactory4::EnumWarpAdapter. WARP-adaptern kan sedan tillhandahållas till D3D12CreateDevice för att skapa en WARP-enhet.
Direct3D 10-, 10.1- och 11-komponenter kan använda ytterligare en drivrutinstyp som du kan ange när du skapar enheten (till exempel när du anropar funktionen D3D11CreateDevice). Drivrutinstypen är D3D10_DRIVER_TYPE_WARP eller D3D_DRIVER_TYPE_WARP. När du anger den drivrutinstypen skapar körningen en WARP-enhet och initierar inte en maskinvaruenhet.
Eftersom WARP använder samma programvarugränssnitt till Direct3D som referens rastrering gör, kan alla Direct3D-program som kan stödja körning med referens rastrering testas med hjälp av WARP. Om du vill använda WARP byter du namn på D3d10warp.dll till D3d10ref.dll och placerar den i samma mapp som exemplet eller programmet. När du sedan växlar till referens visas WARP-återgivning.
Om du byter namn på WARP till D3d10ref.dll och placerar den i C:\Program Files (x86)\Microsoft DirectX SDK (juni 2010)\Samples\C++\Direct3D\Bin\x86, kan du köra alla DirectX-exempel mot WARP, antingen genom att klicka på knappen Växla referens i exemplet eller genom att köra exemplet med /ref angivet på kommandoraden.
Rekommenderade programtyper för WARP
Alla program som kan använda Direct3D kan använda WARP. Detta omfattar följande typer av program:
Casual Spel
Spel har vanligtvis enkla renderingskrav. Men de kräver också användning av imponerande visuella effekter som kan behöva maskinvaruacceleration. Majoriteten av de mest sålda speltitlarna för Windows är antingen simuleringar eller casual-spel, som inte kräver grafik med höga prestanda. Båda spelstilarna drar dock stor nytta av modern skuggningsbaserad grafik och möjligheten att skala på maskinvara.
Befintliga program som inte är spelbaserade
En stor mängd grafiska program kräver ett minimalt antal kodsökvägar i återgivningsskiktet. WARP gör det möjligt för dessa program att implementera en enda Direct3D-kodsökväg som kan rikta ett stort antal datorkonfigurationer.
Avancerade renderingsspel
Spelutvecklare kanske vill isolera grafikkorts- eller drivrutinsspecifika återgivningsfel. Därför kan alla spel, även extremt grafiskt krävande spel, dra nytta av att kunna återge sitt innehåll med hjälp av WARP. Du kan använda WARP för att kontrollera om några visuella artefakter som du hittar återger fel eller problem med maskinvara eller drivrutiner.
Andra program
Målprogrammen för WARP innehåller även de som för närvarande kanske inte använder Direct3D 10 eller Direct3D 10.1. Dessa målprogram omfattar program som alltid måste fungera på alla datorer, bildbearbetningsprogram som inte skriver CPU- och GPU-versioner av bildbearbetningsalgoritmer, bildbearbetningsalgoritmer där hastigheten eller användningen av GPU:n inte är kritisk, till exempel utskrifter och emulatorer och virtuella miljöer som visar avancerad 3D-grafik.
WARP-arkitektur och prestanda
WARP baseras på referens rasterizer-kodbasen. Därför använder WARP samma programvarugränssnitt till både Direct3D 10 och senare och DXGI. WARP ingår i Windows 7 i D3d10warp.dll, som finns i Windows-systemmappar. Två versioner av WARP installeras på 64-bitarsdatorer, en x86- och x64-version. X64-versionen kan köras snabbare under vissa omständigheter eftersom kodgeneratorn i WARP kan dra nytta av de ytterligare register som är tillgängliga när användare kör 64-bitarsprogram.
WARP innehåller följande två snabba kompilatorer i realtid:
- Kompilatorn för mellanliggande språk på hög nivå som konverterar HLSL-bytekod och det aktuella återgivningstillståndet till en optimerad ström av vektorkommandon för GS(Geometry Shader), hörnskuggning (VS) och PS-faser (pixel shader) i pipelinen.
- Den högpresterande just-in-time-kodgeneratorn som kan ta dessa kommandon och generera optimerad SSE2-, SSE4.1-, x86-, x64-, arm- och arm64-sammansättningskod.
WARP använder trådpoolen och komplex aktivitetshantering och beroendespårning som introducerades i Windows Vista för att tillåta att alla delar av renderingspipelinen distribueras effektivt över tillgängliga CPU-kärnor.
WARP använder uppskjuten återgivning. DET VILL: WARP kan batchåtergivningskommandon så att rastrering endast sker när tillräckligt med data är tillgängliga för att använda alla CPU-resurser effektivt. Arbetet med huvudprogramtråden minimeras så att programmet kan skicka kommandon så snabbt som möjligt. Om ett program också är flertrådat och använder trådpoolen fördelas arbetet jämnt mellan WARP och programmet.
WARP-kodgeneratorn har finjusterats för att använda den moderna CPU-arkitekturen på bästa sätt. WARP körs på alla datorer som kan köra Windows Vista och senare operativsystem, även om datorn inte stöder SSE. WARP har dock optimerats för datorer som stöder SSE2. Den innehåller också optimeringar för specifika arkitekturer för AMD- och Intel-processorer samt stöd för SSE 4.1-tilläggen.
WARP kräver inte grafikmaskinvara för att köras. Den kan köras även i situationer där maskinvara inte är tillgänglig eller inte kan initieras.
Program och exempel som har utformats och skapats för att köras på Direct3D 10 och senare maskinvara utan någon kunskap om WARP kommer sannolikt att fungera bra med hjälp av WARP. Vi rekommenderar dock att du sänker kvalitetsinställningarna och upplösningen så mycket som möjligt för att uppnå användbara bildfrekvenser. Du kan använda WARP för att utveckla och finjustera program som körs bra på både maskinvara och programvara.
Eftersom WARP använder flera CPU-kärnor för parallell körning presterar den bäst på moderna processorer med flera kärnor. WARP körs också betydligt snabbare på datorer med SSE4.1-tillägg installerade. Microsoft utförde betydande testning och prestandajustering på datorer med åtta eller fler kärnor och SSE4.1 eftersom dessa avancerade datorer kommer att bli vanligare under windows 7 och senare operativsystem.
När WARP körs på processorn är det begränsat jämfört med ett grafikkort på flera olika sätt. Den främre busshastigheten för en PROCESSOR är vanligtvis runt eller under 10 GB/s. Däremot har ett grafikkort ofta dedikerat minne som använder 20 till 100 GB/s eller mer grafikbandbredd. Grafikmaskinvara har också enheter med fasta funktioner som kan utföra komplexa och dyra uppgifter, till exempel texturfiltrering, formatdekomprimering eller konverteringar, asynkront med lite omkostnader eller energikostnader. Att utföra dessa åtgärder på en typisk CPU är dyrt både när det gäller strömförbrukning och prestandacykler.
De typiska prestandanumren för en Intel Penryn-baserad 3,0GHz Quad Core-dator visar att WARP i vissa fall kan överträffa lågslutsintegrerade Direct3D 10 och senare grafik-GPU:er på ett antal benchmarks. Diskret grafikmaskinvara med låg slutnivå är vanligtvis 4 till 5 gånger snabbare än WARP vid körning av dessa riktmärken. Dessa lågslutna integrerade eller diskreta GPU:er har minimal användning av CPU-resurser. Mellanklass- eller avancerade grafikkort är betydligt snabbare än WARP för många program, särskilt när ett program kan dra nytta av den parallellitet och minnesbandbredd som dessa grafikkort tillhandahåller.
WARP är inte en ersättning för grafikmaskinvara, särskilt som rimligt presterande low-end Direct3D 10 och senare diskret maskinvara är nu billig. Målet med WARP är att tillåta program att rikta in sig på Direct3D-kompatibel maskinvara utan att ha avsevärt olika kodsökvägar eller testkrav oavsett om de körs på maskinvara eller i programvara.
Följande två tabeller visar WARP-exempeldata med olika processorer och grafikkort.
Den första tabellen visar WARP-exempeldata med Direct3D 10 Crysis som körs på 800x600 med alla kvalitetsinställningar på de lägsta nivåerna:
PROCESSOR | Tid | Ave FPS | Minsta FPS | Min ram | Maximalt antal FPS | Maximal ram |
---|---|---|---|---|---|---|
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,1 GHz | 908.87 | 2.20 | 0.64 | 1965 | 3.72 | 986 |
Xeon 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 |
Den andra tabellen visar exempeldata som kör samma test på en mängd olika grafikkort:
Grafikkort | Tid | Ave FPS | Minsta FPS | Min ram | Maximalt antal FPS | Maximal ram |
---|---|---|---|---|---|---|
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 Integrerat | 386.94 | 5.17 | 1.74 | 1974 | 16.22 | 995 |
WARP-överensstämmelse
WARP klarar alla standardprov för överensstämmelse med Windows Hardware Quality Labs (WHQL) för validering av Direct3D-maskinvaruenheter.
WARP har testats mot en uppsättning Direct3D 10- och Direct3D 10.1-program och benchmarks samt mot SDK-exempel från DirectX, NVIDIA och AMD.
WARP använde PIX- felsöknings- och analysverktyget för Windows i testningen. Microsoft har ett stort bibliotek med enstaka bildruta av program som används för att jämföra mellan maskinvara och WARP. Majoriteten av bilderna verkar nästan identiska mellan maskinvara och WARP. där små skillnader ibland uppstår, visar det sig att de ligger inom de toleranser som definieras av Direct3D 10-specifikationen.