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

เพิ่มความคิดเห็น