Freigeben über


Unterstützung des adapterübergreifenden Ressourcenscans (CASO)

Leistung vor CASO (Pfad mit zwei Kopien)

Ab Windows 8.1 (WDDM 1.3) konnten D3D9- und DXGI-Anwendungen die Unterstützung für die darstellungsübergreifende Adapter für Konfigurationen mit mehreren Adaptern wie Hybridsystemen verwenden. Mit dieser Unterstützung erfolgt das Rendern auf einem Renderadapter (in der Regel die diskrete GPU), und dann werden zwei Kopien durchgeführt, um den Inhalt an den Grafikkarte (in der Regel die integrierte GPU) zum Scannen auf die Anzeige zu übertragen.

  • Kopieren Sie 1 aus der Renderadapterressource in eine adapterübergreifende Ressource.
  • Kopieren Sie 2 aus der adapterübergreifenden Ressource in die Anzeigeadapterressource.

Diese Kopien können die Leistung von Apps einschränken, insbesondere für Apps, die für niedrige Latenz optimiert sind.

Verwenden von CASO zum Optimieren des Flip-Präsentationsmodells (One-Copy-Pfad)

Windows Server 2022 (WDDM 2.9) und höhere Treiber können die Unterstützung für eine entsprechende adapterübergreifende Ressourcenebene deklarieren, sodass der Präsentationsstapel des Systems adapterübergreifende Präsentationen optimieren kann. Treiber müssen die Unterstützung für dieses Feature basierend auf ihrer eigenen Adapterfunktion deklarieren, unabhängig von der Gerätekonfiguration, sodass der Featurewert über alle anwendbaren Hardwarekonfigurationen skaliert wird. Diese Skalierung umfasst, ist aber nicht darauf beschränkt, ein einzelnes GPU-Gerät mit dynamischem Anfügen anderer externer GPUs.

Wenn der Grafikkarte CASO unterstützt, führt das System nur die erste Kopie von der Renderadapteroberfläche auf die adapterübergreifende Oberfläche durch und scannt dann direkt von der adapterübergreifenden Oberfläche. Dieses Feature führt zu weniger Verarbeitung, Bandbreite, Leistung und Latenz.

Das CASO-Feature wird für die DXGI-Runtime für das Flip-Präsentationsmodell implementiert.

DDI-Änderungen und Ergänzungen für CASO

Angeben der Ebenenunterstützung für adapterübergreifende Ressourcen

DXGI implementiert drei Ebenen der Unterstützung für adapterübergreifende Ressourcen:

  1. Kopieren in und aus adapterübergreifenden Ressourcen (niedrigste Ebene)
  2. Texturierung aus adapterübergreifenden Ressourcen
  3. Scannen von adapterübergreifenden Ressourcen (höchste Ebene)

Jede höhere Supportebene muss die Unterstützung der darunter liegenden Ebenen garantieren. Um beispielsweise Unterstützung für das Scannen von adapterübergreifenden Ressourcen in Anspruch zu nehmen, muss der Treiber auch Texturierung und Kopieren unterstützen.

Treiber deklarieren unterstützung für jede Ebene, indem sie die folgenden DXGK_VIDMMCAPS Bitfeldwerte in DXGK_DRIVERCAPS festlegen. MemoryManagementCaps:

Tarif Bedeutung der Ebene DXGK_VIDMMCAPS Wert
Ebene 1 Kopierunterstützung: Kopieren in und aus adapterübergreifenden Ressourcen CrossAdapterResource (Verfügbar gemacht im Benutzermodus durch Grafikkernel über das SupportCrossAdapterResource-Bit in D3DKMT_WDDM_1_3_CAPS
Ebene 2 Texturunterstützung: Textur aus adapterübergreifenden Ressourcen) CrossAdapterResourceTexture (umfasst Unterstützung für Shaderressourcenansicht, ungeordnete Zugriffsansicht und Renderziel)
Ebene 3 CASO-Unterstützung: Scannen aus adapterübergreifenden Ressourcen CrossAdapterResourceScanout

Der Grafikkern schlägt den Start des Adapters fehl, wenn die Unterstützung für die drei Ebenen nicht in einer übergeordneten Weise angegeben wird. Beispielsweise muss CrossAdapterResource festgelegt werden, wenn CrossAdapterResourceTexture festgelegt ist.

Supportanforderungen für Stufe 1

Adapterübergreifende Ressourcen sind weiterhin identisch, wie sie für die WDDM 1.3 Tier 1-Kopierunterstützung verwendet werden.

Supportanforderungen für Stufe 2

Die Anforderungen ähneln der CrossAdapterRowMajorTextureTextureSupported-Funktion (Cap) des D3D12-Benutzermodustreibers. Das heißt, das Gerät unterstützt Shaderressourcenansichten, ungeordnete Zugriffsansichten und Renderzielansichten von adapterübergreifenden Zeilen-Haupttexturen. Obwohl crossAdapterRowMajorTextureSupported von D3D12 die Unterstützung aller relevanten Texturformate erfordert, erfordert diese Obergrenze der Ebene 2 jedoch nur Unterstützung für die DisplayScanOut-Formate , die in den Anforderungen der Stufe 3-Unterstützung aufgeführt sind, mindestens.

Da die D3D12-Obergrenze eine Obermenge dieser Stufe 2-Obergrenze ist, überprüft D3D12CreateDevice auch, ob die CrossAdapterResourceTexture-Obergrenze des Kerneltreibers festgelegt ist, wenn die CrossAdapterRowMajorTextureSupported-Obergrenze festgelegt ist, und schlägt die Geräteerstellung fehl, wenn dies nicht der Fall ist.

Supportanforderungen für Stufe 3

Das System muss in der Lage sein, die vom Treiber in DXGK_FLIPCAPS angegebenen unterstützten Flippingfunktionen für adapterübergreifende Ressourcen mit den folgenden Mindestspezifikationen auszuführen:

  • Eine adapterübergreifende primäre Puffergröße von 1920 x 1080 oder kleiner
  • Ein Pufferpixelformat eines der unterstützten DisplayScanOut-Formate . Ab Windows 10 Version 20H1 sind diese Formate:
    • DXGI_FORMAT_R16G16B16A16_FLOAT
    • DXGI_FORMAT_R10G10B10A2_UNORM
    • DXGI_FORMAT_R8G8B8A8_UNORM
    • DXGI_FORMAT_R8G8B8A8_UNORM_SRGB
    • DXGI_FORMAT_B8G8R8A8_UNORM
    • DXGI_FORMAT_B8G8R8A8_UNORM_SRGB

Wenn der Treiber das Scannen adapterübergreifender Ressourcen weiterer Texturformate unterstützt, muss er auch die Texturierung aus diesen Formaten gemäß den Anforderungen für die Ebenenunterstützung unterstützen.

Hinweis

Die DXGI-Runtime fragt den Treiber nach seiner CrossAdapterResourceScanout-Unterstützung ab . Falls unterstützt, wird der Präsentationsstapel im 1-Kopierpfad nach unten ausgeführt. Daher sind Treiber erforderlich, die Unterstützung für CrossAdapterResourceScanout deklarieren, um die DXGKDDI_CHECKMULTIPLANEOVERLAYSUPPORT3 DDI zu unterstützen. Darüber hinaus müssen alle relevanten präsentationsbezogenen DDIs für adapterübergreifende Vorwahlen der oben genannten Mindestspezifikationen unterstützt werden. Einige Beispiele sind pfnCreateResource, pfnCheckMultiplaneOverlaySupport und pfnPresentMultiplaneOverlay/pfnPresent1. Weitere Informationen finden Sie unter Unterstützung von Mehrschichtüberlagerungen. Weitere Informationen zum Ausfall von CASO finden Sie unter Treiber-DDIs für die Präsentationsoptimierung.

Beide Ebenen verfügen über begleitende HLK-Tests zur Überprüfung.

Unterstützung des StaticCheck-Flags für DXGKDDI_CHECKMULTIPLANEOVERLAYSUPPORT3

Das StaticCheck-Flag wurde DXGK_MULTIPLANE_OVERLAY_FLAGS in WDDM 3.0 hinzugefügt. Dieses Flag erweitert die Verwendung der DXGKDDI_CHECKMULTIPLANEOVERLAYSUPPORT3 DDI für CASO-Unterstützung. Dieses Flag ermöglicht es DXGKDDI_CHECKMULTIPLANEOVERLAYSUPPORT3 , einen Treiber abzufragen, um zu bestimmen, ob die mit dem StaticCheck-Flag markierte Ebene zum Scannen geeignet ist. Dieser Aufruf ist ein einmaliger Anruf und sollte sich nicht auf das tatsächliche Präsentationsverhalten auswirken. Daher sollten Treiber, die vorhandene Informationen aus DXGKDDI_CHECKMULTIPLANEOVERLAYSUPPORT3 zwischenspeichern, die Informationen aus DDI-Aufrufen nicht mit einer StaticCheck-Ebene einschließen. Sie sollten die Unterstützungsermittlung einfach eigenständig oder statisch durchführen.

DXGKDDI_CHECKMULTIPLANEOVERLAYSUPPORT3 mit dem StaticCheck-Flag ist garantiert:

  • Haben Sie genau eine Ebene mit dem Flag markiert
  • Keine Informationen der PostComposition-Ebene enthalten

Ein Aufruf von DXGKDDI_CHECKMULTIPLANEOVERLAYSUPPORT3 mit dem StaticCheck-Flagsatz wird vom App-Prozess von DXGI während der Puffererstellung verwendet, z. B. während der Swapchainerstellung oder ResizeBuffers, um zu ermitteln, ob CASO für die aktuelle Hardwarekonfiguration unterstützt wird.

HybridIntegrated-Sonderfall

Es ist wichtig zu beachten, dass HybridIntegrated-Treiber so konzipiert sind, dass sie Scan-Out-Unterstützung der Ebene 3 haben. Ab WDDM 3.0 sind HybridIntegrated-Treiber erforderlich, um Unterstützung für CrossAdapterResourceScanout zu deklarieren. Ein HLK-Test überprüft diese Anforderung.

Vorhandene Hybrid-Obergrenzen können in Zukunft als veraltet betrachtet werden. Daher ist es wichtig, dass die CrossAdapterResourceScanout-Kappe entkoppelt ist, um eine größere Flexibilität für die weitere Entwicklung in diesem Bereich zu ermöglichen. Daher können auch Treiber, die nicht HybridIntegrated sind, die adapterübergreifende Unterstützungsebene entsprechend festlegen.

Änderungen am Grafikkernkern

Ab WDDM 2.9 wurden für die unterstützung adapterübergreifender Ressourcen die folgenden Ergänzungen/Änderungen vorgenommen:

Beispiel für die Verwendung:

D3DKMT_CROSSADAPTERRESOURCE_SUPPORT KernelSupport = {};
D3DKMT_QUERYADAPTERINFO QueryAdapterInfo;
QueryAdapterInfo.hAdapter = m_hAdapter;
QueryAdapterInfo.Type = KMTQAITYPE_CROSSADAPTERRESOURCE_SUPPORT;
QueryAdapterInfo.pPrivateDriverData = &KernelSupport;
QueryAdapterInfo.PrivateDriverDataSize = sizeof( KernelSupport );
VERIFY_SUCCEEDED(D3DKMTQueryAdapterInfo(&QueryAdapterInfo));

// Use KernelSupport.SupportTier as appropriate

Treiber-DDIs für die Präsentationsoptimierung

Treiber verwenden die folgenden DDIs, um anzugeben, ob adapterübergreifendes Scannen unterstützt wird:

  • DXGK_VIDMMCAPS::CrossAdapterResourceScanout-Cap

    Das System fragt diese Obergrenze frühzeitig ab, um zu ermitteln, ob der Treiber die CASO-Funktion unterstützt.

    Wenn der Treiber CASO unterstützt, fährt DXGI mit dem CASO-Pfad mit einer Kopie fort. Andernfalls greift DXGI auf den Pfad mit zwei Kopien zurück.

  • pfnCreateResource DDI

    Im CASO-Pfad mit 1 Kopie erstellt DXGI die adapterübergreifende Ressource als primäre Ressource auf dem Grafikkarte, über pfnCreateResource. Der Treiber sollte basierend auf den Ressourceneigenschaften auswerten, ob er aus dieser Ressource ausscannen kann.

    Wenn der Treiber das Scannen basierend auf den Ressourceneigenschaften unterstützt, fährt DXGI mit dem CASO-Pfad mit einer Kopie fort. Andernfalls sollte sich der Treiber von Scan-Outs abmelden, indem er DXGI_DDI_PRIMARY_DRIVER_FLAG_NO_SCANOUT zurückgibt. In diesem Fall greift DXGI auf den Pfad mit zwei Kopien zurück. Dieser Fallback sollte nur auftreten, wenn die Ressourceneigenschaften über die Mindestanforderungen hinausgehen, die unter Supportanforderungen der Stufe 3 aufgeführt sind.

  • pfnCheckMultiplaneOverlaySupport DDI

    Je nach aktuellem Verhalten ruft der Windows-Desktop-Manager (DWM) den pfnCheckMultiplaneOverlaySupport DDI des Anzeigetreibers auf, um genau zu bestimmen, ob die primäre Oberfläche gescannt werden kann. Wenn vom Treiber unterstützt wird, wird der Scan-Out durchgeführt. Andernfalls wechselt DWM zum DWM-Kompositionsmodus.

    Beachten Sie, dass DWM-zusammengestellte Geschenke wahrscheinlich weniger wünschenswert sind als Independent Flip (iFlip) über den Pfad mit zwei Kopien oder iFlip über den CASO-Pfad mit einer Kopie. Daher kann es häufige Anzeigeszenarien geben, in denen die Präsentationsbandbreite begrenzt ist, z. B. rotierte oder mehrere Displays, bei denen Treiber die pfnCheckMultiplaneOverlaySupport-Unterstützung in DWM konsistent versagen, was wahrscheinlich zu einer schlechteren Erfahrung als der Pfad mit zwei Kopien führt.

    Um die negative Fallbackerfahrung zu verringern, ruft DXGI pfnCheckMultiplaneOverlaySupport während der Puffererstellung mit der cross-adapter-Ressource als Ebene auf, die mit dem StaticCheck-Flag gekennzeichnet ist, um mit hoher Genauigkeit zu überprüfen, ob der Treiber angesichts der vorhandenen bekannten Bandbreitenmerkmale ein Scan-Out durchführen kann. Falls unterstützt, wird DXGI mit dem CASO-Pfad mit einer Kopie fortgesetzt. Andernfalls wird auf den Pfad mit zwei Kopien zurückverknen.

HLK-Tests

Eine WDDM 3.0 HLK-Anforderung und -Funktion mit den entsprechenden HLK-Tests wurden hinzugefügt. Diese Anforderung ist an die DXGK_VIDMMCAPS Unterstützung gebunden, die Treiber deklarieren können. insbesondere CrossAdapterResourceTexture und CrossAdapterResourceScanout.

CrossAdapterResourceTexture

Ein HLK-Test wurde hinzugefügt, um SRV-Vorgänge (Shader Resource View) für adapterübergreifende Ressourcen zu überprüfen.

  • Für D3D12 wurde der vorhandene HLK-Test "D3D12 – Cross Adapter Resource DX12" für Device.Graphics.AdapterRender.D3D12Core.CoreRequirement hinzugefügt. insbesondere der Testfall CrossAdapterResource::CrossAdapterTextureSRV.

    Diesem HLK-Testfall wurde die Überprüfung der Supersetbeziehung zwischen der KmD-Obergrenze CrossAdapterResourceTextureTexture und der D3D12 UMD CrossAdapterRowMajorTextureSupported-Obergrenze hinzugefügt. In ähnlicher Weise wurde logik in D3D12CreateDevice hinzugefügt, um sicherzustellen, dass bei Festlegung der UMD-Obergrenze auch die Kernelebene 2-Treiberkappe festgelegt werden muss, und wenn dies nicht der Fall ist, schlägt die Geräteerstellung fehl.

  • Für D3D11 wurde der obige Testfall dem HLK-Test für Device.Graphics.WDDM30.Render.CrossAdapterScanOut hinzugefügt. insbesondere D3DConf_11_CrossAdapterResource::CrossAdapterResourceSRV.

Adapterübergreifender Ressourcenscan

Die folgenden HLK-Tests wurden hinzugefügt:

  • Device.Graphics.WDDM30.Render.CrossAdapterScanOut

    • Ein HLK-Test, um zu überprüfen, ob Treiber adapterübergreifende primäre Ressourcen erfolgreich erstellen können, ohne das Auscheckverhalten über das DXGI_DDI_PRIMARY_DRIVER_FLAG_NO_SCANOUT-Flag zu deaktivieren.
    • Ein HLK-Test, um zu überprüfen, ob diese Treiber die DXGKDDI_CHECKMULTIPLANEOVERLAYSUPPORT3 DDI unterstützen.
    • Ein manueller HLK-Test für einen Tester, um manuell zu überprüfen, ob:
      • Die gescannte adapterübergreifende Oberfläche ist frei von visuellen Beschädigungen/Artefakten oder unerwartetem Einreißen
      • Die adapterübergreifende Oberfläche wird ohne vorherige interne Transformationen oder Kopien direkt herausgescannt.

    Diese End-to-End-Tests überprüfen natürlich auch, ob die CheckMultiplaneOverlaySupport und Present DDIs für adapterübergreifende Ressourcen unterstützt werden. Die manuelle Test-App hat bestimmte Hardwareanforderungen, z. B. einen Monitor mit hoher Auflösung und hoher Aktualisierungsrate. Weitere Informationen finden Sie im Referenzdokument zum Test.

  • Device.Graphics.WDDM30.Render.CoreRequirement

    • Ein HLK-Test, um zu überprüfen, ob Treiber, die hybridIntegrierte Obergrenze deklarieren, auch die CrossAdapterResourceScanout-Obergrenze deklarieren.
  • System.Fundamentals.Graphics.HybridGraphics.MultiGPU

    • Ein systembasierter HLK-Test, mit dem OEMs diese Tests auf ihren Hybridgeräten ausführen können, die den DXGI-1-Kopierpfad im Rahmen der End-to-End-Systemvalidierung nutzen können.