A Firefox Linux grafikus alrendszer átállítása GLX-ről EGL-re

kami911 képe

A Firefox 94 közelgő kiadásában a Linux felhasználóink nagy csoportja számára engedélyezik a fejlesztők EGL használatát. Ez növeli a WebGL teljesítményét, csökkenti az erőforrás-fogyasztást és megkönnyíti a jövőben a fejlesztők életét.

Mi is ez a fejlesztés?

Ahhoz, hogy a hardveres gyorsítású API-kat, mint az OpenGL, olyan ablakrendszerekkel használhassuk, mint az X11 vagy a Wayland, szükség van egy interfészre, amely összeköti őket. Az OpenGL-hez az X11-en a legtöbb program a GLX-et használja, míg utódját, az EGL-t a Wayland-en, az Android-on és a beágyazott környezetben használják. Bár az EGL-nek van néhány jelentős előnye a GLX-hez képest, és elméletileg ugyanúgy használható az X11-en is, az ottani elterjedése nagyon lassú volt.

Ez a következő okokra vezethető vissza:

  1. A játékok és hasonló alkalmazások alig profitálnak a váltásból.
  2. Azok az alkalmazások és eszközkészletek, amelyeknek előnyös lenne, gyakran eleve nem engedélyezik a hardveres gyorsított leképzést az X11-en. Valószínűleg – többek között – a korábbi rossz és bonyolult illesztőprogram helyzet miatt.
  3. A lassú átvétel miatt az X11 EGL implementációk hibásak és hiányosak maradtak.

Nem minden asztali grafikus kártya illesztőprogram támogatja teljes mértékben, és vannak hibái (például az átlátszó ablakok hibás megjelenítése). De ahogy a Wayland egyre nagyobb lendületet vesz, az EGL is egyre több figyelmet és javítást kap a Linux desktop-on. És hogy miért is akarják a fejlesztők az EGL-t? Mert ad nekik egy kiváló eszközt - az EGLImages-t (és az EGLFence-t). Az EGLImage egy olyan objektum, amely a GPU memóriájának egy darabján jön létre (ami lehet DMABUF, a DMABUF másolás nélküli puffermegosztást biztosít), megosztva különböző folyamatokkal, és amelyet framepufferként (a GL renderelés célpontja) vagy textúraként (a GL renderelés forrása) használnak.

Mi változott?

A Firefox egy olyan alkalmazás, amely számos területen nagy hasznát veszi a hardveres gyorsításnak. Azonban egészen a közelmúltig a szoftveres leképzés maradt az alapértelmezett. Csak idén végre a legtöbb Linux-felhasználó számára engedélyezték a Webrender, a Firefox új leképzőmotorját.

Nagyon hosszú a fejlesztések listája, amelyek megkönnyítették és így lehetővé tették ezt a lépést. Hogy csak néhányat említsünk:

  • Az OpenGL illesztőprogramok jobbak lettek
  • A Xorg DDX illesztőprogramok jobbak lettek (például: a „modesetting” illesztőprogram az Intel illesztőprogramban alapértelmezetté vált).
  • A kompozitált asztalok elterjedtebbé váltak
  • A Firefox-ból kikerült a bővítmény-támogatás (Flash Player).
  • A Webrender sokkal kívánatosabbá tette a hardveres gyorsítást a régi OpenGL rétegkezelő alrendszerhez képest
  • Új technológiák jelentek meg, mint például a Wayland és a DMABUF.

Az utolsó pont döntő volt a fejlesztés szempontjából. Amikor Martin Stránský implementálta a Wayland hardveres gyorsítás támogatását a Firefox-ban, nem tudta újra felhasználni a GLX kódot, hanem az Android EGL kódját használta. Innen egy érdekes történet vette kezdetét.

Az EGL alrendszer fejlesztése és a kód megosztása

Lépésről lépésre számos fejlesztés történt az EGL/Wayland backendben, amelyek más platformokra is hatással voltak:

Ez csak egy nagyon kis kiragadott példa, ami jól mutatja, hogy egyre több megosztott kód lett a Wayland, az X11/EGL és az Android között. Ez javítja a kód minőségét, növeli a funkciókkal és hibákkal kapcsolatos rendelkezésre álló időt, csökkenti a karbantartási terheket. Ami azt jelenti, hogy az X11 kód megkapja a Wayland számára készített funkciókat (felfüggesztett leképzés a nem látszó ablakokhoz, jobb VSync-támogatás és még sok minden más is.

Az EGL alapértelmezetté tétele

Az elmúlt évben egyre több felhasználó szerzett tudomást arról, hogy az X11-en is lehet EGL-t használni – valószínűleg azért, mert ez a hardveres videódekódolás előfeltétele. Rengeteg hibát javítottak a Firefox-ban, de más komponensekben is. Most végre úgy érzik a fejlesztők, készen áll művük az általános bekapcsoláshoz:

Előnyök a felhasználók számára

Mire számíthat tehát pontosan, és miért? Elsősorban:

  • Jobb WebGL teljesítmény. A DMABUF másolás nélküli puffermegosztásának köszönhetően a WebGL homokozóban és a rendszermemóriába történő másolása nélkül is elvégezhető. A WebGL-t nem csak olyan nyilvánvaló helyeken használják, mint a játékok, hanem finomabb módokon is, például a Google Maps-en.
  • Csökkentett energiafogyasztás. A részleges károkozással már nem kell az egész ablakot újra rajzolnunk, ha a tartalomnak csak egy kis része változott. Gyakori példák erre a weboldalakon vagy a lapok betöltésekor megjelenő kis animációk.
  • Kevesebb hiba. Az EGL modernebb, sokkal jobban megfelel az összetett hardverek számára asztali alkalmazásokhoz, és több platformon használják, mint a GLX-et.
  • Az alapértelmezett hardveres videódekódolás (potenciális VA-API videó dekódolás) egy újabb döntő lépéssel közelebb került – valójában a legtöbb felhasználó számára ez már csak egy beállítást jelent (de vigyázat, még mindig van néhány hibája).

Ha más előny nem is látszik azonnal, de a halak nagyobb mennyiségben és nagyobb FPS-sel jelennek meg az akváriumban.

Külön köszönet

Hosszú azoknak a listája, akik hozzájárultak ehhez a lépéshez. Hogy csak néhányan kerüljenek megemlítésre: Martin Stránský, Andrew Osmond, Jamie Nicol, Grep V, Jan Ikenmeyer (Darkspirit), Michel Dänzer, a Firefox GFX-csapat, a Mesa projekt és a közreműködők, az Nvidia illesztőprogram csapata, a GTK csapat.

Végül: köszönjük szépen minden felhasználónak, aki hibákat jelentett be és segítette a fejlesztőket a javításukban!

Ha hibát talál

Amennyiben hibát talál, jelentse be!

Szükség esetén az EGL-t is letilthatja, és visszaválthat GLX-re.

Ezek a beállításokkal további testreszabási beállításokat végezhető el. A felület eléréséhez írja be a címsorba a következőt:

about:config

A megjelenő ablakban kattintson a „Kockázat elfogadás és továbblépés” gombra:

Az megjelenő felső keresőmezőben kereshető a beállítás neve részben vagy egészben.

Szükség esetén az EGL-t is letilthatja, és visszaválthat GLX-re.

Beállítás neve:

gfx.x11-egl.force-disabled

Eredeti érték: true;

Átállítás: false értékre.

EGL-lel a Firefox 94 előtt

Ennek mintájára a Firefox 94 előtti verzióban erőltetve engedélyezhetjük az X11-en futó Firefoxon az EGL használatát.

Beállítás neve:

gfx.x11-egl.force-enabled

Eredeti érték: false;

Átállítás: true értékre.

Források

 

 

Hozzászólások