Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Model přepínání úloh GPU byl aktualizován ve Windows 8 (WDDM 1.2). V aktualizovaném modelu operační systém:
- Neumožňuje ovladači zobrazení v režimu jádra (KMD) zakázat přerušení paketů GPU DMA.
- Zaručuje, že se požadavky na preemption posílají do GPU předtím, než zahájí proces detekce a obnovení časového limitu (TDR ).
| Požadavek | Popis |
|---|---|
| Implementace ovladače – plná grafika nebo pouze vykreslení | Povinné |
| Požadavky a testy WHLK | Device.Graphics... Preemption Test, Device.Graphics... FlipOnVSyncMmIo |
Pokud operační systém nedokáže úspěšně předpovědět dlouhotrvající pakety, postupujte takhle:
- Práce s GPU s vysokou prioritou (například práce vyžadovaná Správcem oken plochy (DWM) může být zpožděná. Toto zpoždění vede k výpadkům během přechodů oken a animací.
- Proces TDR může opakovaně resetovat GPU a nakonec způsobit kontrolu chyb systému.
Všechny KMD WDDM 1.2 musí podporovat model preempce systému Windows 8. Při provozu mohou ovladače WDDM 1.2 také odmítnout předběžný přístupový model systému Windows 8 a zachovat chování systému Windows 7 podle plánovače grafického jádra DirectX (Dxgkrnl).
Rozhraní preemption GPU
KmD může k implementaci modelu preempce GPU pro Windows 8 použít následující identifikátory DDI.
- DxgkCbCreateContextAllocation
- DxgkCbDestroyContextAllocation
- pfnSetPriorityCb
- Dxgkrnl – rozhraní
- DXGKRNL_INTERFACE
- D3DKMDT_COMPUTE_PREEMPTION_GRANULARITY
- D3DKMDT_GRAPHICS_PREEMPTION_GRANULARITY
- D3DKMDT_PREEMPTION_CAPS
- D3DKMT_QUERYADAPTERINFO
- DXGK_DRIVERCAPS
- DXGK_SUBMITCOMMANDFLAGS
- DXGK_VIDSCHCAPS
- DXGKARGCB_CREATECONTEXTALLOCATION
Kroky implementace ovladače
Při implementaci modelu preempce GPU ve Windows 8 ve službě KMD postupujte takto:
- Zkompilujte ovladač proti hlavičkám, které obsahují DXGKDDI_INTERFACE_VERSION>= DXGKDDI_INTERFACE_VERSION_WIN8.
- Deklarujte podporu pro model preemption GPU systému Windows 8 nastavením členů PreemptionAware a MultiEngineAware struktury DXGK_VIDSCHCAPS na 1. Pokud chcete podporovat model preemption systému Windows 7, nastavte preemptionAware na nulu.
- Zadejte podporovanou úroveň členitosti preempce ve struktuře D3DKMDT_PREEMPTION_CAPS , která přebírá konstantní hodnoty z D3DKMDT_GRAPHICS_PREEMPTION_GRANULARITY a D3DKMDT_COMPUTE_PREEMPTION_GRANULARITY výčtů.
- Pokud hardware podporuje opožděné přepínání kontextu, odešlete prázdnou vyrovnávací paměť do funkce DxgkDdiSubmitCommand a nastavte člen pSubmitCommand->Flags->ContextSwitch na hodnotu 1. Všimněte si diskuse pod členem ContextSwitch struktury DXGK_SUBMITCOMMANDFLAGS.
- Nastavte přidělení kontextu GPU a kontextu zařízení zavoláním funkce DxgkCbCreateContextAllocation. Všimněte si konkrétních pokynů a omezení uvedených v poznámkách pro funkci.
- Voláním funkce DxgkCbDestroyContextAllocation zničíte přidělení kontextu GPU a přidělení kontextu zařízení vytvořené pomocí DxgkCbCreateContextAllocation.
- Při přípravě vyrovnávací paměti DMA v reakci na volání funkce DxgkDdiBuildPagingBuffer inicializujte kontextový prostředek vyplněním interní struktury InitContextResource v rámci struktury DXGKARG_BUILDPAGINGBUFFER. Pokud jsou kontextové prostředky vyřazeny nebo přesunuty, správce paměti videa zachová obsah kontextových prostředků.
- Ovladač musí podporovat vstupně-výstupní operace mapované paměti při další vertikální synchronizaci. Ve Windows 8 se plánovač GPU pokusí o zrušení hardwaru i v případě, že překlopení čeká na vyřízení. Aby se zabránilo trhání obrazu a vykreslování artefaktů, musí ovladač podporovat model přepínání paměťově mapovaných I/O operací a mít nastavený člen FlipOnVSyncMmIo struktury DXGK_FLIPCAPS na 1 a podporovat operace popsané v kapitole FlipOnVSyncMmIo.
Aspekty mapování paměti v implementaci
Podle těchto pokynů vytvořte robustní ovladač, který podporuje model preempce GPU windows 8 a poskytuje kvalitní uživatelské prostředí:
- Když plánovač Dxgkrnl odešle příkaz k přerušení uprostřed zpracování vyrovnávací paměti DMA, požádejte o přerušení z GPU. Hardwarová zařízení, která mají jemnější granularitu preempce vyrovnávací paměti DMA, by měla zajistit lepší uživatelský zážitek.
- Povolit opakované použití identifikátorů plotů stránkovacích příkazů: Pokud žádost o předběžné přerušení způsobila přerušení stránkovacích příkazů ve frontě hardwaru, plánovač Dxgkrnl znovu odešle přerušené stránkovací příkazy se stejnými identifikátory plotů, které byly původně použity, a stránkovací příkazy budou naplánovány před všemi ostatními příkazy na dané jednotce. Nepaměťové příkazy budou znovu odeslány s nově přiřazenými fence ID.
- Zadejte seznam umístění oprav pro rozdělené vyrovnávací paměti DMA. Další informace naleznete v tématu Rozdělení vyrovnávací paměti DMA.
- K dispozici je ověřovací režim označovaný jako detekce úniku vazby. Tento režim ověření vás provede seznamem umístění záplat a odmítne pakety, které neodvazují nebo nepřeprogramují přidělení pro každé rozdělení paketu. Některá hardwarová zařízení podporují virtuální adresy, což umožňuje další úroveň nepřímosti, která může toto ověřování učinit zbytečným. V takovém případě chcete-li označit, že ovladač se odhlásí z režimu ověřování, nastavte člen NoDmaPatching struktury DXGK_VIDSCHCAPS na hodnotu 1.
- Ve Windows 7 plánovač Dxgkrnl zaručuje, že všechny rozdělené pakety DMA, které odpovídají stejnému příkazu vykreslování, se sekvenčně spustí bez přepnutí na jiný kontext vykreslení. V modelu preempce systému Windows 8 může plánovač spouštět pakety vykreslování z jiného kontextu mezi dvěma rozdělenými pakety, které odpovídají stejnému příkazu vykreslení. V důsledku toho by ovladače, které o preemptionu vědí, měly zpracovávat odesílání paketů DMA rozděleným nebo částečným způsobem jako pravidelné úplné odeslání paketu. Konkrétně musí být stav GPU uložen nebo obnoven na hranici těchto odeslání.
- Ovladač, který je si vědom preempce, nesmí měnit obsah rozdělené vyrovnávací paměti DMA při jejím vysílání do více adaptérů v režimu propojeného zobrazení (LDA), v němž je propojeno více fyzických GPU k vytvoření jednoho, rychlejšího virtuálního GPU. V modelu preemption systému Windows 8 už plánovač Dxgkrnl nezaručuje synchronní spuštění rozdělené sekvence paketů bez přepnutí do jiného kontextu. Ovladač, který změnil obsah rozděleného paketu DMA, by ohrožoval integritu dat paketu. Konkrétně, jestliže by se paket spustil na jiném engineu, operoval by na stejné kopii dat vyrovnávací paměti DMA.
- V modelu předběžného přerušení GPU systému Windows 8 umožňuje plánovač Dxgkrnl přeřadit zpracování paketů, které mají přidružené synchronizační primitivy označované jako "signal on submit". Pokud zařízení používá synchronizační primitivy "signal on submit" s čekacími stavy na základě hardwaru, musí podporovat možnost přerušení čekající instrukce, než je čekací podmínka splněna.
Požadavky na certifikaci hardwaru
Informace o požadavcích na hardwarová zařízení, která musí splňovat při implementaci této funkce, viz příslušnou dokumentaci WHLK ohledně Device.Graphics... Preemption Test a Device.Graphics... FlipOnVSyncMmIo.