WSL תקבל תמיכת DirectX בלינוקס עם בניית 21H1
מיקרוסופט מוסיפה תמיכת DirectX להפצות לינוקס הפועלות בסביבת WSL 2. השינוי עולה לאוויר עם הבנייה הראשונה של 21H1 מסניף Iron (Fe) ב-Fast Ring, שצפויות להגיע ביוני הקרוב.
פרסומת
מיקרוסופט היא מציגים Windows Display Driver Model גרסה 2.9, WDDMv2.9, שתביא את האצת ה-GPU ל-WSL 2. כדי לאפשר זאת, ישנו מודול ליבת לינוקס מיוחד בצד של WSL, dxgkrnl
.
dxgkrnl
Dxgkrnl הוא מנהל התקן ליבה חדש לגמרי עבור לינוקס שחושף את /dev/dxg מכשיר למצב משתמש לינוקס. /dev/dxg חושף קבוצה של IOCTL המחקה מקרוב את שכבת השירות המקורית של WDDM D3DKMT ב-Windows. Dxgkrnl בתוך ליבת לינוקס מתחבר דרך ה-VM Bus לאחיו הגדול במארח Windows ומשתמש בחיבור האוטובוס VM הזה כדי לתקשר עם ה-GPU הפיזי.
אם למארח יש מספר GPUs, כל ה-GPUs מוקרנים וזמינים לסביבת Linux (בהנחה שכל ה-GPUs הללו מריצים מנהלי התקן WDDMv2.9).
מיקרוסופט טוענת שהארכיטקטורה לא תגביל או תפריע לביצועים של אפליקציות WSL ומשאבי GPU ישותפו כראוי בין אפליקציות Windows הפועלות לצד ה-Linux GUI ואפליקציות מסוף המשתמשות DirectX.
מהדורת Linux Dxgkrnl הופכת לקוד פתוח.
DxCore ו-D3D12 בלינוקס
פרויקט זה מביא D3D12 API מלא ללינוקס ללא imitations.ibd3d12.so מורכב מאותו קוד מקור כמו d3d12.dll ב-Windows אבל עבור יעד לינוקס. הוא מציע את אותה רמה של פונקציונליות וביצועים (מינוס תקורה של וירטואליזציה). החריג היחיד הוא Present(). נכון לעכשיו אין שילוב מצגות עם WSL מכיוון ש-WSL היא חוויית קונסולה בלבד כיום. ניתן להשתמש ב-API של D3D12 לעיבוד ולמחשוב מחוץ למסך, אך אין תמיכה ב-swapchain להעתקת פיקסלים ישירות למסך.
DxCore (libdxcore.so) היא גרסה פשוטה של dxgi שבה היבטים מדור קודם של ה-API הוחלפו בגרסאות מודרניות. DxCore זמין גם ב-Windows וגם ב-Linux. DxCore משמש גם לארח גרסה שטוחה של D3DKMT API המשמש מנהל התקן מבוסס WDDM ב-Windows כדי לדבר עם ה-GPU. API זה מפשט את ההבדלים באופן שבו שירותי ה-WDDM השונים עושים את דרכם אל הליבה (טבלת שירות ב-Windows לעומת IOCTL ב-Linux).
libd3d12.so ו-libdxcore.so הם קובצי קוד סגור, הידורים בינאריים של מצב משתמש מראש הנשלחים כחלק מ-Windows. קבצים בינאריים אלה תואמים להפצות מבוססות glibc ומותקן אוטומטית מתחת /usr/lib/wsl/lib ונראה למעמיס. במילים אחרות, ממשקי API אלה פועלים ישירות מהקופסה ללא צורך להתקין חבילות נוספות או לשנות את תצורת ההפצה. התמיכה מוגבלת כרגע להפצות מבוססות glibc, כולל אובונטו, דביאן, פדורה, סנטוס, SUSE וכן הלאה.
D3D12 לא יוכל לפעול ללא מנהל התקן GPU ספציפי למצב משתמש (UMD) שסופק על ידי שותפי יצרן GPU. ה-UMD אחראי לדברים כמו קומפילציה של shaders לקוד בייט ספציפי לחומרה ו תרגום בקשות רינדור API להוראות GPU בפועל במאגרי פקודות שיבוצעו על ידי ה-GPU. חבילת מנהל ההתקן המארח מותקנת בתוך WSL בכתובת /usr/lib/wsl/drivers ונגישה ישירות ל-d3d12 API. שוב נדרש מנהל התקן WDDM 2.9.
מיקרוסופט עובדת גם על הבאת האצת GPU עבור OpenGL, OpenCL ו-Vulkan ב-WSL דרך ספריית Mesa.
תמיכה עבור DxCore, D3D12, DirectML ו-NVIDIA CUDA מגיע לא Windows Insider בנייה מהירה בקרוב. הטבעת המהירה נמצאת כרגע על מנגן (Mn) סניף OS. הטבעת המהירה צפויה לעבור לחדשה ענף ברזל (Fe).
לקראת החלק המאוחר של יוני אשר יחשוף את הפונקציונליות החדשה הזו בפני Insiders.