Auflisten von kofunktionellen VidPN-Quell- und Zielmodi

In diesem Thema wird beschrieben, wie der VidPN-Manager (Video Present Network) und der Anzeige-Miniporttreiber zusammenarbeiten, um Modi aufzulisten, die für Videoquellen und -ziele verfügbar sind. Bevor Sie dieses Material lesen, sollten Sie mit dem Material in den folgenden Themen vertraut sein:

Von Zeit zu Zeit fordert der VidPN-Manager den Display-Miniporttreiber auf, die Modi aufzulisten, die in den vorhandenen Videoquellen und Zielen einer Grafikkarte verfügbar sind. In der Regel weist die Anforderung das folgende Muster auf:

  1. Der VidPN-Manager erstellt oder ruft einen VidPN ab, der über Modi verfügt, die an einige, aber nicht alle seiner Quellen und Ziele angeheftet sind.

  2. Der VidPN-Manager ruft DxgkDdiIsSupportedVidPn auf, um zu bestimmen, ob der VidPN erweitert werden kann, um eine funktionale VidPN zu bilden, die auf der Grafikkarte unterstützt wird. Das heißt, es fragt, 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 angeheftet sind.

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

DxgkDdiEnumVidPnCofuncModality muss wie folgt vorgehen:

  • Überprüfen Sie die einschränkende VidPN.

  • Passen Sie für jede Quelle und jedes Ziel, die keinen angehefteten Modus haben, den Modussatz so an, dass es sich um den größtmöglichen Modussatz handelt, der mit den Einschränkungen kofunktional ist.

  • Passen Sie für jeden Pfad, der nicht über eine angeheftete Skalierungstransformation verfügt, die Skalierungsunterstützungsflags so an, dass sie mit den Einschränkungen kofunktional sind.

  • Passen Sie für jeden Pfad, der keine angeheftete Drehungstransformation aufweist, die Drehunterstützungsflags so an, dass sie mit den Einschränkungen kofunktional sind.

  • Melden Sie für jede Quelle, die über einen angehefteten Modus verfügt, die Multisamplingmethoden, die für diese Quelle verfügbar sind.

Die folgenden Absätze enthalten Details dazu, wie die einzelnen Aufgaben in der vorherigen Aufzählung ausgeführt werden.

Überprüfen des einschränkenden VidPN

Die folgenden Eigenschaften des einschränkenden VidPN sind die Einschränkungen, die von DxgkDdiEnumVidPnCofuncModality berücksichtigt werden müssen.

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

  • Angeheftete Modi

  • Skalierungs-, Skalierungsunterstützung, Rotations- und Rotationsunterstützung für jeden Pfad

  • Zielfarbbasis der einzelnen Pfade

  • Dynamische Bereiche des Zielfarbkoeffizienten jedes Pfads

  • Inhaltstyp (Grafiken oder Video) der einzelnen Pfade

  • Gamma-Rampe jedes Pfads

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

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

  • Rufen Sie die Funktionen pfnAcquireFirstPathInfo und pfnAcquireNextPathInfo auf, um Informationen zu den einzelnen Pfaden in der einschränkenden VidPN-Topologie abzurufen. Informationen zu einem bestimmten Pfad (Quell-ID, Ziel-ID, Skalierungstransformation, Rotationstransformation, 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 über einen angehefteten Modus verfügt, ist es wahrscheinlich nicht erforderlich, die verbleibenden Modi in der Gruppe zu untersuchen. Wenn der Modussatz keinen angehefteten Modus aufweist, überprüfen Sie die verbleibenden Modi in der Gruppe, indem Sie pfnAcquireFirstModeInfo und pfnAcquireNextModeInfo aufrufen.

    Verwenden Sie ein ähnliches Verfahren, um die Zielmodussätze zu untersuchen und zu ermitteln, welche Zielmodussätze angeheftete Modi aufweisen.

Anpassen von Modussätzen

Wenn Sie die Modussätze überprüfen, die Quellen und Zielen in der einschränkenden VidPN-Topologie zugeordnet sind, beachten Sie, welche Modussätze angeheftete Modi aufweisen. Wenn ein Modussatz keinen angehefteten Modus aufweist, 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 keine verfügbaren Modi vorhanden sind, die mit den Einschränkungen kofunktional sind.

Für Video-Present-Ziele, die über verbundene Monitore verfügen, müssen Sie auch den Satz von Modi berücksichtigen, die vom Monitor unterstützt werden. Selbst wenn ein auf der Grafikkarte vorhandenes Videoziel einen bestimmten Modus (unter Berücksichtigung der Einschränkungen) unterstützt, sollten Sie diesen Modus nur in der Einstellung des Zielmodus auflisten, wenn der verbundene Monitor den Modus ebenfalls unterstützt. Führen Sie die folgenden Schritte aus, um die vom verbundenen Monitor unterstützten Modi zu ermitteln:

Anpassen von Skalierungsunterstützungsflags

Bestimmen Sie für jeden Pfad in der einschränkenden VidPN-Topologie, ob der Pfad über eine angeheftete Skalierungstransformation verfügt. Um diese Bestimmung 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 ist auf D3DKMDT_VPPS_IDENTITY, D3DKMDT_VPPS_CENTERED oder D3DKMDT_VPPS_STRETCHED festgelegt. Anschließend wird die Skalierungstransformation für den Pfad angeheftet. Andernfalls wird die Skalierungstransformation nicht angeheftet.

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

Anpassen von Unterstützungsflags für Die Drehung

Das Anpassen der Unterstützungsflags für die Drehung eines Pfads ähnelt dem Anpassen der Skalierungsunterstützungsflags eines Pfads. Angenommen , vpnPath ist eine D3DKMDT_VIDPN_PRESENT_PATH-Struktur. Wenn vpnPath. ContentTransformation.Rotation wird auf D3DKMDT_VPPR_IDENTITY, D3DKMDT_VPPR_ROTATE90, D3DKMDT_VPPR_ROTATE180 oder D3DKMDT_VPPR_ROTATE270 festgelegt. Anschließend wird die Drehungstransformation für den Pfad angeheftet. Andernfalls wird die Drehungstransformation nicht angeheftet. Die Drehungsunterstützungsflags befinden sich in vpnPath. ContentTransformation.RotationSupport.

Melden von Multisamplingmethoden

Wenn die Grafikkarte über einen oder mehrere Videoausgabecodecs verfügt, die ein Antialiasing durch Multisampling ausführen können, müssen Sie die verfügbaren Multisamplingmethoden (unter Berücksichtigung der Einschränkungen) für jede Quelle melden, die über einen angehefteten Modus verfügt. Führen Sie die folgenden Schritte aus, um die verfügbaren Multisamplingmethoden zu melden:

Die D3DDDI_MULTISAMPLINGMETHOD-Struktur verfügt über zwei Member, die Sie festlegen müssen, die eine Multisamplingmethode charakterisieren. Der NumSamples-Member gibt die Anzahl der Subpixel an, die abgetastet werden. Der NumQualityLevels-Member gibt die Anzahl der Qualitätsstufen an, auf denen die Methode ausgeführt werden kann. Sie können eine beliebige Anzahl von Qualitätsstufen angeben, solange jede Erhöhung der Stufe die Qualität des dargestellten Bilds spürbar 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 das Verhalten entsprechend zusätzlicher Informationen (enumerations pivot) erweitern, die in den Parametern EnumPivotType und EnumPivot übergeben werden.

Der Enumerations pivot kann einer der folgenden Sein:

  • Der Modussatz einer bestimmten Videoquelle

  • Der Modussatz eines bestimmten Videogegendziels

  • Die Skalierungstransformation eines bestimmten VidPN-Pfads

  • Die Rotationstransformation eines bestimmten VidPN-Gegenwartspfads

Wenn der Enumerations pivot ein Modussatz ist, muss DxgkDdkEnumVidPnCofuncModality diesen Modus unverändert lassen. Wenn der Enumerations pivot die Skalierungstransformation (Rotation) eines Pfads ist, darf DxgkDdiEnumVidPnCofuncModality die Skalierungs-Unterstützungsflags (Drehung) für diesen Pfad nicht ändern.