Freigeben über


Einführung in ein Gerät in Direct3D 11

Das Direct3D 11-Objektmodell unterteilt die Ressourcenerstellungs- und Renderingfunktionen in ein Gerät und einen oder mehrere Kontexte. Diese Trennung wurde entwickelt, um Multithreading zu erleichtern.

Sicherungsmedium

Ein Gerät wird verwendet, um Ressourcen zu erstellen und die Funktionen eines Grafikkartes aufzulisten. In Direct3D 11 wird ein Gerät mit einer ID3D11Device-Schnittstelle dargestellt.

Jede Anwendung muss über mindestens ein Gerät verfügen, die meisten Anwendungen erstellen nur ein Gerät. Erstellen Sie ein Gerät für einen der auf Ihrem Computer installierten Hardwaretreiber, indem Sie D3D11CreateDevice oder D3D11CreateDeviceAndSwapChain aufrufen und den Treibertyp mit dem D3D_DRIVER_TYPE-Flag angeben. Jedes Gerät kann je nach gewünschter Funktionalität einen oder mehrere Gerätekontexte verwenden.

Gerätekontext

Ein Gerätekontext enthält den Umstand oder die Einstellung, in der ein Gerät verwendet wird. Genauer gesagt wird ein Gerätekontext verwendet, um den Pipelinestatus festzulegen und Renderingbefehle mithilfe der Ressourcen zu generieren, die einem Gerät gehören. Direct3D 11 implementiert zwei Arten von Gerätekontexten, einen für das sofortige Rendering und den anderen für verzögertes Rendering. Beide Kontexte werden mit einer ID3D11DeviceContext-Schnittstelle dargestellt.

Unmittelbarer Kontext

Ein direkter Kontext wird direkt im Treiber gerendert. Jedes Gerät verfügt über einen und nur einen unmittelbaren Kontext, der Daten von der GPU abrufen kann. Ein unmittelbarer Kontext kann verwendet werden, um eine Befehlsliste sofort zu rendern (oder wiederzugeben).

Es gibt zwei Möglichkeiten, einen unmittelbaren Kontext abzurufen:

Verzögerter Kontext

Ein verzögerter Kontext zeichnet GPU-Befehle in einer Befehlsliste auf. Ein verzögerter Kontext wird hauptsächlich für Multithreading verwendet und ist für eine Singlethread-Anwendung nicht erforderlich. Ein verzögerter Kontext wird in der Regel von einem Workerthread anstelle des Standard Renderthreads verwendet. Wenn Sie einen verzögerten Kontext erstellen, erbt er keinen Zustand aus dem unmittelbaren Kontext.

Rufen Sie ID3D11Device::CreateDeferredContext auf, um einen verzögerten Kontext abzurufen.

Jeder Kontext – unmittelbar oder verzögert – kann für jeden Thread verwendet werden, solange der Kontext jeweils nur in einem Thread verwendet wird.

Überlegungen zum Threading

In dieser Tabelle werden die Unterschiede im Threadingmodell in Direct3D 11 von früheren Versionen von Direct3D hervorgehoben.

Unterschiede zwischen Direct3D 11 und früheren Versionen von Direct3D:
Alle ID3D11Device-Schnittstellenmethoden sind Freithreads, was bedeutet, dass mehrere Threads die Funktionen gleichzeitig aufrufen.

  • Alle von ID3D11DeviceChild abgeleiteten Schnittstellen (ID3D11Buffer, ID3D11Query usw.) sind Freithreads.
  • Direct3D 11 teilt das Erstellen und Rendern von Ressourcen in zwei Schnittstellen auf. Map, Unmap, Begin, End und GetData werden in ID3D11DeviceContext implementiert, da ID3D11Device die Reihenfolge der Vorgänge stark definiert. ID3D11Resource - und ID3D11Asynchrone Schnittstellen implementieren auch Methoden für Freethreadvorgänge.
  • Die ID3D11DeviceContext-Methoden (mit Ausnahme der Methoden, die in ID3D11DeviceChild vorhanden sind) sind nicht freethreaded, d. h. sie erfordern einzelen Threading. Nur ein Thread kann eine seiner Methoden (Draw, Copy, Map usw.) gleichzeitig sicher aufrufen.
  • Im Allgemeinen minimiert Freethreading die Anzahl der verwendeten Synchronisierungsgrundsätze sowie deren Dauer. Eine Anwendung, die eine lange Synchronisierung verwendet, kann sich jedoch direkt darauf auswirken, wie viel Parallelität eine Anwendung erwarten kann.
ID3D10Device-Schnittstellenmethoden sind nicht für Freethreads konzipiert. ID3D10Device implementiert alle Erstellungs- und Renderingfunktionen (wie ID3D9Device in Direct3D 9). Map und Unmap werden auf VON ID3D10Resource abgeleiteten Schnittstellen implementiert, Begin, End und GetData werden auf ID3D10Asynchron abgeleiteten Schnittstellen implementiert.

Geräte