Condividi tramite


Supporto del threading, degli elenchi di comandi e della pipeline 3D

Questa sezione si applica solo a Windows 7 e versioni successive e Windows Server 2008 R2 e versioni successive del sistema operativo Windows.

Un driver di visualizzazione in modalità utente indica le nuove funzionalità Direct3D versione 11 supportate (ad esempio threading, elenchi di comandi e pipeline 3D) quando il runtime Direct3D versione 11 chiama la funzione GetCaps(D3D10_2) del driver. GetCaps(D3D10_2) è una delle funzioni specifiche dell'adattatore del driver fornite dal driver nella struttura D3D10_2DDI_ADAPTERFUNCS a cui punta il membro pAdapterFuncs_2 della struttura D3D10DDIARG_OPENADAPTER. Per altre informazioni sulla fornitura di funzioni specifiche dell'adattatore durante l'inizializzazione del driver, vedere Inizializzazione della comunicazione con Direct3D versione 11 DDI. Quando viene chiamata la funzione GetCaps(D3D10_2), il driver di visualizzazione in modalità utente fornisce nuove funzionalità Direct3D versione 11 in base al tipo di richiesta ,specificato nel membro Typedella struttura D3D10_2DDIARG_GETCAPS a cui punta il parametro pData della funzione GetCaps(D3D10_2).

Elenchi di thread e comandi

L'API Direct3D versione 11 richiede una modalità di operazione in cui può sincronizzare i thread dell'applicazione per garantire che solo uno dei thread venga eseguito nell'DDI alla volta. L'API Direct3D versione 11 richiede anche una modalità di operazione con un emulazione software degli elenchi di comandi. Queste modalità di operazione sono richieste da e sfruttate sulle DDI precedenti(ad esempio, la versione Direct3D versione 10 DDI). Pertanto, come aiuto per lo sviluppo per i writer driver, queste stesse modalità di operazione sono estese per esistere nell'DDI direct3D versione 11. I writer di driver possono decidere quali modalità di operazioni desiderano che i driver supportino per direct3D versione 11 DDI.

Tutti i driver devono infine supportare completamente tutti i tipi di operazioni di threading, ovvero tutti i driver devono supportare tutte le funzionalità di threading della struttura D3D11DDI_THREADING_CAPS . Tuttavia, il driver può richiedere che l'API emula gli elenchi di comandi o applichi una modalità a thread singolo dell'operazione per il driver. L'API deve essere consapevole delle funzionalità di threading del driver durante la creazione di un dispositivo API, ma prima della creazione di un dispositivo DDI. Pertanto, il runtime determina le funzionalità di threading del driver quando chiama la funzione specifica dell'adattatore GetCaps(D3D10_2) del driver con il membro Type di D3D10_2DDIARG_GETCAPS impostato su D3D11DDICAPS_THREADING . Il driver restituisce un puntatore a una struttura D3D11DDI_THREADING_CAPS nel membro pData di D3D10_2DDIARG_GETCAPS che identifica le funzionalità di threading del driver. Il driver deve supportare la modalità a thread libero (D3D11DDICAPS_FREETHREADED) se il driver supporta anche elenchi di comandi (D3D11DDICAPS_COMMANDLISTS_BUILD_2) perché gli elenchi di comandi si basano sulla modalità thread gratuita. Il driver deve acconsentire esplicitamente per supportare la modalità senza thread e gli elenchi di comandi. L'applicazione può determinare il supporto indicato dal driver tramite l'uso della funzione CheckFeatureSupport a livello di applicazione e della costante D3D11_FEATURE_THREADING; Tuttavia, alcune applicazioni potrebbero non prestare attenzione a causa del supporto fornito dall'API.

Livello della pipeline 3D

I driver che supportano Direct3D versione 11 DDI non sono necessari per supportare tutte le funzionalità hardware di Direct3D versione 11 DDI. I driver possono supportare il nuovo modello di threading di Direct3D versione 11 DDI sopra l'hardware che supporta solo direct3D versione 10 DDI. Il runtime Direct3D versione 11 determina il livello hardware massimo del driver quando il runtime chiama la funzione GetCaps(D3D10_2) del driver con il membro Type di D3D10_2DDIARG_GETCAPS impostato su D3D11DDICAPS_3DPIPELINESUPPORT . Il driver restituisce un puntatore a una struttura D3D11DDI_3DPIPELINESUPPORT_CAPS nel membro pData di D3D10_2DDIARG_GETCAPS che identifica il livello hardware massimo di supporto.

L'API non usa solo la versione DDI come indicatore principale del supporto a livello di funzionalità API; l'API consente al driver di eseguire il feedback in questo processo. Il runtime sceglie un valore D3D11DDI_3DPIPELINELEVEL e restituisce il valore al driver durante la creazione del dispositivo in una chiamata alla funzione CreateDevice(D3D10) del driver, come parte del membro Flagdella struttura D3D10DDIARG_CREATEDEVICE .

Se il driver supporta livelli hardware inferiori a Direct3D versione 11 nel DDI direct3D versione 11, sono presenti ramificazioni secondarie per l'operazione del driver. Il primo è che il runtime Direct3D versione 11 potrebbe non chiamare mai molte nuove funzioni DDI Direct3D versione 11. Ad esempio, il runtime Direct3D versione 11 non chiama alcuna delle nuove funzioni DDI in fase shader (ad esempio DsSetShader) se il driver supporta un livello di funzionalità hardware minore di Direct3D versione 11. Altre funzioni DDI seguono le regole del livello di funzionalità e ignorano il fatto che direct3D versione 11 DDI potrebbe essere associato a funzionalità superiori. Ad esempio, anche se IAVertexInputSlots per l'API Direct3D versione 11 è 32, il livello di funzionalità Direct3D versione 10 consente solo 16 ed è ciò che il driver dovrebbe aspettarsi.

Le funzionalità deprecate o convertite presentano un altro aspetto interessante. La deprecazione non è possibile a livello DDI direct3D versione 11 perché la deprecazione deve supportare la possibilità di esprimere le funzioni DDI della versione precedente. Ad esempio, la versione API Direct3D 11 di PIPELINESTATS è sempre costante; tuttavia, richiede diversi D3D10_DDI_QUERY_DATA_PIPELINE_STATISTICS con livelli di funzionalità Direct3D 10 e D3D11_DDI_QUERY_DATA_PIPELINE_STATISTICS con livelli di funzionalità Direct3D 11 e così via. Anche se l'API ha tentato di deprecare le dimensioni del filtro di testo, è più facile deprecare la voce della tabella delle funzioni DDI, nell'intera dimensione, rispetto a tentare di riutilizzare la voce della tabella delle funzioni per un altro elemento.

Anche se un driver che supporta Direct3D versione 11 DDI non supporta il livello di funzionalità Direct3D versione 11 completo, il driver non può rifiutare esplicitamente "consapevolezza del formato esteso", come descritto in Supporto della consapevolezza del formato esteso. Poiché il driver supporta Direct3D versione 11 DDI, il driver deve gestire le attività seguenti:

  • Supportare i formati BGR

  • Rispondere correttamente alle chiamate alla funzione CheckFormatSupport per verificare la presenza di XR_BIAS supporto. Il driver deve richiedere supporto o negare il supporto.

  • Consenti il cast di buffer indietro completamente tipizzato

L'API Direct3D versione 11 informa anche il driver se l'applicazione usa più thread tramite il flag di D3D11DDI_CREATEDEVICE_FLAG_SINGLETHREADED. Se questo flag è presente nel membro Flag della struttura di D3D10DDIARG_CREATEDEVICE quando viene creato un dispositivo di visualizzazione tramite una chiamata alla funzione CreateDevice(D3D10) del driver, il driver può determinare che non vengono creati contesti posticipati e che il driver non è necessario sincronizzare, poiché non si verificano operazioni simultanee create.