WSL ще получи поддръжка на DirectX в Linux с 21H1 сборки
Microsoft добавя поддръжка на DirectX към Linux дистрибуции, работещи в WSL 2 среда. Промяната влиза в сила с първите версии на 21H1 от клона Iron (Fe) в Fast Ring, които се очаква да дойдат през юни.
Реклама
Microsoft е въвеждане Модел на драйвер за дисплей на Windows версия 2.9, WDDMv2.9, който ще донесе ускорение на GPU до WSL 2. За да стане възможно, има специален модул на ядрото на Linux от страната на WSL, dxgkrnl
.
dxgkrnl
Dxgkrnl е чисто нов драйвер на ядрото за Linux, който разкрива /dev/dxg устройство към потребителски режим Linux. /dev/dxg разкрива набор от IOCTL, които точно имитират собствения слой на услугата на ядрото WDDM D3DKMT в Windows. Dxgkrnl вътре в ядрото на Linux се свързва през VM Bus със своя по-голям брат на хоста на Windows и използва тази връзка с VM шина за комуникация с физическия GPU.
Ако хостът има множество графични процесори, всички графични процесори се проектират и са достъпни за средата на Linux (ако приемем, че всички тези графични процесори работят с WDDMv2.9 драйвери).
Microsoft твърди, че архитектурата няма да ограничава или пречи на производителността на WSL приложения и GPU ресурси ще бъдат правилно споделени между приложенията на Windows, работещи заедно с Linux GUI и конзолните приложения, които използват DirectX.
Dxgkrnl Linux изданието се прави с отворен код.
DxCore & D3D12 на Linux
Този проект носи пълен D3D12 API за Linux без imitations.ibd3d12.so е компилиран от същия изходен код като d3d12.dll в Windows, но за цел на Linux. Той предлага същото ниво на функционалност и производителност (минус режийни разходи за виртуализация). Единственото изключение е Present(). Понастоящем няма интеграция на презентации с WSL, тъй като WSL днес е само конзолно изживяване. D3D12 API може да се използва за изобразяване и изчисление извън екрана, но няма поддръжка на суапчейн за копиране на пиксели директно на екрана.
DxCore (libdxcore.so) е опростена версия на dxgi, където наследените аспекти на API са заменени от съвременни версии. DxCore е достъпен както за Windows, така и за Linux. DxCore се използва и за хостване на плоска версия на D3DKMT API, използвана от WDDM базиран драйвер на Windows за разговор с графичния процесор. Този API абстрахира разликите в начина, по който различните WDDM услуги си проправят път към ядрото (таблица на услугите в Windows срещу IOCTL в Linux).
libd3d12.so и libdxcore.so са с затворен код, предварително компилирани двоични файлове в потребителски режим, които се доставят като част от Windows. Тези двоични файлове са съвместими с базирани на glibc дистрибуции и се монтират автоматично под /usr/lib/wsl/lib и става видима за товарача. С други думи, тези API работят директно от кутията, без да е необходимо да инсталирате допълнителни пакети или да променяте конфигурацията на дистрибуцията. Понастоящем поддръжката е ограничена до базирани на glibc дистрибуции, включително Ubuntu, Debian, Fedora, Centos, SUSE и т.н.
D3D12 не би могъл да работи без драйвер за специфичен потребителски режим на GPU (UMD), предоставен от партньорите производители на графични процесори. UMD е отговорен за неща като компилиране на шейдъри в хардуерен байтов код и преобразуване на заявките за изобразяване на API в действителни инструкции на GPU в командните буфери, които да бъдат изпълнени графичния процесор. Пакетът с драйвери за хост е монтиран вътре в WSL в /usr/lib/wsl/drivers и е директно достъпен до API на d3d12. Отново е необходим драйвер за WDDM 2.9.
Microsoft също работи върху въвеждането на GPU ускорение за OpenGL, OpenCL и Vulkan в WSL чрез библиотеката Mesa.
Поддръжка за DxCore, D3D12, DirectML и NVIDIA CUDA идва при а Windows Insider Бързо изграждане скоро. Бързият пръстен в момента е на манган (Mn) клон на ОС. Очаква се Fast ring да премине към новия Железен (Fe) клон
към по-късната част на юни, което ще изложи тази нова функционалност на вътрешни хора.