W3C חושפת טיוטת תקן WebGPU

Консорциум W3C представил первые черновые варианты спецификаций WebGPU и WebGPU Shading Language (WGSL), определяющих API для выполнения операций на GPU, таких как рендеринг и вычисления, а также язык шейдров для написания программ, работающих на стороне GPU. концептуально схожий с API Vulkan, Metal и Direct3D 12. Спецификации подготовлены рабочей группой, в которую вошли инженеры из Mozilla, Google, Apple и Microsoft.

Концептуально WebGPU отличается от WebGL примерно так же, как графический API Vulkan отличается от OpenGL, но при этом не основывается на конкретном графическом API, а представляет собой универсальную прослойку, использующую те же низкоуровневые примитивы, что имеются в Vulkan, Metal и Direct3D. WebGPU предоставляет приложениям на JavaScript средства для низкоуровневого контроля за организацией, обработкой и передачей команд к GPU, управления связанными ресурсами, памятью, буферами, объектами текстур и скомпилированными графическими шейдерами. Подобный подход позволяет добиться более высокой производительности графических приложений за счёт снижения накладных расходов и повышения эффективности работы с GPU.

WebGPU даёт возможность создавать для Web сложные 3D-проекты, работающие не хуже, чем обособленные программы, напрямую обращающиеся с Vulkan, Metal или Direct3D, но не привязанные к конкретным платформам. WebGPU также предоставляет дополнительные возможности при портировании нативных графических программ в форму, способную работать на базе web-технологий, благодаря компиляции в WebAssembly. Кроме 3D-графики WebGPU охватывает и возможности, связанные с выносом вычислений на сторону GPU и выполнением шейдеров.

תכונות עיקריות של WebGPU:

  • ניהול נפרד של משאבים, עבודת הכנה והעברת פקודות ל-GPU (ב-WebGL אובייקט אחד היה אחראי על הכל בבת אחת). שלושה הקשרים נפרדים מסופקים: GPUDevice ליצירת משאבים כגון מרקמים ומאגרים; GPUCommandEncoder לקידוד פקודות בודדות, כולל שלבי רינדור וחישוב; GPUCommandBuffer שיעמוד בתור לביצוע ב-GPU. ניתן להציג את התוצאה באזור המשויך לאלמנט אחד או יותר של קנבס, או לעבד ללא פלט (לדוגמה, בעת הפעלת משימות מחשוב). הפרדת השלבים מקלה על הפרדת פעולות יצירת משאבים והכנה למטפלים שונים שיכולים לפעול על שרשורים שונים.
  • גישה שונה לעיבוד מצבים. WebGPU מציע שני אובייקטים - GPURenderPipeline ו-GPUComputePipeline, המאפשרים לשלב מצבים שונים שהוגדרו מראש על ידי המפתח, מה שמאפשר לדפדפן לא לבזבז משאבים על עבודה נוספת, כמו הידור מחדש של הצללות. המצבים הנתמכים כוללים: הצללות, פריסות חיץ קודקוד ותכונה, פריסות קבוצות דביקות, מיזוג, עומק ותבניות ותבניות פלט לאחר רינדור.
  • מודל מחייב בדומה לתכונות קיבוץ המשאבים של Vulkan. כדי לקבץ משאבים יחדיו, WebGPU מספק אובייקט GPUBindGroup, שניתן לשייך לאובייקטים דומים אחרים לשימוש בהצללות בזמן כתיבת פקודות. יצירת קבוצות כאלה מאפשרת לנהג לבצע את פעולות ההכנה הדרושות מראש, ומאפשרת לדפדפן לשנות כריכות משאבים בין קריאות לצייר הרבה יותר מהר. ניתן להגדיר מראש את הפריסה של כריכות משאבים באמצעות האובייקט GPUBindGroupLayout.

מקור: OpenNet.ru

הוספת תגובה