Pipeline per Direct3D versione 11
Questa sezione si applica solo a Windows 7 e versioni successive e Windows Server 2008 R2 e versioni successive del sistema operativo Windows.
La pipeline di rendering della grafica per Direct3D versione 11 viene espansa dalla pipeline di rendering della grafica per Direct3D versione 10. Oltre ai core dello shader programmabile condiviso supportati da Direct3D versione 10, Direct3D versione 11 supporta anche core di hull, dominio e compute shader.
Direct3D versione 11 supporta in realtà due pipeline separate: la pipeline di disegno (pipeline di rendering grafico) e la pipeline di invio (pipeline dello shader di calcolo). Le pipeline di disegno e di invio sono tecnicamente connesse in modo generico nel senso che non è possibile avere la stessa sottoresource associata per la scrittura in entrambe le pipeline simultaneamente o associate per la scrittura in una pipeline e per la lettura nell'altra pipeline.
La figura seguente mostra i blocchi funzionali della pipeline di disegno per Direct3D versione 11.
Nella figura seguente vengono illustrati i blocchi funzionali della pipeline di invio per Direct3D versione 11.
Le sezioni seguenti descrivono i blocchi new-for-Direct3D 11 visualizzati nelle figure precedenti.
Hull shader
Lo shader dello scafo funziona una volta per patch. È possibile usare lo shader dello scafo con patch dall'assembler di input. Lo shader dello scafo può trasformare i punti di controllo di input che costituiscono una patch in punti di controllo di output. Lo shader dello scafo può eseguire altre configurazioni per la fase del tessellatore a funzione fissa. Ad esempio, lo shader dello scafo può restituire fattori tess, che sono numeri che indicano la quantità di tessellate.
Il runtime Direct3D chiama le funzioni driver seguenti per creare, configurare e distruggere lo shader dello scafo:
- CalcPrivateShaderSize
- CalcPrivateTessellationShaderSize
- CreateHullShader
- DistruttoShader
- HsSetShaderResources
- HsSetShader
- HsSetSamplers
- HsSetConstantBuffers
- HsSetShaderWithIfaces
Tessellatore
Il tessellatore è un'unità a funzione fissa il cui funzionamento è definito dalle dichiarazioni nello shader dello scafo. Il tessellatore opera una volta per patch che viene restituito dallo shader dello scafo. Lo shader dello scafo genera fattori tess, che sono numeri che notificano al tessellatore la quantità di tessellatore (generare geometria e connettività) sul dominio della patch.
Il runtime Direct3D chiama la funzione CalcPrivateTessellationShaderSize del driver per calcolare le dimensioni dell'area di memoria per uno scafo o uno shader di dominio.
Domain shader
Il domain shader viene richiamato una volta per vertice, generato dal tessellatore. Ogni chiamata viene identificata dalla coordinata in un dominio generico. Il ruolo del domain shader consiste nel trasformare tale coordinata in qualcosa di tangibile (ad esempio, un punto nello spazio 3D) per l'uso del flusso giù dello shader di dominio. Ogni chiamata dello shader di dominio per una patch accede anche all'input condiviso di tutti gli output dello shader dello scafo,ad esempio, i punti di controllo di output.
Il runtime Direct3D chiama le funzioni driver seguenti per creare, configurare ed eliminare lo shader di dominio:
- CalcPrivateTessellationShaderSize
- CreateDomainShader
- DistruttoShader
- DsSetShaderResources
- DsSetShader
- DsSetSamplers
- DsSetConstantBuffers
- DsSetShaderWithIfaces
Compute Shader
L'shader di calcolo consente alla GPU di essere vista come una griglia generica di processori paralleli di dati, senza alcun impedimento grafico dalla pipeline di disegno. Il compute shader ha accesso esplicito alla memoria condivisa veloce per facilitare la comunicazione tra gruppi di chiamate shader. Il compute shader ha anche la possibilità di eseguire letture e scritture sparse in memoria. La disponibilità delle operazioni atomiche consente l'accesso univoco agli indirizzi di memoria condivisa. Lo shader di calcolo non fa parte della pipeline di disegno. Lo shader di calcolo esiste autonomamente. Tuttavia, lo shader di calcolo esiste nello stesso dispositivo di tutte le altre fasi dello shader. Il runtime Direct3D chiama le funzioni DispatchXxx del driver anziché le funzioni DrawXxx del driver per richiamare lo shader di calcolo.
Il runtime Direct3D chiama le funzioni driver seguenti per creare, configurare ed eliminare lo shader di calcolo:
- CreateComputeShader
- DistruttoShader
- CsSetShaderResources
- CsSetShader
- CsSetSamplers
- CsSetConstantBuffers
- CsSetShaderWithIfaces
- CsSetUnorderedAccessViews
- Dispatch
- DispatchIndirect
Viste delle risorse di accesso non ordinate
Le viste delle risorse di accesso non ordinate sono risorse di lettura/scrittura che è possibile associare allo shader o al pixel shader di calcolo. L'associazione di viste delle risorse di accesso non ordinate è simile a quella di come è possibile associare le viste delle risorse shader, che sono risorse di sola lettura, a qualsiasi fase shader.
Il runtime Direct3D chiama le funzioni driver seguenti per creare, configurare ed eliminare le viste delle risorse di accesso non ordinate: