Mesa 26.3 grafikas kaudzē 8. oktobrī nonāca Valve rakstīta VK_AMD_anti_lag implementācija atvērtā koda AMD Vulkan draiverim RADV. Jaunais kods aizstāj 2025. gadā pievienoto netiešo Vulkan slāni ar pastāvīgu daļu paša draivera iekšienē. Par apvienošanu ziņoja Phoronix.
Darbs ilga vairākus mēnešus. To vadīja Valve Linux komandas izstrādātājs Daniels Šīrmanis, kurš veco slāni sadalīja divās daļās: vispārīgā vk_frame_pacer ietvarā (to var koplietot vairāki Mesa Vulkan draiveri) un plānā RADV implementācijā virs tā.
Ko dara anti-lag
VK_AMD_anti_lag parādījās 2024. gada jūlijā kopā ar Vulkan 1.3.291. Paplašinājums regulē procesora tempu tā, lai tas nepasteidzas pārāk tālu uz priekšu attiecībā pret grafikas procesoru. Rezultāts ir mazāka aizture starp pogas nospiešanu un attēla maiņu uz ekrāna. Šāviņu spēlēs tas nozīmē, ka tēmēklis un darbības reaģē ātrāk.
Aizture visvairāk pieaug tad, kad spēle ir atkarīga no grafikas procesora. Procesors sagatavo kadrus ātrāk, nekā grafikas procesors paspēj tos uzzīmēt, tāpēc izveidojas rinda. Katrs rindā gaidošais kadrs pievieno dažas milisekundes aiztures starp peles kustību un tās rezultātu uz ekrāna. Anti-lag šo rindu ierobežo, aizturot procesoru īsu brīdi pirms nākamā kadra sagatavošanas.
AMD šo tehnoloģiju savos slēgtajos draiveros sauc par Anti-Lag. NVIDIA līdzvērtīgo tehnoloģiju sauc par Reflex. Līdz šim Linux spēlētāji ar Radeon kartēm anti-lag saņēma caur atsevišķu slāni. Tagad tas ir iebūvēts pašā draiverī.
No netieša slāņa uz draivera kodu
Pirmo reizi VK_AMD_anti_lag atbalsts Mesa nonāca 2025. gada jūlijā versijā 25.3. Tas bija netiešs Vulkan slānis ar nosaukumu MESA_LAYER_ANTI_LAG. Slānis darbojas starp spēli un draiveri, pārtverot izsaukumus pa ceļam. Tāda pieeja strādā, taču to grūtāk uzturēt. Slānis arī ir atsevišķs no draivera, tāpēc to nevar tieši izmantot citi Mesa draiveri.
Šīrmanis paņēma esošo slāņa kodu un pārtaisīja to par draivera daļu. Savā apvienošanas pieprasījumā viņš to apraksta tieši:
Šī implementācija balstās uz MESA_LAYER_ANTI_LAG kodu un pilnībā to aizstāj. Mēs sadalām esošo slāni bāzes ietvarā un plānā draivera implementācijā. Inicializācijas laikā ietvars izveido QueryPool un CommandBuffer objektus, lai varētu ņemt laika atzīmes.
Kā strādā vk_frame_pacer
Ietvars iekabinās divos Vulkan izsaukumos: QueueSubmit2 un QueuePresentKHR. Pirmais iesniedz darbu grafikas procesora rindā. Otrais parāda gatavo kadru. No laika atzīmēm pie šiem izsaukumiem ietvars aprēķina katra kadra laiku.
Draiveris pats laika informāciju par katru kadru saņem caur atpakaļizsaukuma funkciju. Tātad visa mērīšanas loģika paliek vienuviet, bet katrs draiveris pieslēdzas tai ar nelielu kodu. Tieši tāpēc ietvaru sauc par vk_frame_pacer: tas regulē kadru tempu.
Kāpēc to raksta tieši Valve
Valve iegulda Linux grafikas draiveros, jo uz tiem balstās Steam Deck un Proton saderības slānis. RADV ir galvenais atvērtā koda Vulkan draiveris AMD kartēm. To lielā mērā uztur Valve algotie izstrādātāji. Steam Deck grafiku nodrošina AMD RDNA 2 čips, kas strādā tieši caur RADV. Tāpēc ievades aiztures samazināšana šajā draiverī tieši ietekmē spēļu sajūtu uz ierīces, kurā ekrāns un vadība ir rokās.
Šīrmanis ilgstoši strādā pie RADV un tā ACO ēnotāju kompilatora, tāpēc anti-lag koda pārnešana no slāņa uz draiveri iekrīt tajā pašā darba laukā. Draivera iekšienē kods var ciešāk sasaistīties ar to, kā grafikas procesors apstrādā kadrus. Tieši tāpēc Phoronix jauno pieeju apraksta kā uzlabojumu salīdzinājumā ar veco slāni.
Pamats NVIDIA zema latentuma paplašinājumam
Jaunā ietvara galvenais ieguvums ir tas, ka to var izmantot arī citi draiveri. Šīrmanis apvienošanas pieprasījumā atzīmē, ka VK_NV_low_latency_2 ieviešana virs šī ietvara būtu iespējama un diezgan vienkārša. Tas ir paplašinājums, ko izmanto NVIDIA Reflex.
Ja kāds šo paplašinājumu uzraksta Mesa draiveriem, zema latentuma atbalsts strādātu arī tajās spēlēs, kas pieprasa Reflex. To ir vairāk nekā spēļu ar AMD anti-lag atbalstu, jo Reflex ir izplatītāks lielajos nosaukumos. Pagaidām gan šāda NVIDIA puses implementācija ir tikai iespēja, nevis gatavs kods.
Kad tas nonāk līdz spēlētājiem
Anti-lag nedarbojas pats no sevis. Paplašinājumu pieprasa spēle vai tulkošanas slānis. Uz Linux lielākā daļa Windows spēļu iet caur Proton, kur DXVK un VKD3D pārtulko DirectX izsaukumus Vulkan valodā. Tieši šie slāņi izlemj, vai pieprasīt anti-lag. Tāpēc reālais ieguvums spēlētājam ir atkarīgs no tā, cik plaši tulkošanas slāņi izmanto jauno draivera kodu.
Mesa 26.3 stabilā versija iznāks novembrī. Līdz tam kods ir pieejams izstrādes versijā tiem, kas Mesa būvē paši. Distributīvi ar jauno Mesa to iekļaus pakāpeniski pēc novembra laidiena. Spāņu izdevums Foro3D Mesa 26.3 iekļaušanu apstiprināja 9. oktobrī.
Komentāri
Šim rakstam vēl nav komentāru. Esi pirmais, kurš dalās ar savu viedokli.