Společnost Collabora nový Gallium ovladač pro Mesa, který realizuje vrstvu pro organizaci práce API OpenCL 1.2 a OpenGL 3.3 nad ovladači s podporou DirectX 12 (D3D12). Kód je licencován pod MIT licencí.
Navrhovaný ovladač umožňuje používat Mesa na zařízeních, která původně nepodporují OpenCL a OpenGL, a také jako výchozí pozici pro portování aplikací OpenGL/OpenCL pro práci nad D3D12. Pro výrobce GPU subsystém poskytuje možnost nabídnout podporu OpenCL a OpenGL, když jsou k dispozici pouze ovladače s podporou D3D12.
Mezi nejbližší plány patří dosažení úplného úspěšného testování kompatibility OpenCL 1.2 a OpenGL 3.3, kontrola kompatibility s aplikacemi a zahrnutí nabytých poznatků do hlavní verze Mesa. Vývoj probíhá ve spolupráci s inženýry Microsoftu, kteří vyvíjejí nástroje pro převod her z D3D11 na D3D12 a knihovnu , která implementuje typické grafické primitiva nad D3D12.
Realizace zahrnuje Gallium ovladač, kompilátor OpenCL, OpenCL runtime a kompilátor shaderů NIR-to-DXIL, který převádí v Mesě používané mezilehlé reprezentace shaderů NIR do binárního formátu DXIL (DirectX Intermediate Language), podporovaného v DirectX 12 a založeného na bitovém kódu LLVM 3.7 ( od Microsoftu, což je v podstatě rozšířený fork LLVM 3.7). Kompilátor OpenCL byl vyvinut na základě poznatků z projektu LLVM a nástrojového vybavení .
Původní kódy s rozšířeními OpenCL jsou kompilovány pomocí clang do mezilehlého pseudokódu LLVM (LLVM IR), který je poté převáděn na mezilehlou reprezentaci OpenCL jader ve formátu SPIR-V. Jádra v reprezentaci SPIR-V jsou předávána do Mesy, transponována do formátu NIR, optimalizována a předávána do NIR-to-DXIL pro generaci výpočetních shaderů ve formátu DXIL, vhodného k provádění na GPU s použitím runtime založeného na DirectX 12.
Namísto Clover, používané v implementaci OpenCL Mesa, byl navržen nový OpenCL runtime, který umožňuje více přímých konverzí do API DirectX 12.
OpenCL a OpenGL ovladače byly připraveny s využitím poskytovaného v Mesě rozhraní Gallium, což umožňuje při vytváření ovladačů nevstupovat do specifických detailů OpenGL a převádět volání OpenGL na entity, které jsou bližší grafickým primitivům, jimiž operují moderní GPU. Gallium ovladač přijímá příkazy OpenGL a s pomocí překladače NIR-to-DXIL.
vytváří příkazy na GPU pomocí D3D12 ovladače.
Zdroj: opennet.ru
