לאחרונה מפתחי Collabora שוחררו באמצעות פוסט בבלוג, בקר גליום חדש עבור מסה, המיישמת שכבת ביניים לארגן OpenCL 1.2 ו- OpenGL 3.3 API על נהגים עם תמיכה ב- DirectX 12 (D3D12) וכי קוד המקור שלהם שוחרר תחת רישיון MIT.
הבקר המוצע יעשה זאת מאפשר לך להשתמש ב- Mesa במכשירים שאינם תואמים בתחילה עם OpenCL ו- OpenGL וגם כעמדת התחלה ליציאת יישומי OpenGL / OpenCL לעבודה על D3D12. עבור יצרני GPU, תת המערכת מאפשרת תמיכה ב- OpenCL וב- OpenGL, כאשר מנהלי התקנים תומכים רק ב- D3D12.
בפוסט בבלוג שלהם, המפתחים משתפים:
בחודשים האחרונים עבדנו על שני פרויקטים חדשים ומרתקים בקולורברה, וזה סוף סוף הזמן לחלוק מידע עליהם עם העולם ...
של תוכניות מיידיות, נצפתה ההישג של האישור המלא של המבחנים של תמיכה ב- OpenCL 1.2 ו- OpenGL 3.3, אימות תאימות ליישומים והכללת שיטות עבודה מומלצות בהרכב העיקרי של מסה.
על הבקר החדש
הפיתוח של הנהג החדש מתבצע בשיתוף עם מהנדסי מיקרוסופט לפתח כלים D3D11On12 לערכות העברה D3D11 ולספריית TransLayer D3D12 D3D12, כמו גם מכשירים פרימיטיביים גרפיים סטנדרטיים על גבי D3D12.
היישום כולל מנהל התקן גליום, מהדר OpenCL, זמן הריצה של OpenCL, ומהדר ההצללות NIR-to-DXIL, הממיר את ייצוג הביניים של הצללות NIR המשמשות במסה לפורמט DXIL בינארי (שפת ביניים DirectX), התואם ל- DirectX 12 ומבוסס על קוד סיביות LLVM 3.7 (של מיקרוסופט מהדר DirectX Shader הוא למעשה מזלג מורחב של LLVM 3.7). מהדר OpenCL הוכן על סמך הניסיון של פרויקט LLVM וערכת הכלים SPIRV-LLVM.
עבודה זו מתבססת על עבודות קודמות רבות. ראשית, אנו בונים זאת באמצעות Mesa 3D, עם ממשק גליום כבסיס לשכבת OpenGL ו- NIR כבסיס למהדר OpenCL. אנו משתמשים גם ב- LLVM ובמתרגם ה- SPIRV-LLVM של Khronos כמהדר.
בנוסף, אנו ממנפים את הניסיון של מיקרוסופט ביצירת שכבת התרגום D3D12 שלהם, כמו גם את הניסיון שלנו בפיתוח Zink.
קוד המקור של OpenCL נערך עם קלנג לתוך פסאודוקוד ה- LLVM הבינוניים (LLVM IR), המומר לאחר מכן לייצוג ביניים של ליבת OpenCL בפורמט SPIR-V.
הליבות בייצוג SPIR-V מועברות למסה, תורגם לפורמט NIR, מותאם ומועבר ל- NIR-to-DXIL כדי ליצור הצללות חישוב DXIL מתאימות לביצוע GPU באמצעות זמן ריצה מבוסס DirectX 12. במקום להשתמש בתלתן ביישום OpenCL Mesa, מוצע זמן ריצה חדש של OpenCL, המאפשר המרות ישירות יותר ל- API של DirectX 12.
מנהלי ההתקנים של OpenCL ו- OpenGL מכינים באמצעות ממשק Gallium המסופק ב- Mesa, המאפשר לעקוף את הפרטים של OpenGL בעת יצירת מנהלי התקנים ולתרגם שיחות OpenGL לגופים הקרובים יותר לפרימיטיבים הגרפיים שעבורם GPUs מודרניים פועלים.
מנהל ההתקן של גליום מקבל פקודות של OpenGL ובהשתתפות המתרגם NIR-to-DXIL, הוא בונה מאגרי פקודות שפועלים על גבי ה- GPU באמצעות מנהל ההתקן D3D12.
לבסוף, מפתחים מזכירים שזו עבודה מוקדמת ושהם מצפים שהבקר ישתפר עם הזמן:
זו רק ההכרזה, ונותרה עבודה רבה. יש לנו משהו שעובד כרגע במקרים מסוימים, אבל אנחנו רק מתחילים לשרוט את פני השטח.
קודם כל, עלינו להגיע לרמת התכונות שאליהן אנו הולכים. המטרות שלנו בשלב זה הן לעבור בדיקות התאמה עבור OpenCL 1.2 ו- OpenGL 3.3. יש לנו דרך ארוכה לעבור, אבל עם קצת עבודה קשה וזיעה, אני בטוח שנגיע לשם.
אם אתה מעוניין לדעת יותר על כך, אתה יכול לבדוק את ההערה המקורית ב הקישור הבא או למי שמעוניין לבדוק את קוד המקור יכול לעשות זאת מקישור זה.