Firma Collabora
Proponowany sterownik pozwala na użycie Mesy na urządzeniach, które natywnie nie obsługują OpenCL i OpenGL, a także jako punkt wyjścia do przenoszenia aplikacji OpenGL/OpenCL tak, aby działały na platformie D3D12. W przypadku producentów procesorów graficznych podsystem umożliwia obsługę OpenCL i OpenGL, jeśli dostępne są tylko sterowniki z obsługą D3D12.
Do najbliższych planów należy osiągnięcie pełnego przejścia testów kompatybilności OpenCL 1.2 i OpenGL 3.3, sprawdzenie kompatybilności z aplikacjami oraz włączenie zmian w główny skład Mesy. Rozwój odbywa się wspólnie z inżynierami Microsoft zajmującymi się rozwojem
Implementacja obejmuje sterownik Gallium, kompilator OpenCL, środowisko uruchomieniowe OpenCL i kompilator modułu cieniującego NIR-to-DXIL, który konwertuje pośrednią reprezentację shaderów NIR używanych w Mesa do formatu binarnego DXIL (DirectX Intermediate Language), obsługiwanego w DirectX 12 i opartego na Kod bitowy LLVM 3.7 (
Źródła z rozszerzeniami OpenCL są kompilowane przy użyciu clang do pośredniego pseudokodu LLVM (LLVM IR), który następnie jest konwertowany na pośrednią reprezentację jąder OpenCL w formacie SPIR-V. Rdzenie w reprezentacji SPIR-V są przekazywane do Mesa, tłumaczone do formatu NIR, optymalizowane i przekazywane do NIR-do-DXIL w celu wygenerowania shaderów obliczeniowych w formacie DXIL, odpowiednich do wykonywania na procesorach graficznych przy użyciu środowiska uruchomieniowego opartego na DirectX 12.
Zamiast Clover, implementacji OpenCL używanej w Mesie, zaproponowano nowe środowisko wykonawcze OpenCL, umożliwiające bardziej bezpośrednie konwersje do API DirectX 12.
Sterowniki OpenCL i OpenGL są przygotowywane przy użyciu interfejsu Gallium dostępnego w Mesa, który umożliwia tworzenie sterowników bez wchodzenia w szczegóły specyficzne dla OpenGL i tłumaczenie wywołań OpenGL w istocie bliżej prymitywów graficznych, na których działają nowoczesne procesory graficzne. Sterownik Gallium, akceptuje polecenia OpenGL i podczas korzystania z tłumacza NIR-na-DXIL
generuje bufory poleceń, które są wykonywane na GPU przy użyciu sterownika D3D12.
Źródło: opennet.ru