Vorgehensweise: Überprüfen auf Treiberunterstützung

In diesem Thema erfahren Sie, wie Sie ermitteln, ob Multithreadingfeatures (einschließlich Ressourcenerstellung und Befehlslisten) für die Hardwarebeschleunigung unterstützt werden.

Es wird empfohlen, dass Anwendungen die Unterstützung von Multithreading auf Grafikhardware überprüfen. Wenn der Treiber und die Grafikhardware die Erstellung von Multithreadobjekten nicht unterstützen, kann die Leistung auf folgende Weise eingeschränkt werden:

  • Das gleichzeitige Erstellen mehrerer Objekte (auch unterschiedlicher Typen) kann eingeschränkt sein.
  • Das Erstellen eines Objekts beim Rendern von Grafikbefehlen mithilfe eines unmittelbaren Kontexts kann eingeschränkt sein. Wenn die Hardware beispielsweise Multithreading nicht unterstützt, sollte eine Anwendung vermeiden, dass in einem Hintergrundthread ein Objekt erstellt wird, für das die Erstellung sehr lange dauert. Ein Erstellungsvorgang, der sehr lange dauert, kann das sofortige Kontextrendering blockieren und das Risiko eines Stotterns einer visuellen Bildfrequenz erhöhen.

Die Runtime unterstützt Multithreading und Befehlslisten unabhängig von der Treiber- und Hardwareunterstützung. Wenn keine Treiber- und Hardwareunterstützung für Multithreads oder Befehlslisten vorhanden ist, emuliert die Runtime die Funktionalität. Weitere Informationen zum Multithreading finden Sie unter Einführung in Multithreading in Direct3D 11.

So überprüfen Sie die Treiberunterstützung für Multithreading:

  1. Initialisieren Sie ein ID3D11Device-Schnittstellenobjekt . Multithreading ist standardmäßig aktiviert.
  2. Rufen Sie ID3D11Device::CheckFeatureSupport auf. Übergeben Sie den wert D3D11_FEATURE_THREADING an den Feature-Parameter , übergeben Sie die D3D11_FEATURE_DATA_THREADING-Struktur an den pFeatureSupportData-Parameter , und übergeben Sie die Größe der D3D11_FEATURE_DATA_THREADING-Struktur an den FeatureSupportDataSize-Parameter .
  3. Wenn die ID3D11Device::CheckFeatureSupport-Methode erfolgreich ist, wird die D3D11_FEATURE_DATA_THREADING Struktur, die Sie im vorherigen Schritt übergeben haben, mit Informationen zur Multithreadingunterstützung initialisiert.
    • Wenn DriverConcurrentCreatesauf TRUE festgelegt ist, kann ein Treiber mehrere Ressourcen gleichzeitig (gleichzeitig) in verschiedenen Threads erstellen.

      Wenn DriverCommandListsTRUE ist, unterstützt der Treiber Befehlslisten. Das heißt, Renderingbefehle, die von einem unmittelbaren Kontext ausgegeben werden, können gleichzeitig mit der Objekterstellung in separaten Threads mit geringem Risiko eines Stotterns der Framerate erfolgen.

    • Wenn DriverConcurrentCreatesauf FALSE festgelegt ist, unterstützt ein Treiber die gleichzeitige Erstellung nicht. Dies bedeutet, dass die mögliche Parallelität sehr begrenzt ist. Die Grafikhardware kann objekte unterschiedlicher Typen nicht gleichzeitig in verschiedenen Threads erstellen. Darüber hinaus kann die Grafikhardware keinen unmittelbaren Kontext zum Ausgeben von Renderbefehlen verwenden, während die Grafikhardware versucht, eine Ressource in einem anderen Thread zu erstellen.

Verwenden von Direct3D 11

Multithreading