Counter-Strike 2 uz Windows startē ar argumentu -vulkan un attēlu zīmē Mesa atvērtā koda draiveris RADV, nevis AMD oficiālais Vulkan draiveris. Collabora inženieris Louis-Francis Ratté-Boulianne 28. jūlijā publicēja aprakstu par RADV pārcelšanu uz WIN32. Darbu apmaksā Valve.
Pārbaudītas divas videokartes: Radeon RX 7900 XT un RX 7800 XT, tas ir AMD 11. un 10. paaudzes grafikas kodols. Draiveris vēl nav izturējis Vulkan konformances testus un attēla izvade iet lēno procesora ceļu, tāpēc ātrdarbību pagaidām mērīt nav jēgas. Phoronix šo posmu apzīmē kā agru izpēti.
Kas notiek zem pārsega
RADV ir Mesa Vulkan draiveris AMD videokartēm. Uz Linux tas ir tas pats kods, kas darbina Steam Deck grafiku. Pēdējos gados Valve tajā ir ieguldījusi lielu daļu no sava Linux grafikas darba, sākot ar staru izsekošanas ātrdarbību un beidzot ar RDNA 4 atbalstu. RADV nāk ar savu šeideru kompilatoru ACO, kas Mesa noklusējumā strādā kopš 20.2 laidiena, tāpēc uz Windows tas paņemtu līdzi arī citu šeideru kompilāciju, nevis tikai citu draivera loģiku.
Uz Windows draiveris ir sadalīts divās daļās. Kopš Windows 10 saskarne WDDM2 nosaka, kā lietotāja režīma draiveris (UMD) sarunājas ar operētājsistēmu un ar kodola režīma draiveri (KMD). Collabora aizstāj tikai augšējo daļu: RADV kļūst par UMD, bet zemāk paliek AMD slēgtais kodola draiveris no parastās Radeon Software instalācijas. Linux AMDGPU kodola draiveri neviens uz Windows nenes.
Sazināšanās notiek ar D3DKMT izsaukumiem. Tie ir dokumentēti, tāpēc pamata darbības, piemēram, atmiņas piešķiršana un komandu buferu iesniegšana, strādā pēc grāmatas. Problēmas sākas ar ražotāja specifiskajām lietām: tās iet caur D3DKMTEscape un tur ceļo AMD privātās datu struktūras, kuras uzņēmums nepublicē.
Reversā inženierija ar žurnalēšanas slāni
Ideja nav jauna. Faith Ekstrand 2024. gadā XDC konferencē nolasīja referātu ar nosaukumu A little Windows with your Mesa? un parādīja, ka RADV uz WDDM2 principā var uzlikt. Kopā ar referātu parādījās arī rīks wddm2-pdd-re, kas noklausās draivera izsaukumus.
Collabora šo rīku pārstrādāja par pilnvērtīgu žurnalēšanas slāni. Tas pārtver AMD oficiālā Vulkan draivera izsaukumus un izmet failā komandu straumes, reģistru vērtības un šeideru kodu. Tālāk jau var salīdzināt, ko oficiālais draiveris raksta kartei, ar to, ko raksta RADV.
Pēc tam sekoja pārstrādāta komandu straumju apstrāde ar sinhronizāciju. Pievienots atbalsts retajām piesaistēm (sparse bindings), teselācijai, task šeideriem un dinamiskiem videokartes īpašību vaicājumiem. Bez šīm lietām lielākā daļa mūsdienu spēļu vienkārši nestartē.
Lai darbu varētu uzturēt ilgtermiņā, RADV vajag vai nu dokumentētu un stabilu saskarni ar AMD kodola draiveri Windows vidē, vai arī atsevišķu starpslāni, kas šo saskarni nostiprina.
Louis-Francis Ratté-Boulianne, Collabora, pārstāsts no emuāra ieraksta
Iemesls ir vienkāršs. Reversētās privātās struktūras nav līgums. AMD tās var mainīt jebkurā draivera atjauninājumā un RADV pēc tam pārstāj startēt.
Ko šī versija vēl nespēj
Vulkan konformances testus draiveris nav izturējis, tāpēc oficiāli to Vulkan draiveri saukt nevar. Lielākais robs ir attēla izvadīšana ekrānā. Pagaidām darbojas tikai lēnais procesora ceļš: kadrs tiek nokopēts caur procesoru, nevis padots tālāk tieši videoatmiņā. DXGI swapchain integrācijas nav un bezkopēšanas apmaiņas nav. Lai to sakārtotu, RADV jāiemācās importēt D3D12 attēlus.
Tas nozīmē, ka jebkurš kadru skaita mērījums šobrīd rāda kopēšanas cenu, nevis draivera kvalitāti. Ratté-Boulianne to arī neslēpj un skaitļus nepublicē.
Mesa uz Windows nav jaunums, taču šis draiveris ir citāds
Mesa uz Windows dzīvo jau labu laiku. Vulkan draiveris Dozen, kas Vulkan izsaukumus pārtulko uz Direct3D 12, tika iekļauts Mesa 22.1 laidienā. To rakstīja Collabora inženieri Boris Brezillon un Erik Faye-Lund sadarbībā ar Microsoft. Dozen nonāca WSLg grafikas kaudzē, kur tas Linux programmām Windows apakšsistēmā dod Vulkan. Programmatūras draiveris lavapipe Windows pakotnēs ir kopš Mesa 21.1.0 un rēķina visu uz procesora.
Abi šie draiveri ar dzelzi tieši nerunā. Dozen prasa Direct3D 12 apakšā, lavapipe prasa procesoru. RADV uz WDDM2 būtu pirmais Mesa Vulkan draiveris, kas uz Windows raksta komandas videokartei caur ražotāja kodola draiveri.
Izstrādātājiem tas dod vēl vienu iespēju. Uz Windows Direct3D izsaukumus jau tagad var pārtulkot uz Vulkan ar DXVK, ko tā pati Valve apmaksā Proton vajadzībām. Ja apakšā liktu RADV, viss lietotāja režīma ceļš no spēles līdz komandu buferim būtu atvērtā kodā un vienu kļūdu varētu izlabot abām platformām reizē. Šobrīd to pašu kļūdu Mesa izstrādātājs uz Windows atkārtot nevar.
Ne Collabora ieraksts, ne Phoronix nesaka, vai Valve plāno šo draiveri kādreiz piegādāt lietotājiem. Uzņēmums Mesa izstrādi apmaksā jau gadiem, taču konkrētu mērķi šoreiz neviens nenosauc.
Kods pagaidām atrodas Ratté-Boulianne personīgajā Mesa atzarā wddm2 uz freedesktop.org GitLab. Mesa galvenajā zarā tas iesniegts nav.
Avoti
- Collabora: Cracking Windows Open: Porting RADV to WIN32
- Phoronix: Valve Sponsors Work Bringing Open-Source RADV Driver To Windows
- Faith Ekstrand, XDC 2024: A little Windows with your Mesa?
- Mesa atzars wddm2 freedesktop.org GitLab
- Phoronix: Dozen Merged Into Mesa For Implementing Vulkan On Direct3D 12
Komentāri
Šim rakstam vēl nav komentāru. Esi pirmais, kurš dalās ar savu viedokli.