Guida di Windows Advanced Rasterization Platform (WARP)

Questo articolo descrive Windows Advanced Rasterization Platform (WARP) e gli aspetti seguenti di WARP.

Che cos'è WARP?

WARP è un rasterizzatore software ad alta velocità e completamente conforme. È un componente della tecnologia grafica DirectX introdotta dal runtime Direct3D 11. Il runtime Direct3D 11 viene installato in Windows 7, Windows Server 2008 R2 e Windows Vista con l'aggiornamento [KB971644]. Windows 8, Windows 10, Windows Server 2012 e versioni successive e Windows RT includono il runtime Direct3D 11.1, che ha una versione aggiornata di WARP. Windows 10 Fall Creators Update (1709) include una versione di WARP che supporta runtime Direct3D 11 e Direct3D 12.

Vantaggi WARP

WARP offre i vantaggi seguenti:

Rimozione della necessità di rasterizzatori software personalizzati

WARP semplifica lo sviluppo rimuovendo la necessità di creare un rasterizzatore software personalizzato e ottimizzare l'applicazione invece di ottimizzare l'applicazione per l'hardware. Fornendo un singolo rasterizzatore software per utilizzo generico, non è più necessario scrivere algoritmi di rendering delle immagini in più modi per l'esecuzione su hardware o software con funzionalità e funzionalità diverse. È comunque possibile implementare algoritmi in diversi modi per ottenere prestazioni o scalabilità migliori; Non è tuttavia necessario modificare l'API o l'architettura di rendering usata per implementare tali algoritmi. È invece possibile concentrarsi sulla creazione di un'applicazione Direct3D 10 o successiva che avrà lo stesso aspetto e prestazioni sull'hardware o sul software.

Abilitazione delle prestazioni massime dall'hardware grafico

Quando un'applicazione viene ottimizzata per l'esecuzione efficiente sull'hardware, verrà eseguita in modo efficiente anche in WARP. Il contrario è anche vero; qualsiasi applicazione ottimizzata per l'esecuzione ottimale su WARP avrà prestazioni buone sull'hardware. Le applicazioni che usano Direct3D 10 e versioni successive potrebbero non essere scalabili in modo efficiente su hardware diverso. WARP ha profili di prestazioni simili all'hardware, quindi l'ottimizzazione di un'applicazione per batch di grandi dimensioni, la riduzione al minimo delle modifiche dello stato, la rimozione dei punti o dei blocchi di sincronizzazione trarrà vantaggio sia dall'hardware che dal WARP.

Abilitazione del rendering quando l'hardware Direct3D non è disponibile

WARP consente il rendering rapido in diverse situazioni in cui le implementazioni hardware sono indesiderate o non disponibili, tra cui:

  • Quando l'utente non dispone di hardware compatibile con Direct3D
  • Quando un'applicazione viene eseguita come servizio o in un ambiente server
  • Quando un'applicazione vuole riservare le risorse hardware Direct3D per altri usi
  • Quando non è installata una scheda video
  • Quando un driver video non è disponibile o non funziona correttamente
  • Quando una scheda video non è disponibile, si blocca o richiede un numero eccessivo di risorse di sistema per inizializzare

Uso delle risorse esistenti per il rendering software

C'è una grande community, molti libri, siti Web, SDK, esempi, white paper, liste di distribuzione e altre risorse che consentono di sfruttare i vantaggi del rendering delle immagini basate su Direct3D 10 e versioni successive. Con WARP come fallback software, è possibile usare le conoscenze esistenti sull'hardware per migliorare le prestazioni dell'applicazione quando viene eseguito con hardware o software. Inoltre, molti strumenti eccellenti dei fornitori di schede grafiche e in DirectX SDK possono aiutare a progettare, sviluppare, sviluppare, eseguire il debug e analizzare i problemi di prestazioni delle applicazioni grafiche. Questi strumenti e conoscenze possono ora trarre vantaggio allo sviluppo di applicazioni destinato sia all'hardware che al software quando si usa WARP.

Abilitazione di scenari che non richiedono hardware grafico

Diversi algoritmi e applicazioni (algoritmi di elaborazione delle immagini, stampa, comunicazione remota, PC virtuali e altri emulatori, rendering di tipi di carattere di alta qualità, grafici e così via) sono in genere stati ottimizzati per la CPU perché non dipendono dall'hardware. Con WARP è possibile usare una singola architettura che esegue questi algoritmi e applicazioni e che può essere eseguita completamente nel software; tuttavia, se l'accelerazione hardware è disponibile, è possibile sfruttarla.

Completamento della piattaforma grafica DirectX

WARP consente di accedere a tutte le funzionalità grafiche Direct3D 10 e successive anche nei computer senza Direct3D 10 e versioni successive hardware grafico. Bit di funzionalità rimossi da Direct3D 10 (maiuscole); ovvero, non è più necessario verificare se le funzionalità grafiche sono disponibili dall'hardware grafico perché Direct3D 10 e versioni successive garantiscono questa disponibilità. È ora possibile usare tutte le funzionalità di un'ampia gamma di schede video sapendo che l'applicazione si comporterà e avrà lo stesso aspetto ovunque. È possibile ridimensionare le prestazioni di queste applicazioni disabilitando semplicemente funzionalità grafiche costose su schede video di fascia bassa o il rendering su destinazioni più piccole.

Funzionalità e requisiti WARP

WARP supporta completamente tutte le funzionalità di Direct3D 10 e 10.1. Ad esempio, WARP supporta le funzionalità più importanti seguenti:

  • Tutti i requisiti di precisione della specifica Direct3D 10 e 10.1
  • Direct3D 11 se usato con i livelli di funzionalità 9_1, 9_2, 9_3, 10_0 e 10_1 (per altre informazioni sui livelli di funzionalità, vedere D3D_FEATURE_LEVEL)
  • Tutti i formati di trama facoltativi, ad esempio le destinazioni di rendering multisample e il campionamento da superfici float
  • Antialiased, rendering di alta qualità fino a 8x multisample antialiasing (MSAA)
  • Filtro anisotropico
  • Applicazioni a 32 bit e a 64 bit e applicazioni con riconoscimento degli indirizzi di grandi dimensioni a 32 bit

Quando si installa l'aggiornamento della piattaforma per Windows 7 in Windows 7 SP1 o Windows Server 2008 R2 SP1, tale sistema operativo include quindi il runtime Direct3D 11.1 e una versione di WARP che supporta Direct3D 11.x se usata con i livelli di funzionalità 9_1, 9_2, 9_3, 10_0, 10_1 e 11_0.

Windows 8, Windows 10, Windows Server 2012 e versioni successive e Windows RT includono il runtime Direct3D 11.1 e una nuova versione di WARP. Questa versione supporta Direct3D 11.x quando viene usata con i livelli di funzionalità 9_1, 9_2, 9_3, 10_0, 10_1, 11_0 e 11_1.

Windows 10 Fall Creators Update (1709) include una nuova versione di WARP che supporta i livelli di funzionalità Direct3D 12 12_0 e 12_1.

I requisiti minimi dei computer per WARP sono gli stessi di Windows Vista, in particolare:

  • CPU minima 800 MHz
  • MMX, S edizione Standard o S edizione Standard 2 non è obbligatorio
  • Minimo 512 MB di RAM

Come usare WARP

Per Direct3D 12, la creazione di un dispositivo WARP richiede prima di tutto l'identificazione dell'adattatore WARP. Per facilitare questo problema, DXGI 1.4 fornisce il metodo IDXGIFactory4::EnumWarpAdapter. L'adattatore WARP può quindi essere fornito a D3D12CreateDevice per creare un dispositivo WARP.

I componenti Direct3D 10, 10.1 e 11 possono usare un tipo di driver aggiuntivo che è possibile specificare quando si crea il dispositivo , ad esempio quando si chiama la funzione D3D11CreateDevice. Tale tipo di driver è D3D10_DRIVER_TYPE_WARP o D3D_DRIVER_TYPE_WARP. Quando si specifica tale tipo di driver, il runtime crea un dispositivo WARP e non inizializza un dispositivo hardware.

Poiché WARP usa la stessa interfaccia software per Direct3D come il rasterizzatore di riferimento, qualsiasi applicazione Direct3D in grado di supportare l'esecuzione con il rasterizzatore di riferimento può essere testata tramite WARP. Per usare WARP, rinominare D3d10warp.dll in D3d10ref.dll e inserirlo nella stessa cartella dell'esempio o dell'applicazione. Successivamente, quando si passa a ref, verrà visualizzato il rendering WARP.

Se si rinomina WARP in D3d10ref.dll e lo si inserisce in C:\Programmi (x86)\Microsoft DirectX SDK (giugno 2010)\Samples\C++\Direct3D\Bin\x86, è possibile eseguire tutti gli esempi DirectX su WARP, facendo clic sul pulsante "Toggle Ref" nell'esempio oppure eseguendo l'esempio con /ref specificato nella riga di comando.

Tutte le applicazioni che possono usare Direct3D possono usare WARP. Sono inclusi i tipi di applicazioni seguenti:

Giochi casuali

I giochi hanno in genere requisiti di rendering semplici. Tuttavia, richiedono anche l'uso di effetti visivi impressionanti che potrebbero richiedere l'accelerazione hardware. La maggior parte dei titoli di gioco più venduti per Windows sono simulazioni o giochi casuali, nessuno dei quali richiede grafica ad alte prestazioni. Tuttavia, entrambi gli stili di giochi traggono grande vantaggio dalla grafica moderna basata su shader e dalla possibilità di ridimensionare su hardware.

Applicazioni non di gioco esistenti

Una grande quantità di applicazioni grafiche richiede un numero minimo di percorsi di codice nel livello di rendering. WARP consente a queste applicazioni di implementare un singolo percorso di codice Direct3D che può avere come destinazione un numero elevato di configurazioni del computer.

Giochi di rendering avanzati

Gli sviluppatori di giochi potrebbero voler isolare gli errori di rendering specifici della scheda grafica o del driver. Pertanto, tutti i giochi, anche estremamente impegnativi graficamente, possono trarre vantaggio dalla possibilità di rendere il loro contenuto usando WARP. È possibile usare WARP per verificare se gli artefatti visivi rilevati sono errori di rendering o problemi con hardware o driver.

Altre applicazioni

Le applicazioni di destinazione per WARP includono anche quelle che potrebbero attualmente non usare Direct3D 10 o Direct3D 10.1. Queste applicazioni di destinazione includono applicazioni che devono sempre funzionare su tutti i computer, applicazioni di elaborazione immagini che non scrivono versioni CPU e GPU degli algoritmi di elaborazione delle immagini, algoritmi di elaborazione delle immagini in cui la velocità o l'uso della GPU non è fondamentale, ad esempio la stampa, e emulatori e ambienti virtuali che visualizzano grafica 3D avanzata.

Architettura e prestazioni WARP

WARP si basa sulla codebase del rasterizzatore di riferimento. Di conseguenza, WARP usa la stessa interfaccia software per Direct3D 10 e versioni successive e DXGI. WARP è incluso in Windows 7 in D3d10warp.dll, che si trova nelle cartelle dei sistemi Windows. Due versioni di WARP sono installate in computer a 64 bit, una versione x86 e x64. La versione x64 potrebbe essere eseguita più velocemente in determinate circostanze perché il generatore di codice contenuto in WARP può sfruttare i registri aggiuntivi disponibili quando gli utenti eseguono applicazioni a 64 bit.

WARP contiene i due compilatori ad alta velocità e in tempo reale seguenti:

  • Il compilatore di linguaggio intermedio di alto livello che converte il bytecode HLSL e lo stato di rendering corrente in un flusso ottimizzato di comandi vettoriali per lo shader geometry shader (GS), il vertex shader (VS) e le fasi del pixel shader (PS) della pipeline.
  • Generatore di codice JUST-In-Time ad alte prestazioni che può accettare questi comandi e generare codice assembly S edizione Standard 2, S edizione Standard 4.1, x86, x64, arm e arm64.

WARP usa il pool di thread e la gestione complessa delle attività e il rilevamento delle dipendenze introdotto in Windows Vista per consentire la distribuzione efficiente di tutte le parti della pipeline di rendering tra i core CPU disponibili.

WARP usa il rendering posticipato. Ovvero, WARP può eseguire il rendering in batch dei comandi in modo che la rasterizzazione si verifichi solo quando sono disponibili dati sufficienti per usare tutte le risorse della CPU in modo efficiente. Il lavoro sul thread dell'applicazione principale è ridotto a icona per consentire all'applicazione di inviare i comandi il più rapidamente possibile. Se un'applicazione è anche multithread e usa il pool di thread, il lavoro verrà distribuito uniformemente tra WARP e l'applicazione.

Il generatore di codice WARP è stato ottimizzato per sfruttare al meglio l'architettura moderna della CPU. WARP viene eseguito in tutti i computer che possono eseguire Windows Vista e sistemi operativi successivi, anche se il computer non supporta S edizione Standard. Tuttavia, WARP è stato ottimizzato per i computer che supportano S edizione Standard 2. Contiene anche ottimizzazioni per architetture specifiche dei processori AMD e Intel, nonché il supporto per le estensioni S edizione Standard 4.1.

WARP non richiede l'esecuzione dell'hardware grafico. Può essere eseguito anche in situazioni in cui l'hardware non è disponibile o non può essere inizializzato.

Le applicazioni e gli esempi progettati e compilati per l'esecuzione su Hardware Direct3D 10 e versioni successive senza alcuna conoscenza di WARP probabilmente funzionano correttamente usando WARP. Tuttavia, è consigliabile ridurre le impostazioni di qualità e la risoluzione il più possibile per ottenere frequenze di fotogrammi utilizzabili. È possibile usare WARP per sviluppare e ottimizzare le applicazioni che funzionano correttamente sia su hardware che su software.

Poiché WARP usa più core CPU per l'esecuzione parallela, offre prestazioni ottimali sulle CPU multi core moderne. WARP viene eseguito notevolmente più velocemente nei computer con estensioni S edizione Standard 4.1 installate. Microsoft ha eseguito test e ottimizzazione delle prestazioni significativi sui computer con otto o più core e S edizione Standard 4.1 perché questi computer di fascia alta diventeranno più comuni durante la durata di Windows 7 e sistemi operativi successivi.

Quando WARP è in esecuzione sulla CPU, è limitato rispetto a una scheda grafica in diversi modi. La velocità del bus anteriore di una CPU è in genere intorno o inferiore a 10 GB/s. Al contrario, una scheda grafica ha spesso memoria dedicata che usa da 20 a 100 GB/s o più di larghezza di banda grafica. L'hardware grafico include anche unità a funzione fissa che possono eseguire attività complesse e costose, ad esempio il filtro delle trame, la decompressione del formato o le conversioni, in modo asincrono con un sovraccarico o un costo di alimentazione ridotto. L'esecuzione di queste operazioni su una CPU tipica è costosa in termini di consumo di energia e cicli di prestazioni.

I numeri di prestazioni tipici per un computer Quad Core basato su Intel Penryn a 3,0 GHz mostrano che WARP può in alcuni casi superare le GPU grafiche Direct3D 10 integrate di fascia bassa e successive in un certo numero di benchmark. L'hardware grafico discreto di fascia bassa è in genere da 4 a 5 volte più veloce rispetto a WARP durante l'esecuzione di questi benchmark. Queste GPU integrate o discrete di fascia bassa hanno un uso minimo delle risorse della CPU. Le schede grafiche di fascia media o high-end sono notevolmente più veloci rispetto a WARP per molte applicazioni, in particolare quando un'applicazione può sfruttare il parallelismo e la larghezza di banda di memoria offerta da queste schede grafiche.

WARP non è una sostituzione per l'hardware grafico, in particolare per quanto ragionevolmente prestazioni Direct3D 10 e versioni successive hardware discreto è ora economico. L'obiettivo di WARP è consentire alle applicazioni di usare hardware a livello compatibile con Direct3D senza avere percorsi di codice o requisiti di test molto diversi se vengono eseguiti su hardware o software.

Le due tabelle seguenti mostrano i dati di esempio WARP con varie CPU e schede grafiche.

La prima tabella mostra i dati di esempio WARP con Direct3D 10 Crysis in esecuzione a 800x600 con tutte le impostazioni di qualità sui livelli più bassi:

CPU Ora Ave FPS Min FPS Min Frame Max FPS Max Frame
Core i7 8 Core a 3,0 GHz 271.57 7,36 3,46 1966 15.01 995
Penryn 4 Core a 3,0 GHz 351.35 5,69 2.49 1967 10.95 980
Penryn 2 Core a 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 a 2,0 GHz 424.04 4.72 1.84 1967 9,56 988
AMD FX74 4 Core a 3,0 GHz 583.12 3.43 1,41 1967 5.78 986
Phenom 9550 4 Core @ 2,2 GHz 664.69 3.01 0.53 1959 5.46 987

La seconda tabella mostra i dati di esempio che eseguono lo stesso test in un'ampia gamma di schede grafiche:

Scheda grafica Ora 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 Integrated 386.94 5.17 1,74 1974 16.22 995

Conformità WARP

WARP supera tutti i test di conformità standard di Windows Hardware Quality Labs (WHQL) per convalidare i dispositivi hardware Direct3D.

WARP è stato testato su una suite di applicazioni e benchmark Direct3D 10 e Direct3D 10.1 e su esempi SDK di DirectX, NVIDIA e AMD.

WARP ha usato lo strumento di debug e analisi PIX per Windows nei suoi test; Microsoft dispone di una vasta libreria di acquisizioni a fotogrammi singoli di applicazioni usate per confrontare tra hardware e WARP. La maggior parte delle immagini appare quasi identica tra hardware e WARP; dove talvolta si verificano piccole differenze, si trovano all'interno delle tolleranze definite dalla specifica Direct3D 10.