Nedávno Collabora vývojári vydané prostredníctvom blogového príspevku, nový regulátor gália pre Mesa, ktorá implementuje medzivrstvu organizovať OpenCL 1.2 a OpenGL 3.3 API o ovládačoch s podporou DirectX 12 (D3D12) a o tom, že ich zdrojový kód je vydaný pod licenciou MIT.
Navrhovaný kontrolór bude umožňuje používať Mesa na zariadeniach ktoré pôvodne nie sú kompatibilné s OpenCL a OpenGL a tiež ako východisková pozícia na portovanie aplikácií OpenGL / OpenCL na prácu na D3D12. Pre výrobcov GPU umožňuje subsystém poskytovať podporu pre OpenCL a OpenGL, pričom ovládače podporujú iba D3D12.
Vo svojom blogovom príspevku vývojári zdieľajú:
Posledné mesiace sme v Collabore pracovali na dvoch vzrušujúcich nových projektoch a konečne je čas zdieľať informácie o nich so svetom ...
Okamžitých plánov, pozoruje sa dosiahnutie úplného schválenia skúšok z Podpora OpenCL 1.2 a OpenGL 3.3, overenie kompatibility s aplikáciami a zahrnutie najlepších postupov do hlavného zloženia Mesa.
O novom ovládači
Vývoj nového ovládača sa uskutočňuje v spolupráci s inžiniermi spoločnosti Microsoft vyvinúť nástroje D3D11On12 na prenosové súpravy D3D11 a knižnicu D3D12 D3D12TranslationLayer, ako aj štandardné grafické primitívne nástroje nad D3D12.
Implementácia obsahuje ovládač Gallium, kompilátor OpenCL, runtime OpenCL a kompilátor shaderu NIR-to-DXIL, ktorý prevádza strednú reprezentáciu shaderov NIR používaných v Mese na binárny formát DXIL (jazyk DirectX), kompatibilný s DirectX 12 a založený na bitovom kóde LLVM 3.7 (Microsoft DirectX Shader Compiler je v podstate rozšírená vidlica LLVM 3.7). Kompilátor OpenCL bol pripravený na základe skúseností z projektu LLVM a súpravy nástrojov SPIRV-LLVM.
Táto práca nadväzuje na mnoho predchádzajúcich prác. V prvom rade to budujeme pomocou Mesa 3D, pričom rozhranie Gallium ako základ pre vrstvu OpenGL a NIR ako základ pre kompilátor OpenCL. Ako prekladač používame aj LLVM a prekladač Khronos SPIRV-LLVM.
Ďalej využívame skúsenosti spoločnosti Microsoft pri vytváraní ich prekladovej vrstvy D3D12, ako aj naše vlastné skúsenosti s vývojom Zinku.
Zdrojový kód OpenCL je skompilovaný s príponou do prechodného pseudokódu LLVM (LLVM IR), ktorý je potom prevedený na strednú reprezentáciu jadra OpenCL vo formáte SPIR-V.
Jadrá v zastúpení SPIR-V sa prenesú do spoločnosti Mesa, preložené do formátu NIR, optimalizované a prevedené do formátu NIR-to-DXIL za účelom generovania vhodných výpočtových shaderov DXIL na vykonávanie GPU pomocou runtime založeného na DirectX 12. Namiesto použitia Clover v implementácii OpenCL Mesa je navrhnutý nový runtime OpenCL, ktorý umožňuje priamejšie konverzie na API DirectX 12.
Ovládače OpenCL a OpenGL sa pripravujú pomocou rozhrania Gallium poskytované programom Mesa, ktorý umožňuje obísť špecifiká OpenGL pri vytváraní ovládačov a prekladať hovory OpenGL do entít, ktoré sú bližšie ku grafickým primitívom, na ktorých fungujú moderné GPU.
Ovládač Gallium prijíma príkazy OpenGL a za účasti prekladača NIR-to-DXIL vytvára vyrovnávacie pamäte príkazov, ktoré bežia na GPU, pomocou ovládača D3D12.
konečne, vývojári spomínajú, že ide o ranú prácu a že očakávajú, že sa kontrolór bude časom zlepšovať:
Toto je iba oznámenie a zostáva ešte veľa práce. Momentálne máme niečo, čo v niektorých prípadoch funguje, ale povrch začíname iba škrabať.
Najskôr sa musíme dostať na úroveň funkcií, ku ktorým smerujeme. Našim cieľom v tejto chvíli je absolvovať testovanie zhody pre OpenCL 1.2 a OpenGL 3.3. Čaká nás ešte dlhá cesta, ale pri troche tvrdej práce a potu som si istý, že sa tam dostaneme.
Ak máte záujem dozvedieť sa viac, pôvodnú poznámku si môžete pozrieť v nasledujúci odkaz alebo pre tých, ktorí majú záujem o kontrolu zdrojového kódu, tak môžu urobiť z tohto odkazu.