Freigeben über


API-Ebenen (Direct3D 10)

Die Direct3D 10-Runtime wird mit Ebenen erstellt, beginnend mit der grundlegenden Funktionalität im Kern und dem Erstellen optionaler und entwicklergestützter Funktionen in äußeren Ebenen.

Kernebene

Die Kernebene ist standardmäßig vorhanden. Bereitstellung einer sehr dünnen Zuordnung zwischen der API und dem Gerätetreiber, wodurch der Mehraufwand für hochfrequente Aufrufe minimiert wird. Da die Kernebene für die Leistung von entscheidender Bedeutung ist, führt sie nur eine kritische Überprüfung durch.

Die übrigen Ebenen sind optional. In der Regel fügen Ebenen Funktionen hinzu, ändern aber das vorhandene Verhalten nicht. Kernfunktionen verfügen beispielsweise unabhängig von der instanziierten Debugebene über die gleichen Rückgabewerte, obwohl eine 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 angeben.

Debugebene

Die Debugebene bietet umfassende zusätzliche Parameter- und Konsistenzüberprüfungen (z. B. Überprüfen der Shaderverknüpfung und Ressourcenbindung, Überprüfen der Parameterkonsistenz und Melden von Fehlerbeschreibungen). Die von der Debugebene generierte Ausgabe besteht aus einer Warteschlange mit Zeichenfolgen, auf die über die ID3D10InfoQueue-Schnittstelle zugegriffen werden kann (siehe Anpassen der Debugausgabe mit ID3D10InfoQueue (Direct3D 10)). Fehler, die von der Kernebene generiert werden, werden durch Warnungen 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 dann das D3D10_CREATE_DEVICE_DEBUG-Flag angeben, wenn Sie D3D10CreateDevice aufrufen. Natürlich ist das Ausführen einer Anwendung mit der Debugebene wesentlich langsamer. Rufen Sie D3DX10DebugMute auf, um Debugmeldungen für D3DX10-APIs zu aktivieren/zu deaktivieren.

Wenn die Debugebene Speicherverluste auflistet, gibt sie eine Liste von Objektschnittstellenzeigern zusammen mit ihren Anzeigenamen aus. Der Standard-Anzeigename ist "<unbenannt>". Sie können den Anzeigenamen mithilfe der ID3D10DeviceChild::SetPrivateData-Methode und der WKPDID_D3DDebugObjectName GUID in D3Dcommon.h festlegen. Verwenden Sie beispielsweise den folgenden Code, um pTexture mit dem SDKLayer-Namen mytexture.jpg zu benennen:

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 dann ID3D10SwitchToRef::SetUseRef aufrufen.

Alle Gerätezustände, Ressourcen und Objekte werden über diesen Geräteübergang verwaltet. Es ist jedoch manchmal nicht möglich, Ressourcendaten genau 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.

Praktisch alle Echtzeitanwendungen verwenden die HAL-Implementierung der Pipeline. Wenn die Pipeline von einem Hardwaregerät auf ein Referenzgerät umgestellt wird, werden Renderingvorgänge gleichzeitig in Hardware und Software ausgeführt. Während das Softwaregerät gerendert wird, müssen Ressourcen in den Systemspeicher heruntergeladen werden. Dies erfordert möglicherweise, dass andere Ressourcen, die im Systemspeicher zwischengespeichert sind, entfernt werden, um Platz zu schaffen.

Hinweis

Dieses Feature für den Wechsel zur Referenzebene wird nur in Direct3D 10 und Direct3D 10.1 unterstützt und in Direct3D 11 und höheren Versionen nicht mehr unterstützt.

 

Thread-Safe Ebene

Diese Ebene ist so konzipiert, dass Multithreadanwendungen über mehrere Threads 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 (vorübergehendes Aktivieren/Deaktivieren des Multithreading-Schutzes) aktivieren/deaktivieren und eine Sperre für kritische Abschnitte über mehrere Direct3D 10-API-Einstiegspunkte aufheben bzw. freigeben. Die threadsichere Ebene ist standardmäßig aktiviert. Bei Singlethreadanwendungen 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)