Introduzione ai contesti posticipati

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

I contesti posticipati vengono usati da un'applicazione per creare elenchi di comandi. Se un driver di visualizzazione in modalità utente indica che supporta gli elenchi di comandi tramite il flag D3D11DDICAPS_COMMANDLISTS_BUILD_2 della struttura D3D11DDI_THREADING_CAPS , deve supportare anche la possibilità di creare e modificare contesti posticipati. Per altre informazioni su come il driver indica le funzionalità di threading, vedere Supporto di threading, elenchi di comandi e pipeline 3D. I contesti posticipati differiscono dal contesto immediato in quanto i comandi che il record dei contesti posticipati non può essere eseguito fino a quando l'applicazione non richiede esplicitamente di eseguire i comandi eseguendo l'elenco di comandi generato. Per creare e usare un contesto posticipato, Direct3D versione 11 fornisce le nuove funzioni DDI seguenti. Queste funzioni sono un sottoinsieme di informazioni necessarie per creare la combinazione di contesto immediato/dispositivo.

La semantica delle funzioni CalcPrivateDeferredContextSize e CreateDeferredContext sono simili ad altre funzioni DDI simili.

Il runtime Direct3D passa un nuovo handle del driver e un handle di livello principale per ogni chiamata alla funzione CreateDeferredContext del driver per creare ogni contesto posticipato. Lo stato della pipeline di ogni contesto posticipato deve essere equivalente allo stato della pipeline in cui è stato eseguito il contesto immediato dopo l'esecuzione dell'operazione di cancellazione dello stato. Il driver deve riempire i membri della struttura D3D11DDI_DEVICEFUNCS a cui punta il membro p11ContextFuncs della struttura D3D11DDIARG_CREATEDEFERREDCONTEXT con un subset delle funzioni dalla tabella delle funzioni; il runtime usa ogni contesto posticipato corrispondente D3D10DDI_HDEVICE gestire i valori specificati dal membro hDrvContext di D3D11DDIARG_CREATEDEFERREDCONTEXT con questa tabella di funzioni.

Il driver deve continuare a fornire funzioni che iniziano con pfnCreate, pfnOpen e pfnDestroy per il contesto posticipato. Queste funzioni condividono la stessa semantica di threading del resto del contesto posticipato e vengono usate per aprire e chiudere handle DDI locali del contesto, come descritto in Uso di handle DDI Context-Local DDI. Le funzioni che iniziano con pfnCalcPrivate o pfnCheck non vengono sfruttate per i contesti posticipati; pertanto, il driver può impostare i membri di D3D11DDI_DEVICEFUNCS per queste funzioni su NULL quando viene creato il contesto posticipato. La maggior parte delle funzioni del dispositivo rimanenti viene sfruttata per il supporto del contesto posticipato. Tuttavia, il driver non sfrutta la funzione QueryGetData . Tuttavia, il driver sfrutta le funzioni ResourceMap e ResourceUnmap . Il driver supporta solo la funzione ResourceIsStagingBusy e le nuove funzioni DDI per i morsetti delle risorse Direct3D versione 11 nel contesto immediato usando handle di contesto immediato. Per un elenco completo delle funzioni che non vengono sfruttate per i contesti posticipati, vedere Esclusione di funzioni DDI per contesti posticipati.

Il driver sfrutta le funzioni di callback di livello principale fornite nel blocco di memoria a cui punta il membro p11UMCallbacks di D3D11DDIARG_CREATEDEFERREDCONTEXT . Queste funzioni di callback di livello principale forniscono l'DDI dello stato di aggiornamento per ogni contesto posticipato. Soprattutto, tuttavia, è l'aggiunta della funzione di callback pfnPerformAmortizedProcessingCb descritta in Modifiche da Direct3D 10.

Il driver non deve aspettarsi che la funzione di callback pfnDisableDeferredStagingResourceDestruction a cui il membro pfnDisableDeferredStagingResourceDestruction di D3D11DDI_CORELAYER_DEVICECALLBACKS punti sia valido. Il driver deve aver chiamato pfnDisableDeferredStagingResourceDestruction all'interno della funzione CreateDevice(D3D10) per il contesto di dispositivo/immediato; successivamente, il driver non dovrebbe mai chiamare pfnDisableDeferredStagingResourceDestruction con la nuova semantica DDI Direct3D versione 11.

La funzione RecycleCreateDeferredContext del driver deve cancellare lo stato della pipeline per il contesto posticipato, in modo analogo a come createDeferredContext del driver cancella lo stato della pipeline per il contesto posticipato. Dopo che il runtime chiama il driver AbandonCommandList, CreateCommandList o RecycleCreateCommandList, il runtime può usare l'handle di contesto posticipato con la funzione DestroyDevice(D3D10) o RecycleCreateDeferredContext del driver. Per altre informazioni su RecycleCreateDeferredContext, vedere Ottimizzazione per elenchi di comandi di piccole dimensioni.