- Valve ו-Collabora עובדות על העברת מנהל ההתקן בקוד פתוח Vulkan, RADV, המקורב ללינוקס, לסביבת Windows.
- הפרויקט שואף להציע אלטרנטיבה חינמית לדרייברים הקנייניים של AMD, ובכך להקל על ניפוי שגיאות ושיפור קהילתי.
- המכשול הטכני העיקרי הוא היעדר תיעוד מ-AMD בנוגע לדרייבר הליבה שלה ב-Windows, מה שמאלץ אותנו לפנות להנדסה הפוכה.
אם אתם נלהבים מחומרה ותוכנה בקוד פתוח, סביר להניח ששמעתם שלינוקס בדרך כלל מקדימה את העקומה בכל הנוגע לדרייברים בקוד פתוח של AMD. ובכן, מסתבר ש- Valve לא מסתפקת רק ב-SteamOS והחליטה להפנות את תשומת ליבה ל-Windows כדי לנסות ולהביא את הקסם הזה לפלטפורמה. המטרה היא להביא את דרייברי RADV, היהלום שבכתר של Vulkan במערכת האקולוגית של Mesa Linux, למערכת ההפעלה של מיקרוסופט.
המהלך הזה אינו סתם רעיון אקראי; זהו פרויקט רציני בהובלת Collabora עם גיבוי כספי מ-Valve. המטרה אינה להיפטר מהדרייברים הרשמיים של AMD, אלא ליצור שכבה משלימה המאפשרת למשתמשים ולמפתחים גמישות ושליטה גדולות יותר על האופן שבו כרטיסי המסך שלהם מטפלים ב-API של Vulkan ב-Windows.
מה זה בעצם RADV ולמה הוא כל כך מיוחד?

למי שלא מכיר, RADV הוא דרייבר מרחב משתמש שמיישם את Vulkan עבור כרטיסי מסך של AMD המבוססים על ארכיטקטורות GCN ו-RDNA. בלינוקס, זהו למעשה הסטנדרט והוא הרכיב המרכזי שגורם ל-Steam Deck לפעול בצורה חלקה כל כך. בהיותו קוד פתוח, כל מי שיש לו את הידע הדרוש יכול להציע שיפורים, לתקן באגים במהירות ולמטב ביצועים מבלי להמתין לעדכון רשמי מהיצרן.
הבאת זה ל-Windows תשנה את כללי המשחק. במקום להסתמך אך ורק על קבצי ה-blob הבינאריים הסגורים של AMD, זה יאפשר לקהילת מפתחי המשחקים לדווח על באגים ולמטב את הקוד ישירות, בין אם הם משתמשים ב-Windows או ב-Linux, ובכך לאחד את בסיס הפיתוח.
האתגר הטכני: המאבק בקוד סגור

כאן הדברים מסתבכים. כדי שמנהל התקן משתמש (UMD) יעבוד, הוא צריך לתקשר עם מנהל התקן ליבה (KMD). בלינוקס, זה פשוט הודות לשקיפות של ליבת לינוקס ו-DRM uAPI. אבל ב-Windows, מנהל התקן הליבה של AMD הוא קופסה שחורה מלאה בקוד אטום.
- הנדסה הפוכה: מכיוון שאין תיעוד ציבורי, הצוות נאלץ להסיק כיצד פועלים מבני הנתונים הפרטיים של AMD.
- שבריריות המערכת: מכיוון ש-AMD יכולה לשנות מבנים אלה בכל עדכון ללא הודעה מוקדמת, מנהל ההתקן של RADV עשוי להפסיק לפעול בן לילה.
- תלות רשמית של KMD: כתיבת מנהל התקן ליבה מאפס עבור Windows אינה אפשרית, לכן יש להשתמש ב-RADV. לחיות עם הנהג הקנייני מבית AMD.
קולבורה קראה ל-AMD לספק את התיעוד הדרוש כדי להבטיח תקשורת יציבה בין שני המודולים. אם AMD תנקוט בצעד זה, היא תדגים כי מחויבותה לקוד פתוח אינה רק הייפ שיווקי, אלא מציאות טכנית אמיתית.
אבני דרך שהושגו והמקרה של Counter-Strike 2

למרות המכשולים בדרך, הפרויקט עשה התקדמות אדירה. הוא עבר משלב ניסיוני שבו המערכת קורסת לאחר מספר דקות בלבד לגרסה חזקה וניידת הרבה יותר, שכבר אינה תלויה ב-WSL (מערכת משנה של Windows עבור לינוקס), הפועלת באופן טבעי במערכת. הם יישמו שיפורים בסנכרון, ניהול זרימת פקודות ותכונות מתקדמות כגון shaders של משימות ו-tessellation.
רגע ה"יוריקה" הגיע כשהצליחו להריץ את Counter-Strike 2 באמצעות RADV על Windows . כדי להשיג זאת, פשוט הפעילו את הרינדור של Vulkan באמצעות הפקודה `-vulkan`. למרות שהוא עדיין לא עומד במלואו בכל הסטנדרטים של מפרט Vulkan, העובדה שמשחק מסחרי מודרני יכול להריץ אותו היא הוכחה הרסנית להיתכנות.
כיצד פועלת המערכת הפנימית של RADV

כדי להבין את המורכבות, חשוב לדעת ש-RADV מטפל במשימות קריטיות כמו קומפילציית שיידרים . התהליך מרתק: הם מקבלים את הקוד בפורמט SPIR-V, ממירים אותו לייצוג ביניים בשם NIR לצורך אופטימיזציה, ולבסוף משתמשים בקומפיילר בשם ACO כדי להמיר אותו לשפה המקורית שמבינה ה-GPU של AMD.
בעוד שמנהל ההתקן של הליבה מטפל בניהול צריכת חשמל, זיכרון וידאו ותקשורת עם ה-GPU דרך יציאת PCIe, RADV אחראי על רישום פקודות בפורמט בינארי (מנות PM4) שהכרטיס יכול לעבד. חלוקת משימות זו היא מה שהופכת את מנהל ההתקן ליעיל כל כך בלינוקס, ואת מה ש-Collabora שואפת לשכפל בסביבת Windows.
יוזמה זו מייצגת צעד נועז לקראת דמוקרטיזציה של מנהלי התקנים גרפיים, במטרה להביא את החופש והיעילות של Mesa למיליוני משתמשי מחשב. בעוד שהדרך רצופה מכשולים עקב האופי הסגור של Windows ו-AMD, הקוד זמין כעת ב-GitLab לכל אחד לבחון, ומדגים שרוח שיתוף הפעולה של Valve ו-Collabora יכולה לשנות את האופן שבו אנו מבינים משחקים ב-Windows.