Freigeben über


API-Ebenen (Direct3D 10)

Die Direct3D 10-Laufzeit wird mit Ebenen erstellt, beginnend mit der grundlegenden Funktionalität im Kern und dem Erstellen optionaler und Entwicklerhilfefunktionen in äußeren Ebenen.

Kernebene

Die Kernebene ist standardmäßig vorhanden; Bietet eine sehr dünne Zuordnung zwischen der API und dem Gerätetreiber, wodurch der Aufwand für Hochfrequenzaufrufe minimiert wird. Da die Kernebene für die Leistung unerlässlich ist, führt sie nur eine kritische Überprüfung durch.

Die verbleibenden Ebenen sind optional. In der Regel fügen Ebenen Funktionen hinzu, ändern jedoch nicht das vorhandene Verhalten. Beispielsweise verfügen Kernfunktionen unabhängig von der Instanziierung der Debugebene über dieselben Rückgabewerte, obwohl zusätzliche Debugausgabe bereitgestellt werden kann, wenn die Debugebene instanziiert wird.

Erstellen Sie Ebenen, wenn ein Gerät erstellt wird, indem Sie D3D10CreateDevice- aufrufen und einen oder mehrere D3D10_CREATE_DEVICE_FLAG Werte bereitstellen.

Debugebene

Die Debugebene bietet umfangreiche zusätzliche Parameter- und Konsistenzüberprüfungen (z. B. Überprüfen der Shaderverknüpfung und Ressourcenbindung, Überprüfen der Parameterkonsistenz und Fehlerbeschreibungen). Die von der Debugebene generierte Ausgabe besteht aus einer Zeichenfolgenwarteschlange, auf die über die ID3D10InfoQueue Interface zugegriffen werden kann (siehe Anpassen der Debugausgabe mit ID3D10InfoQueue (Direct3D 10)). Fehler, die von der Kernebene generiert werden, werden mit Warnungen auf der Debugebene hervorgehoben.

Um ein Gerät zu erstellen, das die Debugebene unterstützt, müssen Sie das DirectX SDK installieren (um D3D10SDKLayers.DLL abzurufen), und geben Sie dann das D3D10_CREATE_DEVICE_DEBUG Flag beim Aufrufen D3D10CreateDevicean. Natürlich ist das Ausführen einer Anwendung mit der Debugebene wesentlich langsamer. Zum Aktivieren/Deaktivieren von Debugmeldungen für D3DX10-APIs rufen Sie D3DX10DebugMuteauf.

Wenn die Debugebene Speicherverluste auflistet, gibt sie eine Liste von Objektschnittstellenzeigern zusammen mit ihren Anzeigenamen aus. Der Standardmäßige Anzeigename ist "<unbenannten>". Sie können den Anzeigenamen mithilfe der ID3D10DeviceChild::SetPrivateData-Methode und der WKPDID_D3DDebugObjectName GUID festlegen, die sich in D3Dcommon.h befindet. Wenn Sie z. B. "pTexture" mit einem SDKLayer-Namen von mytexture.jpgbenennen möchten, verwenden Sie den folgenden Code:

const char c_szName[] = "mytexture.jpg";
pTexture->SetPrivateData( WKPDID_D3DDebugObjectName, sizeof( c_szName ) - 1, c_szName );

In der Regel sollten Sie diese Aufrufe aus Ihrer Produktionsversion kompilieren.

Switch-to-Reference Layer

Diese Ebene ermöglicht es einer Anwendung, zwischen einem Hardwaregerät (HAL) und einem Referenz- oder Softwaregerät (REF) zu wechseln. Um ein Gerät zu wechseln, müssen Sie zuerst ein Gerät erstellen, das die Switch-to-Reference-Ebene unterstützt (siehe D3D10CreateDevice), und rufen Sie dann ID3D10SwitchToRef::SetUseRefauf.

Alle Gerätezustände, Ressourcen und Objekte werden über diesen Geräteübergang verwaltet. Es ist jedoch manchmal nicht möglich, Ressourcendaten exakt abzugleichen. Dies liegt daran, dass einige Informationen für ein Hardwaregerät verfügbar sind, das für ein Referenzgerät nicht verfügbar ist.

Nahezu alle Echtzeitanwendungen verwenden die HAL-Implementierung der Pipeline. Wenn die Pipeline von einem Hardwaregerät zu einem Referenzgerät gewechselt wird, werden Renderingvorgänge sowohl in der Hardware als auch in der Software gleichzeitig ausgeführt. Da das Softwaregerät gerendert wird, müssen Ressourcen in den Systemspeicher heruntergeladen werden. Dies kann erfordern, dass andere Ressourcen im Systemspeicher zwischengespeichert werden, um Platz zu schaffen.

Anmerkung

Dieses Switch-to-Reference-Layer-Feature wird nur in Direct3D 10 und Direct3D 10.1 unterstützt und wird in Direct3D 11 und höheren Versionen nicht mehr unterstützt.

 

Thread-Safe Layer

Diese Ebene ist so konzipiert, dass Multithreadanwendungen von mehreren Threads aus auf das Gerät zugreifen können.

Eine Direct3D 10-Anwendung kann eine Gerätesynchronisierung mithilfe von Gerätefunktionen steuern. Dadurch kann eine Anwendung kritische Abschnitte aktivieren/deaktivieren (vorübergehend den Multithreadingschutz aktivieren/deaktivieren) und eine kritische Abschnittssperre über mehrere Direct3D 10-API-Einstiegspunkte übernehmen/freigeben. Die threadsichere Ebene ist standardmäßig aktiviert. Bei Singlethread-Anwendungen hat die threadsichere Ebene keine Auswirkungen auf die Leistung.

Unterschiede zwischen Direct3D 9 und Direct3D 10:

  • Im Gegensatz zu Direct3D 9 ist die Direct3D 10-API standardmäßig vollständig threadsicher.

 

API-Features (Direct3D 10)