WSL otrzyma obsługę DirectX w systemie Linux dzięki kompilacjom 21H1
Microsoft dodaje obsługę DirectX do dystrybucji Linuksa działających w środowisku WSL 2. Zmiana wejdzie w życie wraz z pierwszymi kompilacjami 21H1 z gałęzi Iron (Fe) w Fast Ring, które mają pojawić się w czerwcu tego roku.
Microsoft jest wprowadzenie Windows Display Driver Model w wersji 2.9, WDDMv2.9, który wprowadzi akcelerację GPU do WSL 2. Aby było to możliwe, po stronie WSL znajduje się specjalny moduł jądra Linux, dxgkrnl
.
dxgkrnl
Dxgkrnl to zupełnie nowy sterownik jądra dla systemu Linux, który udostępnia /dev/dxg urządzenie do trybu użytkownika Linux. /dev/dxg udostępnia zestaw IOCTL, który ściśle naśladuje natywną warstwę usług jądra WDDM D3DKMT w systemie Windows. Dxgkrnl w jądrze Linux łączy się przez magistralę VM ze swoim starszym bratem na hoście Windows i używa tego połączenia magistrali VM do komunikacji z fizycznym GPU.
Jeśli host ma wiele procesorów graficznych, wszystkie procesory graficzne są projektowane i dostępne w środowisku Linux (przy założeniu, że na wszystkich tych procesorach graficznych działają sterowniki WDDMv2.9).
Microsoft twierdzi, że architektura nie będzie ograniczać ani zakłócać wydajności aplikacji WSL i zasobów GPU będą prawidłowo udostępniane między aplikacjami Windows działającymi wraz z graficznym interfejsem użytkownika systemu Linux i aplikacjami konsolowymi, które wykorzystują DirectX.
Wydanie Dxgkrnl Linux jest udostępniane jako open source.
DxCore i D3D12 w systemie Linux
Ten projekt wprowadza pełne API D3D12 do Linuksa bez imitacji.ibd3d12.so jest skompilowany z tego samego kodu źródłowego co d3d12.dll w systemie Windows, ale dla celu Linux. Oferuje ten sam poziom funkcjonalności i wydajności (minus narzut na wirtualizację). Jedynym wyjątkiem jest Present(). Obecnie nie ma integracji prezentacji z WSL, ponieważ WSL jest dziś tylko konsolą. Interfejs API D3D12 może być używany do renderowania poza ekranem i obliczeń, ale nie ma obsługi łańcucha wymiany do kopiowania pikseli bezpośrednio na ekran.
DxCore (libdxcore.so) to uproszczona wersja dxgi, w której starsze aspekty API zostały zastąpione nowoczesnymi wersjami. DxCore jest dostępny zarówno w systemie Windows, jak i Linux. DxCore jest również używany do hostowania płaskiej wersji interfejsu API D3DKMT używanego przez sterownik oparty na WDDM w systemie Windows do komunikacji z GPU. Ten interfejs API abstrahuje różnice w sposobie, w jaki różne usługi WDDM trafiają do jądra (tabela usług w systemie Windows kontra IOCTL w systemie Linux).
libd3d12.so i libdxcore.so to zamknięte pliki binarne, prekompilowane w trybie użytkownika, które są dostarczane jako część systemu Windows. Te pliki binarne są kompatybilne z dystrybucjami opartymi na glibc i są automatycznie montowane pod /usr/lib/wsl/lib i widoczne dla ładowacza. Innymi słowy, te interfejsy API działają od razu po wyjęciu z pudełka, bez konieczności instalowania dodatkowych pakietów lub dostosowywania konfiguracji dystrybucji. Wsparcie jest obecnie ograniczone do dystrybucji opartych na glibc, w tym Ubuntu, Debian, Fedora, Centos, SUSE i tak dalej.
D3D12 nie byłby w stanie działać bez sterownika trybu użytkownika (UMD) specyficznego dla GPU, dostarczanego przez partnerów producentów GPU. UMD jest odpowiedzialny za takie rzeczy, jak kompilowanie shaderów do kodu bajtowego specyficznego dla sprzętu i tłumaczenie żądań renderowania API na rzeczywiste instrukcje GPU w buforach poleceń do wykonania przez GPU. Pakiet sterownika hosta jest zamontowany wewnątrz WSL w /usr/lib/wsl/drivers i jest bezpośrednio dostępny dla API d3d12. Ponownie wymagany jest sterownik WDDM 2.9.
Microsoft pracuje również nad wprowadzeniem akceleracji GPU dla OpenGL, OpenCL i Vulkan w WSL za pośrednictwem biblioteki Mesa.
Wsparcie dla DxCore, D3D12, DirectML i NVIDIA CUDA zbliża się do Niejawny tester systemu Windows Szybka budowa wkrótce. Szybki dzwonek jest obecnie włączony Mangan (Mn) Oddział systemu operacyjnego. Oczekuje się, że szybki dzwonek przełączy się na nowy Oddział żelaza (Fe)
pod koniec czerwca, który ujawni tę nową funkcję niejawnym testerom.