Freigeben über


Aufzählen der kofunktionalen VidPN-Quell- und Zielmodi

In diesem Thema wird beschrieben, wie der VidPN-Manager (Video Present Network) und der Display-Miniport-Treiber zusammenarbeiten, um die Modi aufzuzählen, die für Video Present-Quellen und -Ziele verfügbar sind. Bevor Sie dieses Material lesen, sollten Sie mit den folgenden Themen vertraut sein:

Von Zeit zu Zeit fordert der VidPN-Manager den Display-Miniport-Treiber auf, die Modi aufzuzählen, die für die Videopräsentationsquellen und -ziele eines Anzeigeadapters verfügbar sind. In der Regel weist die Anforderung das folgende Muster auf:

  1. Der VidPN-Manager erstellt oder erhält ein VidPN, bei dem an einige, aber nicht alle seiner Quellen und Ziele Modi festgelegt sind.

  2. Der VidPN-Manager ruft DxgkDdiIsSupportedVidPn auf, um zu bestimmen, ob das VidPN erweitert werden kann, um ein funktionsfähiges VidPN zu bilden, das vom Anzeigeadapter unterstützt wird. Das heißt, es wird gefragt, ob Modi an die verbleibenden Quellen und Ziele angeheftet werden können, ohne die vorhandenen angehefteten Modi zu ändern.

  3. Der VidPN-Manager ruft DxgkDdiEnumVidPnCofuncModality auf, um die Modi abzurufen, die für die Quellen und Ziele verfügbar sind, die noch nicht über angeheftete Modi verfügen.

Eines der Argumente, die an DxgkDdiEnumVidPnCofuncModality übergeben werden, ist ein Handle für ein VidPN-Objekt, das als VidPN bezeichnet wird.

DxgkDdiEnumVidPnCofuncModality muss Folgendes ausführen:

  • Überprüfen Sie den eingeschränkten VidPN.

  • Passen Sie für jede Quelle und jedes Ziel ohne festgelegten Modus den Modussatz so an, dass er der größtmögliche Modussatz ist, der mit den Einschränkungen kofunktional ist.

  • Passen Sie für jeden Pfad ohne festgelegte Skalierungstransformation die Skalierungsunterstützungsflags so an, dass sie mit den Einschränkungen kofunktional sind.

  • Passen Sie für jeden Pfad ohne festgelegte Drehungstransformation die Flags der Drehungsunterstützung so an, dass sie mit den Einschränkungen kofunktional sind.

  • Geben Sie für jede Quelle mit fixiertem Modus die für diese Quelle verfügbaren Multisampling-Methoden an.

In den folgenden Absätzen wird ausführlich beschrieben, wie die einzelnen Aufgaben in der vorherigen Aufzählungsliste ausgeführt werden.

Überprüfen des eingeschränkten VidPN

Die folgenden Eigenschaften der eingeschränkten VidPN sind die Einschränkungen, die von DxgkDdiEnumVidPnCofuncModality berücksichtigt werden müssen.

  • Topologie (der Satz von Zuordnungen zwischen Quellen und Zielen)

  • Angeheftete Modi

  • Skalierung, Skalierungsunterstützung, Drehung und Drehungsunterstützung für jeden Pfad

  • Zielfarbbasis jedes Pfades

  • Dynamische Zielkoeffizientbereiche der einzelnen Pfade

  • Inhaltstyp (Grafiken oder Videos) jedes Pfads

  • Gamma-Anstieg der einzelnen Pfade

Führen Sie die folgenden Schritte aus, um die Einschränkungen aus dem eingeschränkten VidPN zu extrahieren:

  • Rufen Sie zunächst die pfnGetTopology-Funktion auf, um einen Zeiger auf eine VidPN-Topologieschnittstelle abzurufen, die die eingeschränkte Topologie von VidPN darstellt.

  • Rufen Sie die Funktionen pfnAcquireFirstPathInfo und pfnAcquireNextPathInfo auf, um Informationen zu den einzelnen Pfaden in der VidPN-Topologie abzurufen. Informationen zu einem bestimmten Pfad (Quell-ID, Ziel-ID, Skalierungstransformation, Drehungstransformation, Zielfarbbasis usw.) sind in einer D3DKMDT_VIDPN_PRESENT_PATH-Struktur enthalten.

  • Übergeben Sie für jeden Pfad die Quell-ID des Pfads an die pfnAcquireSourceModeSet-Funktion, um die Quelle des Pfads abzurufen.

  • Rufen Sie die pfnAcquirePinnedModeInfo-Funktion auf, um zu bestimmen, welcher Modus (falls vorhanden) im Modussatz der Quelle angeheftet ist. Wenn der Modussatz der Quelle einen fixierten Modus hat, besteht wahrscheinlich keine Notwendigkeit, die verbleibenden Modi im Satz zu untersuchen. Wenn der Modussatz keinen fixierten Modus hat, untersuchen Sie die verbleibenden Modi im Satz durch Aufrufen von pfnAcquireFirstModeInfo und pfnAcquireNextModeInfo.

    Verwenden Sie ein ähnliches Verfahren, um die Zielmodussätze zu untersuchen und zu bestimmen, welche Zielmodussätze über angeheftete Modi verfügen.

Anpassen der Modussätze

Achten Sie beim Überprüfen der mit Quellen und Zielen in der einschränkenden VidPN-Topologie verknüpften Modussätze darauf, welche Modussätze fixierte Modi haben. Wenn ein Modussatz nicht über einen angehefteten Modus verfügt, bestimmen Sie, ob er angepasst werden muss. Ein Modussatz muss angepasst werden, wenn er Modi enthält, die nicht mit den Einschränkungen kofunktional sind, oder wenn verfügbare Modi fehlen, die mit den Einschränkungen kofunktional sind.

Für Videoinhalte mit angeschlossenen Monitoren müssen Sie auch die vom Monitor unterstützten Modi berücksichtigen. Auch wenn ein Video, das das Ziel auf dem Displayadapter darstellt, einen bestimmten Modus unterstützt (unter Berücksichtigung der Einschränkungen), sollten Sie diesen Modus nur im Modus des Ziels auflisten, wenn der angeschlossene Monitor auch den Modus unterstützt. Führen Sie die folgenden Schritte aus, um die von angeschlossenen Monitoren unterstützten Modi zu ermitteln:

Anpassen von Flags zur Skalierungsunterstützung

Bestimmen Sie für jeden Pfad in der eingeschränkten Topologie von VidPN, ob der Pfad über eine angeheftete Skalierungstransformation verfügt. Um diese Feststellung zu treffen, überprüfen Sie vpnPath.ContentTransformation.Scaling, wobei vpnPath die D3DKMDT_VIDPN_PRESENT_PATH-Struktur ist, die den Pfad darstellt. Wenn vpnPath.ContentTransformation.Scaling auf D3DKMDT_VPPS_IDENTITY, D3DKMDT_VPPS_CENTERED oder D3DKMDT_VPPS_STRETCHED festgelegt ist, dann wird die Skalierungstransformation für den Pfad fixiert. Andernfalls wird die Skalierungstransformation nicht angeheftet.

Wenn der Pfad keine fixierte Skalierungstransformation aufweist, ermitteln Sie, ob die Flags zur Skalierungsunterstützung des Pfads angepasst werden müssen. Die Support-Flags müssen angepasst werden, wenn sie Unterstützung für eine Skalierungsart anzeigen, die nicht mit den Einschränkungen kofunktional ist, oder wenn sie keine Unterstützung für eine Skalierungsart anzeigen, die mit den Einschränkungen kofunktional ist. Um die Flags zur Skalierungsunterstützung zu ändern, legen Sie die Member der D3DKMDT_VIDPN_PRESENT_PATH_SCALING_SUPPORT-Struktur fest, die die Flags enthält.

Anpassen der Flags zur Drehungsunterstützung

Das Anpassen der Flags für die Drehungsunterstützung eines Pfads ähnelt dem Anpassen der Flags zur Skalierungsunterstützung eines Pfads. Unter der Annahme, dass vpnPath eine D3DKMDT_VIDPN_PRESENT_PATH-Struktur ist. Wenn vpnPath.ContentTransformation.Rotation auf D3DKMDT_VPPR_IDENTITY, D3DKMDT_VPPR_ROTATE90, D3DKMDT_VPPR_ROTATE180 oder D3DKMDT_VPPR_ROTATE270 festgelegt ist, dann wird die Drehungstransformation für den Pfad fixiert. Andernfalls wird die Drehungstransformation nicht angeheftet. Die Flags zur Drehungsunterstützung befinden sich in vpnPath.ContentTransformation.RotationSupport.

Melden von Multisamplingmethoden

Wenn der Anzeigeadapter über einen oder mehrere Videoausgabecodecs verfügt, die Antialiasing durch Multisampling unterstützen, müssen Sie für jede Quelle mit fixiertem Modus die verfügbaren Multisamplingmethoden (unter Berücksichtigung der Einschränkungen) angeben. Führen Sie die folgenden Schritte aus, um die verfügbaren Multisamplingmethoden zu melden:

Die D3DDDI_MULTISAMPLINGMETHOD-Struktur verfügt über zwei Mitglieder, die Sie festlegen müssen, die eine Multisampling-Methode kennzeichnen. Das NumSamples-Mitglied gibt die Anzahl der abgetasteten Subpixel an. Das NumQualityLevels-Mitglied gibt die Anzahl der Qualitätsstufen an, auf denen die Methode ausgeführt werden kann. Sie können beliebig viele Qualitätsstufen angeben, solange jede Stufenerhöhung die Qualität des dargestellten Bildes merklich verbessert.

Enumerations-Pivots

Wie zuvor beschrieben muss DxgkDdiEnumVidPnCofuncModality Modussätze erstellen, die mit dem im hConstrainingVidPn-Parameter übergebenen VidPN kofunktional sind. In einigen Fällen muss DxgkDdiEnumVidPnCofuncModality sein Verhalten entsprechend den in den Parametern EnumPivotType und EnumPivot übergebenen zusätzlichen Informationen (einem Enumerationspivot) erweitern.

Der Enumerationspivot kann einer der folgenden sein:

  • Der Modussatz einer bestimmten Video Present-Quelle

  • Der Modussatz eines bestimmten Video Present-Ziels

  • Die Skalierungstransformation eines bestimmten vorhandenen VidPN-Pfads

  • Die Drehungstransformation eines bestimmten vorhandenen VidPN-Pfads

Wenn es sich bei dem Enumerationspivot um einen Modussatz handelt, muss DxgkDdkEnumVidPnCofuncModality diesen Modus unverändert lassen. Wenn es sich bei dem Enumerationspivot um die Skalierungstransformation (Drehung) eines Pfads handelt, darf DxgkDdiEnumVidPnCofuncModality die Flags zur Skalierungsunterstützung (Drehung) für diesen Pfad nicht ändern.