Tak se zdá, že tu máme jednu ze zpráv z kategorie „silničáře zaskočila zima v pekle“. Možná jste už někde viděli větu typu, že jedna z věcí, kterou Microsoft nikdy neudělá, je vydat Direct3D pro Linux, aby na něm fungovaly hry a podobně. A vidíte, udělal. Microsoft oznámil, že do Linuxu přidává nejen podporu Direct3D, ale také OpenCL, OpenGL a Cuda ve spolupráci s Nvidií. Háček je samozřejmě v tom, že se to netýká klasických linuxových distribucí, v kterých Microsoft nemá prsty, ale pouze vrstvy Windows Subsystem for Linux. To je Linuxové prostředí, spouštěné nad operačním systémem Windows 10 a doposud atraktivní hlavně pro vývojáře/vývojářky pracující v příkazové řádce. Teď ale Microsoft oznámil, že WSL dostane podporu přímo grafických GUI programů a s tím i GPU akceleraci a právě Direct3D. Množství linuxového softwaru, které bude možné používat, hodně vzroste, ale současně se tu otevírá prostor i pro porty her pro Windows. Není to tedy taková revoluce, jaká by mohla být, ale kdo ví... odpusťe tedy ironický výkřik v titulu.
Direct3D v Linuxu (pokud ho máte na Windows)
Dosud byly subsystémy WSL a WSL2 (jeho alternativa používající virtualizaci přes Hyper-V a reálné linuxové jádro) míněné pro běh aplikací a softwaru pro příkazovou řádku. Grafické aplikace oficiálně podporované nebyly, i když se s trochou snahy zprovoznit daly. Nově ale Microsoft do Linuxového prostředí přináší i virtualizaci GPU, které je pak možné používat v Linuxovém subsystému a s tímto přichází i podpora GUI aplikací.
Tuto schopnost dostane virtualizovaná verze WSL 2, nikoliv původní verze WSL. Stojí totiž na paravirtualizaci grafického hardwaru, pro což také vyžaduje ovladač podporující WDDMv2.9 (Windows Display Driver Model v2.9).
Microsoft zároveň vyvinul ovladač dxgkrnl pro Linuxové jádro, který zprostředkovává virtualizované GPU uživatelskému prostředí virtualizovaného Linuxu jako zařízení /dev/dxg. Tento ovladač vytváří vrstvu, která je velmi blízká nativnímu ovladači pro Direct3D ve Windows.
Paravirtualizace GPU a ovladač dxgkrnl tím dává aplikacím běžícím v linuxovém subsystému schopnost používat grafické API Direct3D, které bylo dosud ostře stráženou exkluzivitou systému Windows. Přesněji bude dostupné API Direct3D 12, starší verze zřejmě ne.
Zjednodušeně to zřejmě funguje tak, že pomocí tohoto ovladače se v hostovaném systému (Linuxu) de facto dá zprostředkovaně běžet nad grafickým ovladačem hostujícího systému (Windows). Toto je mimochodem odpověď na otázku, proč můžeme mít Direct3D 12 na Linuxu, ale nešlo to udělat na Windows 7, kterou si možná řada z vás položí: Protože pod tím Linuxem běží Windows 10, bez kterého to nejde, a pod Windows 7 ne.
Microsoft uvádí, že na takovém systému mají jak programy pod Linuxem, tak nativní pod Windows zcela rovnocenné možnosti využití GPU – to je sdílené a obě strany mohou dostat k dispozici všechny jeho prostředky, sdílení je dynamické podle potřeby. I výkon by měl být stejný, pokud se odmyslí určitá režie virtualizace. Pokud máte v počítači více GPU (a všechny mají ovladač WDDMv2.9), vidí je Linux všechny. Zařízení /dev/dxg se objeví automaticky, není potřeba instalovat žádné přídavné balíčky.
Knihovny pro Direct3D jsou ze stejného kódu jako na Windows
Ovladač dxgkrnl je implementovaný jako od základu nový a open source kód (GitHub), nevycházející ze zdrojového kódu pro Windows. Ovšem samotné API Direct3D nad tímto ovladačem bude implementovat jako uzavřená knihovna, což znamená, že ji nebude možné převzít do vrstev jako Wine a Proton a přidat tak podporu i na běžné linuxové distribuce běžící přímo na hardwaru. Microsoft toto řešení má napsané jen pro potřeby linuxového subsystému běžícího nad operačním systémem Windows (nepřekvapivě).
Knihovny libd3d12.so a libdxcore.so, které Direct3D 12 pod Linuxem poskytuje, jsou closed-source i z toho důvodu, že zde už to není žádná alternativní implementace. Jde přímo o tentýž čistokrevný software, který MS používá ve Windows, jen je překompilovaný, aby fungoval s ovladačem dxgkrnl na Linuxu.
Podpora GPU akcelerace pro AI (hlavní motivace?)
Microsoft také na linuxový subsystém naportoval DirectML (dříve WinML), což je vrstva pro aplikace strojového učení/umělé inteligence, také vybudovaná nad Direct3D. Tato technologie se tedy také bude dát využívat. Pokud platí, že Microsoft chce celým WSL/WSL 2 hlavně lákat vývojáře z nativních Linuxů na Windows, pak zde se asi míří na vývojáře AI aplikací.
Možná právě tento sektor pomohl Microsoft přesvědčit k implementaci GPU akcelerace. Podle tohoto mailu od vývojářů je vůbec i portace (respektive, zprostředkování) DirectX 12 v Linuxu celé motivované hlavně tím, že je to nejsnazší cesta, jak sdílet GPU současně mezi virtualizovaným WSL a nativními Windows. Normální virtualizace by totiž grafiku odňala hlavnímu OS, ale pokud je sdílená, mohou ji využívat obě vrstvy. Na to ale zřejmě Microsoft potřebuje, aby v obou vrstvách bylo použité totéž API, čili DirectX.
The plan is for Microsoft to provide shims to allow the existing Linux userspace interact with DX12; I'll explain below why we had to pipe DX12 all the way into the Linux guest, but this is *not* to introduce DX12 into the Linux world as competition. There is no intent for anyone in the Linux world to start coding for the DX12 API.
(...)
There is a single usecase for this: WSL2 developer who wants to run machine learning on his GPU. The developer is working on his laptop, which is running Windows and that laptop has a single GPU that Windows is using.
Since the GPU is being used by Windows, we can't assign it directly to the Linux guest, but instead we can use GPU Partitioning to give the guest access to the GPU. This means that the guest needs to be able to "speak" DX12, which is why we pulled DX12 into Linux.
Bude i OpenGL, OpenCL a dokonce i Cuda
Ovšem nejen AI aplikace budou moci používat GPU. Nad touto podporou pro Direct3D plánuje Microsoft mít ještě překladové vrstvy, které zprovozní také API OpenGL a OpenCL v rámci Mesa. Ty pak budou moci využít všechny programy pro Linux, které s těmito rozhraními pracují. Microsoft zvažuje i wrapper přidávající nad Direct3D podporu Vulkanu, ale to asi ještě není hotové rozhodnutí.
Zajímavé je, že v linuxovém subsystému dokonce bude dostupná i podpora výpočtů přes API Nvidia Cuda, které je proprietární věcí toto výrobce GPU. Toto je dílem spolupráce mezi Microsoftem a Nvidií. Bude dostupná plně funkční verze knihovny libcuda.so s akcelerací Cuda-X, cuDNN, cuBLAS a TensorRT. Také toto bude automaticky dostupné v Linuxu, pokud máte grafiku Nvidia s patřičným ovladačem s podporou WDDMv2.9.
Článek pokračuje na další straně informacemi o podpoře GUI aplikací ve WSL 2.
V linuxovém subysystému Windows už půjdou i GUI aplikace
Akcelerace 3D grafiky a her by ovšem neměla moc smysl, pokud by prostředíWindows Subsystem for Linux bylo pořád oficiálně určený jenom pro programy běžící v příkazové řádce. Spolu s tím na předchozí stránce proto přichází další novinka: oficiální podpora GUI (tedy okenních, grafických a klikacích) programů.
I ty budou fungovat ve WSL 2 (opět tedy ne v první verzi WSL), aniž by se musel nějak hackovat X-server (a mít špatný výkon) a takové okenní aplikace budou běžet na ploše počítače jako by to byly aplikace nativní. Cílem Microsoftu jsou asi zejména různá prostředí IDE pro programování, protože vývojáři zůstávají hlavní cílovou skupinu, na níž je linuxový subsystém zaměřen.
Zde Microsoft bohužel zatím nesdělil víc podrobností o fungování, ale pokud bude podpora pro okenní software dostatečně generická, mělo by být možné spouštět všemožné programy, které nemají na Windows dostupný port, jako třeba aplikace prostředí KDE nebo Gnome. Případně i hry napsané pro Linux.
Všechny tyto novinky by se měly začít během příštích měsíců objevovat v testovacích vydáních Windows 10 (ve fast ringu) a budete je moci vyzkoušet či dokonce používat, pokud jste zapojení do programu Windows Insider.
Nejprve bude 3D akcelerace a AI frameworky, GUI aplikace později
Microsoft uvádí, že první vlna má přijít okolo druhé poloviny června (júna), když se do fast ringu dostane větev „Iron“ (Fe). V této vlně by měly přijít podpora Direct3D 12 a DxCore, DirectML, Cuda. Také v této době se má objevit podpora TensorFlow.
Vrstva, která bude nad Direct3D 12 poskytovat také podporu pro OpenCL a OpenGL má přijít až později, opět v sestaveních programu Insider. Ve stejném termínu se má v tomto kanále objevit také podpora GUI aplikace ve WSL 2. Zde ale Mirosoft nesdělil žádná data. Toto bude upřesněno později, až se vydání přiblíží, přičemž Microsoft by opět měl novinku víc přiblížit a popsat v blozích.
Zdroj: DirectX Developer Blog