Inizializzazione della comunicazione con la versione 11 di Direct3D DDI
Questa sezione si applica solo a Windows 7 e versioni successive e Windows Server 2008 R2 e versioni successive del sistema operativo Windows.
Inizializzazione delle comunicazioni
Per inizializzare la comunicazione con la DLL del driver di visualizzazione in modalità utente versione 11 DDI, il runtime Direct3D versione 11 carica prima la DLL se la DLL non è ancora caricata. Il runtime Direct3D chiama successivamente, tramite la tabella di esportazione della DLL, la funzione OpenAdapter10_2 del driver di visualizzazione in modalità utente per aprire un'istanza dell'adattatore grafico. La funzione OpenAdapter10_2 è l'unica funzione esportata della DLL.
Nota
La funzione OpenAdapter10_2 è identica alla funzioneOpenAdapter10, ad eccezione del modo in cui viene restituita la tabella delle funzioni specifiche dell'adattatore del driver:
- OpenAdapter10_2 restituisce la tabella nel membro pAdapterFuncs_2 della struttura D3D10DDIARG_OPENADAPTER, in cui pAdapterFuncs_2 punta a una struttura D3D10_2DDI_ADAPTERFUNCS.
- OpenAdapter10 restituisce la tabella nel membro pAdapterFuncs di D3D10DDIARG_OPENADAPTER, dove pAdapterFuncs punta a una struttura D3D10DDI_ADAPTERFUNCS.
OpenAdapter10_2 è stato progettato per rendere più efficiente l'inizializzazione dei driver. È necessario implementare OpenAdapter10_2 nei driver Direct3D versione 11. È anche possibile implementare OpenAdapter10_2 (anziché o oltre a OpenAdapter10) nei driver Direct3D versione 10.1 per aumentare l'efficienza di inizializzazione di tali driver. Per altre informazioni sull'implementazione di OpenAdapter10_2 nei driver Direct3D versione 10.1, vedere Version Discovery Support. OpenAdapter10_2 gestisce lo scambio di versioni e altre informazioni tra il runtime e il driver.
Controllo delle versioni
OpenAdapter10_2 e le funzioni specifiche dell'adattatore del driver modificano il modo in cui il controllo delle versioni tra l'API Direct3D e direct3D DDI viene gestito dal modo in cui Direct3D 10 gestisce il controllo delle versioni (per altre informazioni su come Direct3D 10 gestisce il controllo delle versioni, vedere inizializzazione della comunicazione con Direct3D versione 10 DDI). Invece di affidarsi all'errore della funzione OpenAdapter10_2 del driver per indicare la mancanza di supporto per una determinata versione (come accade con OpenAdapter10_2), il driver deve indicare esplicitamente le versioni DDI che supporta. Il runtime Direct3D chiama la funzione GetSupportedVersions del driver di visualizzazione in modalità utente (una delle funzioni specifiche dell'adattatore del driver) per ottenere le versioni DDI supportate dal driver.
Esistono almeno due nuove versioni DDI per le funzioni DDI Direct3D 11. Ogni versione del DDI distingue se il DDI viene eseguito su Windows Vista o Windows 7. Tuttavia, il supporto di DDI Direct3D 11 non indica necessariamente il supporto completo delle funzionalità hardware associate a D3D_FEATURE_LEVEL_11. I driver possono supportare le nuove funzionalità di threading dell'DDI Direct3D 11 con hardware che non supporta le altre funzionalità esposte dall'DDI Direct3D 11, come la tassellatura e così via. Il codice seguente mostra come distinguere ogni versione DDI:
// D3D11.0 on Vista
#define D3D11_DDI_MAJOR_VERSION 11
#define D3D11_0_DDI_MINOR_VERSION ...
#define D3D11_0_DDI_INTERFACE_VERSION \
((D3D11_DDI_MAJOR_VERSION << 16) | D3D11_0_DDI_MINOR_VERSION)
#define D3D11_0_DDI_BUILD_VERSION ...
#define D3D11_0_DDI_SUPPORTED \
((((UINT64)D3D11_0_DDI_INTERFACE_VERSION) << 32) | \
(((UINT64)D3D11_0_DDI_BUILD_VERSION) << 16))
// D3D11.0 on Windows 7
#define D3D11_0_7_DDI_MINOR_VERSION ...
#define D3D11_0_7_DDI_INTERFACE_VERSION \
((D3D11_DDI_MAJOR_VERSION << 16) | D3D11_0_7_DDI_MINOR_VERSION)
#define D3D11_0_7_DDI_BUILD_VERSION ...
#define D3D11_0_7_DDI_SUPPORTED \
((((UINT64)D3D11_0_7_DDI_INTERFACE_VERSION) << 32) | \
(((UINT64)D3D11_0_7_DDI_BUILD_VERSION) << 16))
#ifndef IS_D3D11_WIN7_INTERFACE_VERSION
#define IS_D3D11_WIN7_INTERFACE_VERSION( i ) (D3D11_0_7_DDI_INTERFACE_VERSION == i)
#endif
Scambio di informazioni
Oltre a specificare informazioni sulla versione, la funzione OpenAdapter10_2 del driver scambia anche altre informazioni tra il runtime e il driver.
Nella chiamata alla funzione OpenAdapter10_2 del driver, il runtime fornisce la funzione di callback dell'adattatore pfnQueryAdapterInfoCb nel membro pAdapterCallbacks della struttura D3D10DDIARG_OPENADAPTER. Il driver di visualizzazione in modalità utente deve chiamare la funzione di callback pfnQueryAdapterInfoCb dell'adattatore per richiedere le capacità hardware grafiche dal driver miniport per display.
Il runtime invoca la funzione CreateDevice(D3D10) del driver di visualizzazione in modalità utente (una delle funzioni specifiche per l'adattatore del driver) per creare un dispositivo di visualizzazione adibito alla gestione di una raccolta di stati di rendering e completare l'inizializzazione. Al termine dell'inizializzazione, il runtime direct3D versione 11 può chiamare le funzioni Direct3D 11 fornite dal driver di visualizzazione e il driver di visualizzazione in modalità utente può chiamare le funzioni fornite dal runtime .
La funzione CreateDevice(D3D10) del driver di visualizzazione in modalità utente viene chiamata con una struttura D3D10DDIARG_CREATEDEVICE i cui membri sono configurati nel modo seguente per inizializzare la DDI del driver di visualizzazione in modalità utente versione 11:
Il runtime imposta Interface sulla versione dell'interfaccia richiesta dal runtime dal driver di visualizzazione in modalità utente.
Il runtime imposta Versione su un numero che il driver può usare per identificare quando il runtime è stato compilato. Ad esempio, il driver può usare il numero di versione per distinguere un runtime rilasciato con Windows Vista e un runtime rilasciato con un Service Pack successivo, che potrebbe contenere una correzione richiesta dal driver.
Il runtime imposta hRTDevice per specificare l'handle che il driver deve usare quando il driver chiama di nuovo nel runtime.
Il runtime imposta hDrvDevice per specificare l'handle usato dal runtime nelle chiamate del driver successive.
Il runtime fornisce una tabella delle funzioni di callback specifiche del dispositivo nella struttura di D3DDDI_DEVICECALLBACKS a cui pKTCallbacks punti. Il driver di visualizzazione in modalità utente chiama le funzioni di callback fornite dal runtime per accedere ai servizi di modalità kernel nel driver miniport di visualizzazione.
Il driver di visualizzazione in modalità utente restituisce una tabella delle sue funzioni specifiche del dispositivo nella struttura D3D11DDI_DEVICEFUNCS a cui p11DeviceFuncs punta.
Il runtime fornisce una struttura DXGI_DDI_BASE_ARGS a cui DXGIBaseDDI punta. Il runtime e il driver di visualizzazione in modalità utente forniscono il DDI dell'infrastruttura grafica DirectX a questa struttura.
Il runtime imposta hRTCoreLayer per specificare l'handle che il driver deve usare quando richiama il runtime per accedere alla funzionalità principale di Direct3D 10, ossia nelle chiamate alle funzioni che il membro p11UMCallbacks specifica.
Il runtime fornisce una tabella delle sue funzioni di callback principali nella struttura D3D11DDI_CORELAYER_DEVICECALLBACKS a cui punta p11UMCallbacks. Il driver di visualizzazione in modalità utente chiama le funzioni di callback di base fornite dal runtime per aggiornare lo stato.