Inizializzazione della comunicazione con Direct3D versione 11 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 della comunicazione

Per inizializzare la comunicazione con la DLL 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 la funzione OpenAdapter10_2 del driver di visualizzazione in modalità utente tramite la tabella di esportazione della DLL per aprire un'istanza della scheda grafica. La funzione OpenAdapter10_2 è l'unica funzione esportata della DLL.

Nota

La funzione OpenAdapter10_2 è identica alla funzione OpenAdapter10 , 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 strutturaD3D10DDIARG_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 Supporto per l'individuazione delle versioni. 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 cambiano 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 sul modo in cui Direct3D 10 gestisce il controllo delle versioni, vedere Inizializzazione della comunicazione con Direct3D versione 10 DDI). Anziché l'API Direct3D si basa sull'errore della funzione di OpenAdapter10_2 del driver per indicare nessun supporto per una determinata versione (come con OpenAdapter10_2), il driver deve elencare in modo esplicito le versioni DDI supportate. Il runtime Direct3D chiama la funzione GetSupportedVersions del driver in modalità utente (una delle funzioni specifiche della scheda del driver) per eseguire query sulle versioni DDI supportate dal driver.

Esistono almeno due nuove versioni DDI per le funzioni DDI Direct3D 11. Ogni versione DDI distingue se il DDI viene eseguito in Windows Vista o Windows 7. Tuttavia, il supporto di Direct3D 11 DDI non indica necessariamente il supporto completo delle funzionalità hardware associate alla D3D_FEATURE_LEVEL_11. I driver possono supportare le nuove funzionalità di threading di Direct3D 11 DDI con hardware che non supportano le altre funzionalità esposte dall'DDI Direct3D 11, ad esempio la tessellazione e così via. Il codice seguente illustra come si distingue 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 le informazioni sulla versione, la funzione OpenAdapter10_2 del driver scambia anche altre informazioni tra il runtime e il driver.

Nella chiamata alla funzione di 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 dell'adattatore pfnQueryAdapterInfoCb per eseguire query sulle funzionalità hardware grafiche dal driver miniport visualizzato.

Il runtime chiama la funzione CreateDevice(D3D10) del driver di visualizzazione in modalità utente (una delle funzioni specifiche dell'adattatore del driver) per creare un dispositivo di visualizzazione per gestire una raccolta di stato di rendering e completare l'inizializzazione. Al termine dell'inizializzazione, il runtime Direct3D versione 11 può chiamare le funzioni Direct3D versione 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 il driver di visualizzazione in modalità utente versione 11 DDI:

  • Il runtime imposta Interfaccia sulla versione dell'interfaccia richiesta dal driver di visualizzazione in modalità utente.

  • Il runtime imposta Versione su un numero che il driver può usare per identificare quando viene compilato il runtime. Ad esempio, il driver può usare il numero di versione per distinguere tra un runtime rilasciato con Windows Vista e un runtime rilasciato con un service pack successivo, che potrebbe contenere una correzione necessaria per il driver.

  • Il runtime imposta hRTDevice per specificare l'handle che il driver deve usare quando il driver esegue la chiamata al runtime.

  • Il runtime imposta hDrvDevice per specificare l'handle usato dal runtime nelle chiamate driver successive.

  • Il runtime fornisce una tabella delle funzioni di callback specifiche del dispositivo nella struttura di D3DDDI_DEVICECALLBACKS a cui pKTCallbacks punta. Il driver di visualizzazione in modalità utente chiama le funzioni di callback fornite dal runtime per accedere ai servizi in modalità kernel nel driver miniport visualizzato.

  • Il driver di visualizzazione in modalità utente restituisce una tabella delle funzioni specifiche del dispositivo nella struttura D3D11DDI_DEVICEFUNCS a cui punta p11DeviceFuncs .

  • Il runtime fornisce una struttura DXGI_DDI_BASE_ARGS a cui punta DXGIBaseDDI . Il runtime e il driver di visualizzazione in modalità utente forniscono l'infrastruttura grafica DirectX DDI a questa struttura.

  • Il runtime imposta hRTCoreLayer per specificare l'handle che il driver deve usare quando il driver viene richiamato nel runtime per accedere alla funzionalità Direct3D 10 di base, ovvero nelle chiamate alle funzioni specificate dal membro p11UMCallbacks .

  • Il runtime fornisce una tabella delle funzioni di callback principali nella struttura di 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.