Nedavno Objavljeni programeri Collabora putem bloga, novi Gallium kontroler za Mesa, koji implementira srednji sloj organizirati OpenCL 1.2 i OpenGL 3.3 API o upravljačkim programima s podrškom za DirectX 12 (D3D12) i da je njihov izvorni kod objavljen pod MIT licencom.
Predloženi kontroler će omogućava vam upotrebu Mesa na uređajima koji u početku nisu kompatibilni sa OpenCL i OpenGL a također i kao početna pozicija za prijenos OpenGL / OpenCL aplikacija za rad na D3D12. Za proizvođače GPU-a, podsistem omogućava pružanje podrške za OpenCL i OpenGL, s pokretačkim programima koji podržavaju samo D3D12.
U svom blogu programeri dijele:
Posljednjih nekoliko mjeseci radili smo na dva uzbudljiva nova projekta u Collabori i napokon je vrijeme da informacije o njima podijelimo sa svijetom ...
Od neposrednih planova, uočava se postizanje potpunog odobrenja testova Podrška za OpenCL 1.2 i OpenGL 3.3, verifikacija kompatibilnosti sa aplikacijama i uključivanje najboljih praksi u glavni sastav Mesa-e.
O novom kontroleru
Razvoj novog kontrolera provodi se zajedno s Microsoftovim inženjerima razviti D3D11On12 alate za D3D11 komplete za prenos i D3D12 D3D12TranslationLayer biblioteku, kao i standardne grafičke primitivne primene na vrhu D3D12.
Implementacija uključuje Galijev upravljački program, OpenCL kompajler, OpenCL runtime i NIR-to-DXIL kompajler osenčivača, koji pretvara posredni prikaz NIR sjenčanja koji se koriste u Mesi u binarni DXIL format (DirectX srednji jezik), kompatibilan s DirectX 12 i zasnovan na bitnom kodu LLVM 3.7 (Microsoftov DirectX Shader Compiler je u osnovi proširena vilica LLVM 3.7). Kompajler OpenCL pripremljen je na osnovu iskustva LLVM projekta i SPIRV-LLVM alata.
Ovaj se rad temelji na mnogim prethodnim radovima. Prije svega, ovo gradimo koristeći Mesa 3D, s Gallium sučeljem kao osnovom za OpenGL sloj i NIR kao osnovom za OpenCL kompajler. Kao kompajler koristimo i LLVM i prevoditelj Khronos SPIRV-LLVM.
Pored toga, koristimo Microsoftovo iskustvo u stvaranju njihovog prevoditeljskog sloja D3D12, kao i vlastito iskustvo u razvoju Zinka.
Izvorni kod OpenCL-a kompajliran je sa clang u posredni LLVM pseudo kod (LLVM IR), koji se zatim pretvara u posredni prikaz OpenCL jezgre u SPIR-V formatu.
Jezgre u SPIR-V reprezentaciji prenose se na Mesa, prevedeno u NIR format, optimizirano i prebačeno u NIR-to-DXIL za generiranje odgovarajućih DXIL računskih sjenera za izvršenje GPU-a koristeći DirectX 12 bazirano runtime. Umjesto korištenja Clover-a u implementaciji OpenCL Mesa, predloženo je novo vrijeme izvođenja OpenCL-a, koje omogućava više direktnih konverzija u DirectX 12 API.
OpenCL i OpenGL upravljački programi pripremaju se pomoću interfejsa Gallium pruža Mesa, koji vam omogućava da zaobiđete OpenGL specifičnosti prilikom kreiranja kontrolera i prevedete OpenGL pozive u entitete koji su bliži grafičkim primitivima na kojima rade moderni GPU-ovi.
Galijev upravljački program prihvaća OpenGL naredbe i uz sudjelovanje NIR-to-DXIL prevoditelja gradi međuspremnike naredbi koji se izvode na GPU-u pomoću upravljačkog programa D3D12.
Na kraju, programeri spominju da je ovo rani rad i da očekuju da će se kontroler s vremenom poboljšati:
Ovo je samo najava i ostaje još puno posla. Trenutno imamo nešto što u nekim slučajevima funkcionira, ali tek počinjemo grebati površinu.
Prije svega, moramo doći do nivoa značajki kojima idemo. Naši ciljevi su trenutno proći testiranje usaglašenosti za OpenCL 1.2 i OpenGL 3.3. Pred nama je dug put, ali uz malo truda i znoja siguran sam da ćemo stići.
Ako ste zainteresirani da saznate više o tome, možete provjeriti originalnu bilješku sljedeći link ili oni koji su zainteresirani za pregled izvornog koda to mogu učiniti sa ovog linka.