В
Ο βασικός στόχος του WebGPU είναι να παρέχει μια ασφαλή, φιλική προς το χρήστη, φορητή και υψηλής απόδοσης διεπαφή προγραμματισμού για την πλατφόρμα Ιστού για να αξιοποιήσει τις τεχνολογίες και τις δυνατότητες τρισδιάστατων γραφικών που παρέχονται από σύγχρονα API γραφικών συστημάτων, όπως το Direct3D 3 σε Windows, Metal σε macOS και Vulkan στο Linux. Εννοιολογικά, το WebGPU διαφέρει από το WebGL με τον ίδιο τρόπο που το Vulkan διαφέρει από το OpenGL και ταυτόχρονα δεν βασίζεται σε ένα συγκεκριμένο API γραφικών, αλλά είναι ένα καθολικό επίπεδο που χρησιμοποιεί γενικά τα ίδια αρχικά χαμηλού επιπέδου που βρίσκονται στο Vulkan, Μέταλλο και Direct12D.
Το WebGPU παρέχει σε εφαρμογές JavaScript έλεγχο χαμηλότερου επιπέδου σχετικά με την οργάνωση, την επεξεργασία και τη μετάδοση εντολών στην GPU, τη διαχείριση των σχετικών πόρων, της μνήμης, των buffer, των αντικειμένων υφής και των μεταγλωττισμένων γραφικών shaders. Αυτή η προσέγγιση σάς επιτρέπει να επιτύχετε υψηλότερη απόδοση για εφαρμογές γραφικών μειώνοντας τα γενικά έξοδα και αυξάνοντας την αποτελεσματικότητα της εργασίας με την GPU.
Το WebGPU καθιστά δυνατή τη δημιουργία ολοκληρωμένων σύνθετων τρισδιάστατων έργων για τον Ιστό που δεν λειτουργούν χειρότερα από αυτόνομα προγράμματα που έχουν άμεση πρόσβαση σε Vulkan, Metal ή Direct3D, αλλά δεν συνδέονται με συγκεκριμένες πλατφόρμες. Το WebGPU παρέχει επίσης πρόσθετες δυνατότητες κατά τη μεταφορά εγγενών προγραμμάτων γραφικών σε μια φόρμα με δυνατότητα web μέσω της χρήσης της τεχνολογίας WebAssembly. Εκτός από τα τρισδιάστατα γραφικά, το WebGPU καλύπτει επίσης δυνατότητες που σχετίζονται με τη μεταφόρτωση υπολογισμών στη GPU και την υποστήριξη ανάπτυξης shader. Shaders
Το WebGPU χρησιμοποιεί ξεχωριστή διαχείριση πόρων, προπαρασκευαστικές εργασίες και μετάδοση εντολών στην GPU (στο WebGL, ένα αντικείμενο ήταν υπεύθυνο για τα πάντα ταυτόχρονα). Παρέχονται τρία ξεχωριστά πλαίσια:
Συσκευή GPU για τη δημιουργία πόρων όπως υφές και buffer. GPUCommandEncoder για την κωδικοποίηση μεμονωμένων εντολών, συμπεριλαμβανομένων των σταδίων απόδοσης και υπολογισμού. Το GPUCommandBuffer θα τεθεί σε ουρά για εκτέλεση στη GPU. Το αποτέλεσμα μπορεί να αποδοθεί σε μια περιοχή που σχετίζεται με ένα ή περισσότερα στοιχεία καμβά ή να υποβληθεί σε επεξεργασία χωρίς έξοδο (για παράδειγμα, κατά την εκτέλεση εργασιών υπολογισμού). Ο διαχωρισμός των σταδίων διευκολύνει τον διαχωρισμό των λειτουργιών δημιουργίας και προετοιμασίας πόρων σε διαφορετικούς χειριστές που μπορούν να εκτελούνται σε διαφορετικά νήματα.
Η δεύτερη διαφορά μεταξύ WebGPU και WebGL είναι μια διαφορετική προσέγγιση στον χειρισμό των καταστάσεων. Το WebGPU προσφέρει δύο αντικείμενα - GPURenderPipeline και GPUComputePipeline, τα οποία σας επιτρέπουν να συνδυάσετε διάφορες καταστάσεις προκαθορισμένες από τον προγραμματιστή, κάτι που επιτρέπει στο πρόγραμμα περιήγησης να μην σπαταλά πόρους σε πρόσθετες εργασίες, όπως η εκ νέου μεταγλώττιση των shaders. Οι υποστηριζόμενες καταστάσεις περιλαμβάνουν: shaders, διατάξεις buffer και χαρακτηριστικών κορυφών, διατάξεις για κολλώδεις ομάδες, ανάμειξη, βάθος και μοτίβα και μορφές εξόδου μετά την απόδοση.
Το τρίτο χαρακτηριστικό του WebGPU ονομάζεται, σε μεγάλο βαθμό, μοντέλο σύνδεσης
θυμίζει τα εργαλεία ομαδοποίησης πόρων που υπάρχουν στο Vulkan.
Για να ομαδοποιήσει τους πόρους μαζί, το WebGPU παρέχει ένα αντικείμενο GPUBindGroup, το οποίο μπορεί να συσχετιστεί με άλλα παρόμοια αντικείμενα για χρήση σε shaders κατά τη σύνταξη εντολών. Η δημιουργία τέτοιων ομάδων επιτρέπει στο πρόγραμμα οδήγησης να εκτελεί τις απαραίτητες προπαρασκευαστικές ενέργειες εκ των προτέρων και επιτρέπει στο πρόγραμμα περιήγησης να αλλάζει τις συνδέσεις πόρων μεταξύ των κλήσεων κλήσεων πολύ πιο γρήγορα. Η διάταξη των δεσμεύσεων πόρων μπορεί να προκαθοριστεί χρησιμοποιώντας το αντικείμενο GPUBindGroupLayout.
Στον Firefox, για να ενεργοποιήσετε το WebGPU στο about:config, υπάρχει μια ρύθμιση "dom.webgpu.enabled". Η απόδοση CanvasContext απαιτεί επίσης την ενεργοποίηση της σύνθεσης
Πηγή: opennet.ru