WSL va primi asistență DirectX în Linux cu versiuni 21H1
Microsoft adaugă suport DirectX la distribuțiile Linux care rulează într-un mediu WSL 2. Schimbarea intra în vigoare cu primele versiuni 21H1 din filiala Iron (Fe) din Fast Ring, care sunt așteptate să vină în luna iunie.
Microsoft este Introducand Windows Display Driver Model versiunea 2.9, WDDMv2.9, care va aduce accelerarea GPU la WSL 2. Pentru a face acest lucru posibil, există un modul special de kernel Linux pe partea WSL, dxgkrnl
.
dxgkrnl
Dxgkrnl este un driver de kernel nou-nouț pentru Linux, care expune /dev/dxg dispozitiv la modul utilizator Linux. /dev/dxg expune un set de IOCTL care imită îndeaproape stratul nativ de serviciu kernel WDDM D3DKMT pe Windows. Dxgkrnl din interiorul nucleului Linux se conectează prin VM Bus la fratele său mai mare de pe gazda Windows și utilizează această conexiune de magistrală VM pentru a comunica cu GPU-ul fizic.
Dacă gazda are mai multe GPU-uri, toate GPU-urile sunt proiectate și disponibile pentru mediul Linux (presupunând că toate aceste GPU-uri rulează drivere WDDMv2.9).
Microsoft susține că arhitectura nu va limita sau interfera performanța aplicațiilor WSL și a resurselor GPU vor fi partajate corect între aplicațiile Windows care rulează împreună cu GUI Linux și aplicațiile de consolă care utilizează DirectX.
Ediția Dxgkrnl Linux este făcută open source.
DxCore și D3D12 pe Linux
Acest proiect aduce API-ul D3D12 complet la Linux fără imitații.ibd3d12.so este compilat din același cod sursă ca d3d12.dll pe Windows, dar pentru o țintă Linux. Oferă același nivel de funcționalitate și performanță (minus overhead de virtualizare). Singura excepție este Present(). În prezent, nu există nicio integrare a prezentărilor cu WSL, deoarece WSL este o experiență doar pentru consolă astăzi. API-ul D3D12 poate fi folosit pentru randarea și calculul în afara ecranului, dar nu există suport swapchain pentru a copia pixelii direct pe ecran.
DxCore (libdxcore.so) este o versiune simplificată a dxgi în care aspectele moștenite ale API-ului au fost înlocuite cu versiuni moderne. DxCore este disponibil atât pe Windows, cât și pe Linux. DxCore este, de asemenea, folosit pentru a găzdui o versiune plată a API-ului D3DKMT utilizat de un driver bazat pe WDDM pe Windows pentru a vorbi cu GPU-ul. Acest API retrage diferențele în modul în care diferitele servicii WDDM își fac drumul către kernel (tabelul de servicii pe Windows versus IOCTL pe Linux).
libd3d12.so și libdxcore.so sunt sursă închisă, binare pre-compilate în modul utilizator care sunt livrate ca parte a Windows. Aceste binare sunt compatibile cu distribuțiile bazate pe glibc și sunt montate automat sub /usr/lib/wsl/lib și făcut vizibil pentru încărcător. Cu alte cuvinte, aceste API-uri funcționează imediat fără a fi nevoie să instalați pachete suplimentare sau să modificați configurația distribuției. Suportul este în prezent limitat la distribuțiile bazate pe glibc, inclusiv Ubuntu, Debian, Fedora, Centos, SUSE și așa mai departe.
D3D12 nu ar putea funcționa fără un driver pentru modul utilizator specific GPU (UMD) furnizat de partenerii producătorilor de GPU. UMD este responsabil pentru lucruri precum compilarea shader-urilor la codul octet specific hardware și traducerea cererilor de randare API în instrucțiuni GPU reale în bufferele de comandă care urmează să fie executate de GPU-ul. Pachetul de driver gazdă este montat în interiorul WSL la /usr/lib/wsl/drivers și accesibil direct la API-ul d3d12. Din nou, este necesar driverul WDDM 2.9.
Microsoft lucrează, de asemenea, la aducerea accelerării GPU pentru OpenGL, OpenCL și Vulkan în WSL prin biblioteca Mesa.
Suport pentru DxCore, D3D12, DirectML și NVIDIA CUDA se apropie de a Windows Insider Construire rapidă în curând. Inelul rapid este în prezent pe Mangan (Mn) ramura OS. Se așteaptă ca inelul rapid să treacă la cel nou Ramă de fier (Fe).
spre sfârșitul lunii iunie, care va expune această nouă funcționalitate pentru Insiders.