WSL får DirectX-support i Linux med 21H1 Builds
Microsoft tilføjer DirectX-understøttelse til Linux-distros, der kører i et WSL 2-miljø. Ændringen går live med de første 21H1 builds fra Iron (Fe) grenen i Fast Ring, som forventes at komme i juni.
Reklame
Microsoft er introducerer Windows Display Driver Model version 2.9, WDDMv2.9, som vil bringe GPU-acceleration til WSL 2. For at gøre det muligt er der et specielt Linux-kernemodul på WSL's side, dxgkrnl
.
dxgkrnl
Dxgkrnl er en helt ny kernedriver til Linux, der afslører /dev/dxg enhed til brugertilstand Linux. /dev/dxg afslører et sæt IOCTL, der tæt efterligner det oprindelige WDDM D3DKMT-kerneservicelag på Windows. Dxgkrnl inde i Linux-kernen forbinder over VM-bussen til sin storebror på Windows-værten og bruger denne VM-busforbindelse til at kommunikere med den fysiske GPU.
Hvis værten har flere GPU'er, er alle GPU'er projiceret og tilgængelige for Linux-miljøet (forudsat at alle disse GPU'er kører WDDMv2.9-drivere).
Microsoft hævder, at arkitekturen ikke vil begrænse eller forstyrre ydeevnen af WSL-apps og GPU-ressourcer vil blive korrekt delt mellem Windows-apps, der kører sammen med Linux GUI og konsol-apps, der bruger DirectX.
Dxgkrnl Linux-udgaven bliver gjort til open source.
DxCore & D3D12 på Linux
Dette projekt bringer fuld D3D12 API til Linux uden imitationer.ibd3d12.so er kompileret fra den samme kildekode som d3d12.dll på Windows, men til et Linux-mål. Det tilbyder det samme niveau af funktionalitet og ydeevne (minus virtualiseringsomkostninger). Den eneste undtagelse er Present(). Der er i øjeblikket ingen præsentationsintegration med WSL, da WSL i dag kun er en konsoloplevelse. D3D12 API kan bruges til offscreen-gengivelse og beregning, men der er ingen swapchain-understøttelse til at kopiere pixels direkte til skærmen.
DxCore (libdxcore.so) er en forenklet version af dxgi, hvor ældre aspekter af API'et er blevet erstattet af moderne versioner. DxCore er tilgængelig på både Windows og Linux. DxCore bruges også til at være vært for en flad version af D3DKMT API, der bruges af en WDDM-baseret driver på Windows til at tale med GPU'en. Denne API abstraherer forskellene i, hvordan de forskellige WDDM-tjenester kommer til kernen (servicetabel på Windows versus IOCTL på Linux).
libd3d12.so og libdxcore.so er lukket kildekode, prækompilerede binære filer i brugertilstand, der leveres som en del af Windows. Disse binære filer er kompatible med glibc-baserede distros og monteres automatisk under /usr/lib/wsl/lib og gjort synlig for læsseren. Med andre ord fungerer disse API'er lige ud af kassen uden behov for at installere yderligere pakker eller justere distroens konfiguration. Support er i øjeblikket begrænset til glibc-baserede distributioner, herunder Ubuntu, Debian, Fedora, Centos, SUSE og så videre.
D3D12 ville ikke være i stand til at fungere uden en GPU-specifik brugertilstandsdriver (UMD) leveret af GPU-producentens partnere. UMD er ansvarlig for ting som at kompilere shaders til hardwarespecifik bytekode og oversætte API-gengivelsesanmodninger til faktiske GPU-instruktioner i kommandobuffere, der skal udføres af GPU'en. Værtsdriverpakken er monteret inde i WSL på /usr/lib/wsl/drivers og er direkte tilgængelig for d3d12 API. Igen kræves WDDM 2.9-driver.
Microsoft arbejder også på at bringe GPU-acceleration til OpenGL, OpenCL & Vulkan i WSL gennem Mesa-biblioteket.
Understøttelse af DxCore, D3D12, DirectML og NVIDIA CUDA kommer til en Windows Insider Hurtig opbygning snart. Fast-ringen er i øjeblikket på Mangan (Mn) OS gren. Fast-ringen forventes at skifte til den nye Jern (Fe) gren
mod den senere del af juni, som vil afsløre denne nye funktionalitet for Insiders.