Freigeben über


Einführung in verzögerte Kontexte

Dieser Abschnitt gilt nur für Windows 7 und höher sowie Windows Server 2008 R2 und höhere Versionen des Windows-Betriebssystems.

Verzögerte Kontexte werden von einer Anwendung verwendet, um Befehlslisten zu erstellen. Wenn ein Benutzermodusanzeigetreiber angibt, dass er Befehlslisten über das D3D11DDICAPS_COMMANDLISTS_BUILD_2-Flag der D3D11DDI_THREADING_CAPS-Struktur unterstützt, muss er auch die Möglichkeit unterstützen, verzögerte Kontexte zu erstellen und zu bearbeiten. Weitere Informationen dazu, wie der Treiber Threadingfunktionen angibt, finden Sie unter Unterstützen von Threading, Befehlslisten und 3D-Pipeline. Verzögerte Kontexte unterscheiden sich vom unmittelbaren Kontext darin, dass die Befehle, die der verzögerte Kontextdatensatz enthält, erst ausgeführt werden können, wenn die Anwendung explizit die Ausführung der Befehle anfordert, indem die generierte Befehlsliste ausgeführt wird. Um einen verzögerten Kontext zu erstellen und zu verwenden, stellt Direct3D Version 11 die folgenden neuen DDI-Funktionen bereit. Diese Funktionen sind eine Teilmenge der Informationen, die erforderlich sind, um die Kombination aus Dem-/Unmittelbarkontext zu erstellen.

Die Semantik der Funktionen CalcPrivateDeferredContextSize und CreateDeferredContext ähnelt anderen ähnlichen DDI-Funktionen.

Die Direct3D-Runtime übergibt für jeden Aufruf der CreateDeferredContext-Funktion des Treibers ein neues Treiberhandle und ein neues Hauptebenenhandle, um jeden verzögerten Kontext zu erstellen. Der Pipelinezustand jedes verzögerten Kontexts muss dem Pipelinezustand entsprechen, den der unmittelbare Kontext hat, nachdem der Clear-State-Vorgang für ihn ausgeführt wurde. Der Treiber muss Member der D3D11DDI_DEVICEFUNCS-Struktur füllen, auf die der p11ContextFuncs-MemberD3D11DDIARG_CREATEDEFERREDCONTEXT Struktur zeigt, mit einer Teilmenge der Funktionen aus der Funktionstabelle. Die Runtime verwendet jeden der entsprechenden verzögerten Kontext D3D10DDI_HDEVICE Verarbeiten von Werten, die der hDrvContext-Member von D3D11DDIARG_CREATEDEFERREDCONTEXT mit dieser Funktionstabelle angibt.

Der Treiber muss weiterhin Funktionen bereitstellen, die mit pfnCreate, pfnOpen und pfnDestroy für den verzögerten Kontext beginnen. Diese Funktionen verwenden dieselbe Threadingsemantik wie der Rest des verzögerten Kontexts und werden verwendet, um kontextlokale DDI-Handles zu öffnen und zu schließen, wie unter Verwenden Context-Local DDI Handles beschrieben. Funktionen, die mit pfnCalcPrivate oder pfnCheck beginnen, werden nicht für verzögerte Kontexte genutzt. Daher kann der Treiber die Member von D3D11DDI_DEVICEFUNCS für diese Funktionen auf NULL festlegen, wenn der verzögerte Kontext erstellt wird. Die meisten der verbleibenden Gerätefunktionen werden für die Unterstützung des verzögerten Kontexts genutzt. Der Treiber nutzt seine QueryGetData-Funktion jedoch nicht. Der Treiber nutzt jedoch die Funktionen ResourceMap und ResourceUnmap . Der Treiber unterstützt nur die ResourceIsStagingBusy-Funktion und neue DDI-Funktionen für Direct3D Version 11-Ressourcenklammern im unmittelbaren Kontext mithilfe von Handles für den direkten Kontext. Eine vollständige Liste der Funktionen, die nicht für verzögerte Kontexte genutzt werden, finden Sie unter Ausschließen von DDI-Funktionen für verzögerte Kontexte.

Der Treiber nutzt die Rückruffunktionen der Kernebene, die im Speicherblock bereitgestellt werden, auf den der p11UMCallbacks-Membervon D3D11DDIARG_CREATEDEFERREDCONTEXT verweist. Diese Rückruffunktionen der Kernebene stellen den Aktualisierungszustand-DDI für jeden verzögerten Kontext bereit. Am wichtigsten ist jedoch das Hinzufügen der Rückruffunktion pfnPerformAmortizedProcessingCb , die unter Änderungen von Direct3D 10 beschrieben wird.

Der Treiber sollte nicht erwarten, dass die Rückruffunktion pfnDisableDeferredStagingResourceDestruction , für die der pfnDisableDeferredStagingResourceDestruction-Member von D3D11DDI_CORELAYER_DEVICECALLBACKS punktet, gültig ist. Der Treiber sollte pfnDisableDeferredStagingResourceDestruction innerhalb der CreateDevice(D3D10) -Funktion für den Geräte-/unmittelbaren Kontext aufgerufen haben. danach sollte der Treiber nie pfnDisableDeferredStagingResourceDestruction mit der neuen DDI-Semantik von Direct3D Version 11 aufrufen.

Die RecycleCreateDeferredContext-Funktion des Treibers muss den Pipelinestatus für den verzögerten Kontext löschen, ähnlich wie createDeferredContext des Treibers den Pipelinestatus für den verzögerten Kontext löscht. Nachdem die Laufzeit die AbandonCommandList, CreateCommandList oder RecycleCreateCommandList des Treibers aufgerufen hat, kann die Laufzeit das verzögerte Kontexthandle entweder mit der Funktion DestroyDevice(D3D10) oder RecycleCreateDeferredContext des Treibers verwenden. Weitere Informationen zu RecycleCreateDeferredContext finden Sie unter Optimierung für kleine Befehlslisten.