Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym artykule opisano, jak sterownik WDDM może obsługiwać skanowanie zasobów między adapterami (CASO), zmniejszając liczbę kopii między procesorami GPU i zasobami między kartami sieciowymi z dwóch do jednego. Ta funkcja jest dostępna w systemach Windows Server 2022 i Windows 11.
Wydajność przed CASO (ścieżka dwóch kopii)
Począwszy od systemu Windows 8.1 (WDDM 1.3), aplikacje D3D9 i DXGI mogły korzystać z obsługi prezentacji między adapterami w konfiguracjach wieloadapterowych, takich jak systemy hybrydowe . Dzięki tej obsłudze renderowanie odbywa się na adapterze renderującym (zazwyczaj dyskretnej karcie GPU), a następnie wykonywane są dwie kopie, aby przenieść zawartość do adaptera wyświetlania (zazwyczaj zintegrowanej karty GPU) do przesyłania na wyświetlacz.
- Kopia 1 jest z zasobu adaptera renderowania do zasobu między-adapterowego.
- Kopia 2 pochodzi z zasobu adaptera międzykartowego do zasobu adaptera wyświetlacza.
Te kopie mogą ograniczyć wydajność aplikacji, zwłaszcza w przypadku aplikacji zoptymalizowanych pod kątem małych opóźnień.
Optymalizowanie modelu prezentacji flip przy użyciu CASO (ścieżka jednokopijna)
Windows Server 2022 (WDDM 2.9) i nowsze sterowniki mogą zadeklarować obsługę odpowiedniej warstwy zasobów krzyżujących adaptery, co pozwala stosowi prezentacji systemu na optymalizowanie prezentacji krzyżujących adaptery. Sterowniki muszą zadeklarować obsługę tej funkcji na podstawie własnych możliwości adapterów, niezależnie od konfiguracji urządzenia, tak aby wartość funkcji skalowała się we wszystkich odpowiednich konfiguracjach sprzętu. To skalowanie obejmuje, ale nie ogranicza się do jednego urządzenia GPU z dynamicznym dołączaniem innych zewnętrznych procesorów GPU.
Jeśli karta wyświetlania obsługuje funkcję CASO, system wykonuje tylko pierwszą kopię z powierzchni karty graficznej renderującej do powierzchni karty graficznej krzyżowej, a następnie skanuje bezpośrednio z powierzchni karty graficznej krzyżowej. Ta funkcja powoduje zmniejszenie przetwarzania, przepustowości, zasilania i opóźnienia.
Funkcja CASO jest implementowana w środowisku uruchomieniowym DXGI dla modelu prezentacji flip.
Zmiany i dodatki DDI dla CASO
Wskazuje wielopoziomową obsługę dla zasobów między adapterami
Usługa DXGI implementuje trzy warstwy obsługi zasobów między adapterami:
- Kopiowanie do i z zasobów między-adapterowych (najniższy poziom)
- Teksturowanie z zasobów międzyadapterowych
- Skanowanie zasobów między kartami (najwyższa warstwa)
Każda wyższa warstwa pomocy technicznej musi zagwarantować obsługę warstw poniżej. Aby na przykład zgłosić obsługę wyświetlania zasobów między adapterami graficznymi, sterownik musi również obsługiwać teksturowanie i kopiowanie.
Sterowniki deklarują obsługę każdej warstwy, ustawiając następujące wartości pól bitowych DXGK_VIDMMCAPS w DXGK_DRIVERCAPS.MemoryManagementCaps:
| Warstwa | Znaczenie warstwy | Wartość DXGK_VIDMMCAPS |
|---|---|---|
| Poziom 1 | Obsługa kopiowania: kopiowanie do i z zasobów między kartami | CrossAdapterResource (udostępnione w trybie użytkownika przez jądro grafiki za pośrednictwem bitu SupportCrossAdapterResource w D3DKMT_WDDM_1_3_CAPS |
| Poziom 2 | Obsługa tekstur: tekstura z zasobów między adapterami) | CrossAdapterResourceTexture (obejmuje obsługę widoku zasobów cieniowania, widoku dostępu nieuporządkowanego i elementu docelowego renderowania) |
| Poziom 3 | Obsługa CASO: skanowanie z zasobów międzyadapterowych | CrossAdapterResourceScanout |
Jądro grafiki zawodzi przy uruchomieniu adaptera, jeśli nie wskazuje obsługi w sposób nadrzędny dla trzech poziomów. Na przykład CrossAdapterResource należy ustawić, jeśli CrossAdapterResourceTexture jest ustawione.
Wymagania dotyczące obsługi warstwy 1
Zasoby między-adapterowe są nadal zdefiniowane tak samo, jak w przypadku WDDM 1.3 poziomu 1 obsługa kopiowania danych.
Wymagania dotyczące obsługi warstwy 2
Wymagania są podobne do możliwości sterownika trybu użytkownika D3D12 CrossAdapterRowMajorTextureSupported; oznacza to, że urządzenie obsługuje widoki zasobów cieniowania, widoki dostępu nieuporządkowanego oraz widoki celu renderowania tekstur z układem rzędów między adapterami. Jednak mimo że CrossAdapterRowMajorTextureSupport ed D3D12 wymaga obsługi wszystkich odpowiednich formatów tekstur, ten limit warstwy 2 wymaga obsługi tylko w formatach DisplayScanOut wymienionych w warstwie 3 wymagania dotyczące obsługi, co najmniej.
Ponieważ limit D3D12 jest nadzbiorem tego limitu warstwy 2, D3D12CreateDevice również sprawdza, czy limit CrossAdapterResourceTexture sterownika jądra jest ustawiony, jeśli jego limit CrossAdapterRowMajorTextureSupported jest ustawiony, i nie udaje się utworzyć urządzenia, jeśli nie jest.
Wymagania dotyczące obsługi warstwy 3
System musi mieć możliwość wykonywania obsługiwanych funkcji przerzucania, zgodnie z deklaracją sterownika w DXGK_FLIPCAPS, dla zasobów między adapterami następujących minimalnych specyfikacji:
- Podstawowy bufor adaptera o rozmiarze 1920 x 1080 lub mniejszym
- Format pikseli buforu dowolnego z obsługiwanych formatów DisplayScanOut. Od systemu Windows 10 w wersji 20H1 następujące formaty to:
- 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
Jeśli sterownik obsługuje skanowanie zasobów międzyadapterowych z większej liczby formatów tekstur, musi również obsługiwać teksturyzację z tych formatów zgodnie z wymaganiami dotyczącymi poziomu obsługi.
Uwaga
Środowisko uruchomieniowe DXGI odpytuje sterownik pod kątem obsługi CrossAdapterResourceScanout. Jeśli jest to obsługiwane, stos prezentacji podąża ścieżką jednej kopii. W związku z tym sterowniki, które deklarują obsługę CrossAdapterResourceScanout, muszą obsługiwać DXGKDDI_CHECKMULTIPLANEOVERLAYSUPPORT3 DDI. Ponadto musi również obsługiwać wszystkie odpowiednie identyfikatory DDI związane z prezentacją dla pierwotnych urządzeń wieloadapterowych zgodnych z powyższymi minimalnymi specyfikacjami. Oto kilka przykładów: pfnCreateResource, pfnCheckMultiplaneOverlaySupporti pfnPresentMultiplaneOverlay/pfnPresent1. Aby uzyskać więcej informacji, zobacz sekcję obsługa nakładek wielopłaszczyznowych. Aby uzyskać więcej informacji o wypadnięciu z CASO, zobacz sterowniki DDIs do optymalizacji prezentacji.
Obu tym poziomom towarzyszą testy HLK do weryfikacji.
Obsługa flagi StaticCheck dla DXGKDDI_CHECKMULTIPLANEOVERLAYSUPPORT3
Flaga StaticCheck została dodana do DXGK_MULTIPLANE_OVERLAY_FLAGS w WDDM 3.0. Ta flaga rozszerza użycie DXGKDDI_CHECKMULTIPLANEOVERLAYSUPPORT3 DDI na potrzeby obsługi CASO. Ta flaga umożliwia DXGKDDI_CHECKMULTIPLANEOVERLAYSUPPORT3 wykonywanie zapytań do sterownika w celu określenia, czy płaszczyzna oznaczona flagą StaticCheck może być wyprowadzana na ekran. To wywołanie jest jednorazowe i nie powinno mieć wpływu na faktyczne zachowanie prezentacji. W związku z tym, sterowniki, które wykonują buforowanie aktualnych informacji z DXGKDDI_CHECKMULTIPLANEOVERLAYSUPPORT3, nie powinny uwzględniać informacji z wywołań DDI z płaszczyzną StaticCheck. Powinny po prostu przeprowadzić określenie wsparcia w sposób niezależny lub statyczny.
DXGKDDI_CHECKMULTIPLANEOVERLAYSUPPORT3 z ustawioną flagą StaticCheck gwarantuje:
- Mieć dokładnie jedną płaszczyznę oznaczoną flagą
- Nie zawiera żadnych informacji o płaszczyźnie PostComposition
Wywołanie DXGKDDI_CHECKMULTIPLANEOVERLAYSUPPORT3 z ustawioną flagą StaticCheck jest używane z procesu aplikacji DXGI podczas tworzenia buforu, na przykład podczas tworzenia łańcucha wymiany lub zmieniania rozmiaru buforów, w celu najlepszej próby ustalenia, czy CASO jest obsługiwane dla bieżącej konfiguracji sprzętu.
Przypadek specjalny hybridIntegrated
Należy pamiętać, że sterowniki HybridIntegrated są zaprojektowane tak, aby zapewniać obsługę skanowania na poziomie 3. Począwszy od wersji WDDM 3.0, sterowniki HybridIntegrated są wymagane do deklarowania obsługi CrossAdapterResourceScanout. Test HLK sprawdza to wymaganie.
Istniejące limity hybrydowe mogą być brane pod uwagę w celu wycofania w przyszłości. W związku z tym kluczowe jest, że CrossAdapterResourceScanout limit jest oddzielony, aby umożliwić większą elastyczność rozwoju w tej przestrzeni w przyszłości. W związku z tym nawet sterowniki, które nie są HybridIntegrated, mogą odpowiednio ustawić poziom obsługi między-adapterowej.
Zmiany jądra grafiki
Począwszy od programu WDDM 2.9, wprowadzono następujące dodatki/zmiany na potrzeby obsługi zasobów między adapterami:
Wartość KMTQAITYPE_CROSSADAPTERRESOURCE_SUPPORT została dodana do istniejącego wyliczenia KMTQUERYADAPTERINFOTYPE
Dodano strukturę D3DKMT_CROSSADAPTERRESOURCE_SUPPORT i wyliczenie D3DKMT_CROSSADAPTERRESOURCE_SUPPORT_TIER
Przykładowe użycie:
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
Identyfikatory DDI sterowników na potrzeby optymalizacji prezentacji
Sterowniki używają następujących DDI, aby wskazać, czy przesyłanie obrazu między adapterami jest obsługiwane.
DXGK_VIDMMCAPS::CrossAdapterResourceScanout cap
System odpytuje ten limit wcześnie, aby określić, czy sterownik obsługuje możliwości CASO.
Jeśli sterownik obsługuje funkcję CASO, DXGI kontynuuje jednokrotną ścieżkę CASO; w przeciwnym razie DXGI wraca do ścieżki dwukrotnego kopiowania.
-
Na jednej kopii ścieżki CASO DXGI tworzy zasób między adapterami jako podstawowy na karcie wyświetlania za pośrednictwem pfnCreateResource. Sterownik powinien ocenić na podstawie właściwości zasobu, czy może on przeprowadzić skanowanie z tego zasobu.
Jeśli sterownik obsługuje skanowanie w oparciu o właściwości zasobu, DXGI kontynuuje jednokopiową ścieżkę CASO. W przeciwnym razie sterownik powinien zrezygnować ze skanowania, zwracając DXGI_DDI_PRIMARY_DRIVER_FLAG_NO_SCANOUT. W takim przypadku DXGI wraca do ścieżki z dwiema kopiami. To zastępstwo powinno wystąpić tylko wtedy, gdy właściwości zasobu wykraczają poza minimalne wymagania wymienione w wymaganiach pomocy technicznej 3 poziomu .
pfnCheckMultiplaneOverlaySupport DDI
Zgodnie z bieżącym zachowaniem, Menedżer Pulpitu Windows (DWM) wywołuje funkcję pfnCheckMultiplaneOverlaySupport DDI, aby dokładnie określić, czy można przeprowadzić skanowanie powierzchni podstawowej. Jeżeli jest to obsługiwane przez sterownik, następuje skanowanie. W przeciwnym razie DWM wraca do trybu kompozycji DWM.
Prezenty składające się z dwM mogą być mniej pożądane niż Niezależne przerzucanie (iFlip) za pośrednictwem ścieżki dwukopię lub iFlip za pośrednictwem ścieżki CASO jednej kopii. W związku z tym mogą występować typowe scenariusze wyświetlania, w których pasmo prezentacji jest ograniczone, na przykład w przypadku obracanych lub wielu wyświetlaczy, gdzie sterowniki mogą ciągle nie spełniać wymagań obsługi pfnCheckMultiplaneOverlaySupport w ramach DWM, co prawdopodobnie skutkuje gorszym doświadczeniem niż w przypadku ścieżki dwóch kopii.
Aby wyeliminować negatywne środowisko rezerwowe, DXGI wywołuje pfnCheckMultiplaneOverlaySupport podczas tworzenia buforu z zasobem adaptera krzyżowego jako płaszczyzny oznaczonej flagą StaticCheck, aby sprawdzić z wysoką dokładnością, czy sterownik może wykonać skanowanie, biorąc pod uwagę istniejące znane cechy przepustowości. Jeśli to możliwe, DXGI kontynuuje ścieżkę z jedną kopią CASO; w przeciwnym razie wraca do ścieżki z dwiema kopiami.
Testowanie HLK
Dodano wymaganie i funkcję WDDM 3.0 HLK z odpowiednimi testami HLK. To wymaganie jest powiązane z obsługą DXGK_VIDMMCAPS, którą mogą zadeklarować kierowcy; w szczególności CrossAdapterResourceTexture i CrossAdapterResourceScanout.
CrossAdapterResourceTexture
Dodano test HLK w celu zweryfikowania operacji widoku zasobów cieniowania (SRV) na zasobach między adapterami.
W przypadku D3D12 test HLK o nazwie "D3D12 - Cross Adapter Resource DX12" dla Device.Graphics.AdapterRender.D3D12Core.CoreRequirement został rozszerzony; w szczególności o przypadek testowy CrossAdapterResource::CrossAdapterTextureSRV.
Do tego przypadku testowego HLK dodano weryfikację relacji nadzbioru między CrossAdapterResourceTexture KMD cap a D3D12 UMD CrossAdapterRowMajorTextureSupported cap. Podobnie, logika została dodana w D3D12CreateDevice, aby upewnić się, że jeśli jego funkcjonalność UMD jest ustawiona, to również funkcjonalność sterownika jądra poziomu 2 musi być ustawiona, a tworzenie urządzenia zakończy się niepowodzeniem, jeśli tak nie jest.
W przypadku D3D11 identyczny przypadek testowy został dodany do testu HLK dla elementu Device.Graphics.WDDM30.Render.CrossAdapterScanOut; w szczególności D3DConf_11_CrossAdapterResource::CrossAdapterResourceSRV.
Skanowanie zasobów między adapterami
Dodano następujące testy HLK:
Device.Graphics.WDDM30.Render.CrossAdapterScanOut
- Test HLK umożliwiający sprawdzenie, czy sterowniki mogą pomyślnie tworzyć zasoby podstawowe między kartami bez rezygnacji z zachowania skanowania za pośrednictwem flagi DXGI_DDI_PRIMARY_DRIVER_FLAG_NO_SCANOUT.
- Test HLK w celu sprawdzenia, czy te sterowniki obsługują DXGKDDI_CHECKMULTIPLANEOVERLAYSUPPORT3 DDI.
- Ręczny test HLK dla testera w celu ręcznego sprawdzenia, czy:
- Powierzchnia przeszukanego adaptera jest wolna od uszkodzeń wizualnych/artefaktów lub nieoczekiwanego rozrywania.
- Powierzchnia adaptera krzyżowego jest bezpośrednio skanowana bez wcześniejszych przekształceń wewnętrznych ani kopii.
Te testy end-to-end również naturalnie sprawdzają, czy CheckMultiplaneOverlaySupport i interfejsy DDI typu Present są obsługiwane dla zasobów między-adapterowych. Aplikacja testowa ręczna ma określone wymagania sprzętowe, takie jak monitor o wysokiej rozdzielczości i wysokiej szybkości odświeżania. Aby uzyskać więcej informacji, zobacz dokument referencyjny towarzyszący testowi.
Device.Graphics.WDDM30.Render.CoreRequirement
- Test HLK w celu sprawdzenia, czy sterowniki deklarujące limit HybridIntegrated również deklarują limit CrossAdapterResourceScanout.
System.Podstawy.Grafiki.GrafikaHybrydowa.WieleGPU
- Test HLK oparty na systemie, umożliwiający producentom OEM uruchamianie tych testów na urządzeniach hybrydowych zdolnych do obsługi jednokopiowej ścieżki DXGI w ramach kompleksowej weryfikacji systemu.