Το 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, ένα αντικείμενο ήταν υπεύθυνο για όλα ταυτόχρονα). Παρέχονται τρία ξεχωριστά περιβάλλοντα: Συσκευή GPU για τη δημιουργία πόρων όπως υφές και buffer. GPUCommandEncoder για την κωδικοποίηση μεμονωμένων εντολών, συμπεριλαμβανομένων των σταδίων απόδοσης και υπολογισμού. GPUCommandBuffer για μετάβαση στην ουρά εκτέλεσης της GPU. Το αποτέλεσμα μπορεί να αποδοθεί σε μια περιοχή που σχετίζεται με ένα ή περισσότερα στοιχεία καμβά ή να υποβληθεί σε επεξεργασία χωρίς έξοδο (για παράδειγμα, κατά την εκτέλεση υπολογιστικών εργασιών). Ο διαχωρισμός των σταδίων διευκολύνει τον διαχωρισμό των λειτουργιών δημιουργίας και παροχής πόρων σε διαφορετικούς χειριστές που μπορούν να εκτελούνται σε διαφορετικά νήματα.
  • Μια διαφορετική προσέγγιση στο χειρισμό των κρατών. Το WebGPU παρέχει δύο αντικείμενα - το GPURenderPipeline και το GPUComputePipeline, τα οποία σας επιτρέπουν να συνδυάσετε διαφορετικές καταστάσεις προκαθορισμένες από τον προγραμματιστή, γεγονός που καθιστά δυνατό στο πρόγραμμα περιήγησης να μην σπαταλά πόρους σε πρόσθετες εργασίες, όπως η εκ νέου μεταγλώττιση των shaders. Οι υποστηριζόμενες καταστάσεις περιλαμβάνουν: shaders, διατάξεις buffer και χαρακτηριστικών κορυφών, διατάξεις για κολλώδεις ομάδες, ανάμειξη, βάθος και μοτίβα, μορφές εξόδου μετά την απόδοση.
  • Ένα δεσμευτικό μοντέλο, όπως τα εργαλεία ομαδοποίησης πόρων του Vulkan. Για να ομαδοποιήσει τους πόρους σε ομάδες, το WebGPU παρέχει ένα αντικείμενο GPUBindGroup, το οποίο, τη στιγμή της εγγραφής των εντολών, μπορεί να συσχετιστεί με άλλα παρόμοια αντικείμενα για χρήση σε shaders. Η δημιουργία τέτοιων ομάδων επιτρέπει στο πρόγραμμα οδήγησης να εκτελεί τις απαραίτητες προπαρασκευαστικές ενέργειες εκ των προτέρων και επιτρέπει στο πρόγραμμα περιήγησης να αλλάζει τις συνδέσεις πόρων μεταξύ των κλήσεων κλήσεων πολύ πιο γρήγορα. Η διάταξη των δεσμεύσεων πόρων μπορεί να προκαθοριστεί χρησιμοποιώντας το αντικείμενο GPUBindGroupLayout.

Πηγή: opennet.ru

Προσθέστε ένα σχόλιο