Migrazione a Direct3D 11

Questa sezione fornisce informazioni per la migrazione a Direct3D 11 da una versione precedente di Direct3D.

Da Direct3D 9 a Direct3D 11

L'API Direct3D 11 si basa sui miglioramenti infrastrutturali apportati in Direct3D 10 e 10.1. La conversione da Direct3D 9 a Direct3D 11 è simile al passaggio da Direct3D 9 a Direct3D 10. Di seguito sono riportate le sfide principali in questo sforzo.

  • Rimozione di tutti gli utilizzi fissi della pipeline di funzioni a favore degli shader programmabili creati esclusivamente in HLSL (compilati tramite D3DCompiler anziché D3DX9).
  • Gestione dello stato in base a oggetti non modificabili anziché a singoli interruttori di stato.
  • Aggiornamento per garantire la conformità ai rigidi requisiti di collegamento dei layout di input del buffer dei vertici e delle firme shader.
  • Associazione delle visualizzazioni delle risorse dello shader a tutte le risorse della trama.
  • Mapping di tutto il contenuto dell'immagine a un DXGI_FORMAT, inclusa la rimozione di tutti i formati di colore a 24 bit (8/8/8) e l'ordinamento rigoroso dei colori RGB per la maggior parte degli scenari.
  • Suddividendo l'utilizzo dello stato costante globale in diversi buffer costanti più piccoli ed efficienti aggiornati.

Per altre informazioni sul passaggio da Direct3D 9 a Direct3D 10, vedi Considerazioni su Direct3D 9 e Direct3D 10.

Da Direct3D 10 a Direct3D 11

La conversione di programmi scritti per l'uso dell'API Direct3D 10 o 10.1 è un processo semplice perché Direct3D 11 è un'estensione dell'API esistente. Con una sola eccezione secondaria (come indicato di seguito - filtro di testo monocromatico), tutti i metodi e le funzionalità in Direct3D 10/10.1 sono disponibili in Direct3D 11. La struttura seguente descrive le differenze tra le due API per facilitare l'aggiornamento del codice esistente. Le differenze principali includono:

  • Le operazioni di rendering (Disegno, stato e così via) non fanno più parte dell'interfaccia Device, ma fanno parte della nuova interfaccia DeviceContext insieme ai metodi di query per le risorse Map/Unmap e dispositivo.
  • Direct3D 11 include tutti i miglioramenti e le modifiche apportate tra Direct3D 10.0 e 10.1

Enumerazioni e definizioni

Direct3D 10 Direct3D 11
DXGI_FORMAT DXGI_FORMAT sono stati definiti diversi nuovi formati DXGI.
D3D10_CREATE_DEVICE_SWITCH_TO_REF D3D11_CREATE_DEVICE_SWITCH_TO_REF La funzionalità switch-to-ref non è supportata da Direct3D 11.
D3D10_DRIVER_TYPE D3D_DRIVER_TYPE Si noti che gli identificatori di enumerazione in D3D_DRIVER_TYPE sono stati ridefinti dagli identificatori in D3D10_DRIVER_TYPE. Pertanto, è necessario assicurarsi di usare gli identificatori di enumerazione anziché i numeri letterali.
D3D_DRIVER_TYPE è definito in D3Dcommon.h.
D3D10_RESOURCE_MISC_FLAG D3D11_RESOURCE_MISC_FLAG Si noti che molti di questi flag sono stati ridefinti, quindi assicurarsi di usare identificatori di enumerazione anziché numeri letterali.
D3D10_FILTER D3D11_FILTER Si noti che il filtro del testo D3D10_FILTER_TEXT_1BIT è stato rimosso da Direct3D 11. Vedere DirectWrite.
D3D10_COUNTER D3D11_COUNTER Si noti che i contatori indipendenti dal fornitore sono stati rimossi per Direct3D 11 perché sono stati raramente supportati.
D3D10_x D3D11_x Molte enumerazioni e definizioni sono uguali, hanno limiti maggiori o hanno valori aggiuntivi.

Strutture

Direct3D 10 Direct3D 11
D3D10_SO_DECLARATION_ENTRY D3D11_SO_DECLARATION_ENTRY Aggiunge flusso.
D3D10_BLEND_DESC D3D11_BLEND_DESC Si noti che questa struttura è cambiata significativamente da 10 a 10.1 per fornire lo stato di fusione della destinazione di rendering
D3D10_BUFFER_DESC D3D11_BUFFER_DESC Aggiunge una strutturaByteStride da usare con le risorse compute shader
D3D10_SHADER_RESOURCE_VIEW_DESC D3D11_SHADER_RESOURCE_VIEW_DESC Si noti che questa struttura ha aggiunto ulteriori membri dell'unione per la versione 10.1
D3D10_DEPTH_STENCIL_VIEW_DESC D3D11_DEPTH_STENCIL_VIEW_DESC Dispone di un nuovo membro Flags.
D3D10_QUERY_DATA_PIPELINE_STATISTICS D3D11_QUERY_DATA_PIPELINE_STATISTICS Aggiunge diversi nuovi contatori delle fasi shader.
D3D10_x D3D11_x Molte strutture sono identiche tra le due API.

Interfacce

Direct3D 10 Direct3D 11
ID3D10Device ID3D11Device e ID3D11DeviceContext
L'interfaccia del dispositivo è stata suddivisa in queste due parti. Per la conversione rapida è possibile usare ID3D11Device::GetImmediateContext.
I metodi "ID3D10Device::GetTextFilterSize" e "SetTextFilerSize" non esistono più. Vedere DirectWrite.
Create*Shader accetta un parametro facoltativo aggiuntivo per ID3D11ClassLinkage.
*SetShader e *GetShader accettano parametri facoltativi aggiuntivi per ID3D11ClassInstance.*SetShader and *GetShader take additional optional parameters for ID3D11ClassInstance(s).
CreateGeometryShaderWithStreamOutput accetta una matrice e il conteggio per più passi del flusso di output.
Il limite per il parametro NumEntries di CreateGeometryShaderWithStreamOutput è aumentato a D3D11_SO_STREAM_COUNT * D3D11_SO_OUTPUT_COMPONENT_COUNT in Direct3D 11.
ID3D10Buffer ID3D11Buffer
ID3D10SwitchToRef La funzionalità switch-to-ref id3D11SwitchToRefnon è supportata in Direct3D 11.
ID3D10Texture1D ID3D11Texture1D
ID3D10Texture2D ID3D11Texture2D
ID3D10Texture3D ID3D11Texture3DI metodi Map e Unmap sono stati spostati in ID3D11DeviceContext e tutti i metodi Map usano D3D11_MAPPED_SUBRESOURCE anziché un void**.
ID3D10Asynchronous ID3D11Asynchronous Begin, End e GetData sono stati spostati in ID3D11DeviceContext.
ID3D10x ID3D11x Molte interfacce sono identiche tra le due API.
Soluzione 10/10.1 11 Soluzione
Conforme a HLSL (D3D10Compile*, D3DX10Compile*) e api di reflection shader D3DCompiler (vedi D3DCompiler.h) Nota: per le app di Windows Store, le API D3DCompiler sono supportate solo per lo sviluppo, non per la distribuzione.
Effetti 10 Effects 11 è disponibile come origine condivisa online. Nota: questa soluzione non è adatta alle app di Windows Store perché richiede le API D3DCompiler in fase di esecuzione (distribuzione).
D3DX9/D3DX10 Math DirectXMath
D3DX10 D3DX11 nella versione legacy di DirectX SDK DirectXTex, DirectXTK e DirectXMesh offrono alternative a molte tecnologie nelle librerie D3DX10 e D3DX11 legacy.
Direct2D e DirectWrite offrono un supporto di alta qualità per il rendering di linee e tipi di carattere con stile.

Per informazioni sull'SDK DirectX legacy, vedere Dove si trova DirectX SDK?.

Da Direct3D 10.1 a Direct3D 11

Direct3D 10.1 è un'estensione dell'interfaccia Direct3D 10 e tutte le funzionalità di Direct3D 10.1 sono disponibili in Direct3D 11. La maggior parte della conversione da 10,1 a 11 è già stata risolta in precedenza passando da 10 a 11.

Enumerazioni e definizioni

Direct3D 10.1 Direct3D 11
D3D10_FEATURE_LEVEL1 D3D_FEATURE_LEVEL Identico ma definito in D3DCommon.h più l'aggiunta di D3D_FEATURE_LEVEL_11_0 per hardware di classe 11 insieme a D3D_FEATURE_LEVEL_9_1, D3D_FEATURE_LEVEL_9_2 e D3D_FEATURE_LEVEL_9_3 per 10level9
(D3D10_FEATURE_LEVEL_9_1, D3D10_FEATURE_LEVEL_9_2 e D3D10_FEATURE_LEVEL_9_3 sono stati aggiunti anche per 10.1 a d3d10_1.h)

Strutture

Direct3D 10.1 Direct3D 11
D3D10_BLEND_DESC1 D3D11_BLEND_DESC La versione 11 è identica alla 10.1.
D3D10_SHADER_RESOURCE_VIEW_DESC1 D3D11_SHADER_RESOURCE_VIEW_DESC La versione 11 è identica alla 10.1.

Interfacce

Direct3D 10.1 Direct3D 11
ID3D10Device1 ID3D11Device e ID3D11DeviceContext
L'interfaccia del dispositivo è stata suddivisa in queste due parti. Per la conversione rapida è possibile usare ID3D11Device::GetImmediateContext.
I metodi " ID3D10Device::GetTextFilterSize" e "SetTextFilerSize" non esistono più. Vedere DirectWrite.
Create*Shader accetta un parametro facoltativo aggiuntivo per ID3D11ClassLinkage.
*SetShader e *GetShader accettano parametri facoltativi aggiuntivi per ID3D11ClassInstance.*SetShader and *GetShader take additional optional parameters for ID3D11ClassInstance(s).
CreateGeometryShaderWithStreamOutput accetta una matrice e il conteggio per più passi del flusso di output.
Il limite per il parametro NumEntries di CreateGeometryShaderWithStreamOutput è aumentato a D3D11_SO_STREAM_COUNT * D3D11_SO_OUTPUT_COMPONENT_COUNT in Direct3D 11.
ID3D10BlendState1 ID3D11BlendState
ID3D10ShaderResourceView1 ID3D11ShaderResourceView

Nuove funzionalità per Direct3D 11

Dopo aver aggiornato il codice per usare l'API Direct3D 11, sono disponibili numerose nuove funzionalità da considerare.

  • Rendering multithreading tramite elenchi di comandi e più contesti
  • Implementazione di algoritmi avanzati con compute shader (con profili shader 4.0, 4.1 o 5.0)
  • Nuove funzionalità hardware di classe 11:
    • Modello shader HLSL 5.0
    • Collegamento dello shader dinamico
    • Tassellatura tramite hull shader e domain shader
    • Nuovi formati di compressione a blocchi: BC6H per immagini HDR, BC7 per immagini standard con fedeltà superiore
  • Utilizzo della tecnologia 10level9 per il rendering su molti dispositivi Modello 2.0 e Shader Model 3.0 tramite l'API DIrect3D 11 per il supporto hardware video di fascia inferiore in Windows Vista e Windows 7.
  • Uso del dispositivo di rendering software WARP.

Nuove funzionalità per DirectX 11.1

Windows 8 include ulteriori miglioramenti alla grafica DirectX da considerare quando si implementa il codice grafico DirectX, che includono hardware Direct3D 11.1, DXGI 1.2, Windows Display Driver Model (WDDM) 1.2, hardware di livello di funzionalità 11.1, contesti di dispositivo Direct2D e altri miglioramenti.

Il supporto parziale per Direct3D 11.1 è disponibile anche in Windows 7 tramite l'aggiornamento della piattaforma per Windows 7, disponibile tramite l'aggiornamento della piattaforma per Windows 7.

Nuove funzionalità per DirectX 11.2

Windows 8.1 include Direct3D 11.2, DXGI 1.3 e altri miglioramenti.

Guida alla programmazione per Direct3D 11

Effetti (Direct3D 11)