W3C เปิดตัวร่างมาตรฐาน WebGPU

W3C ได้เปิดตัวร่างแรกของข้อกำหนด WebGPU และ WebGPU Shading Language (WGSL) ซึ่งกำหนด API สำหรับการดำเนินการ GPU เช่น การเรนเดอร์และการประมวลผล รวมถึงภาษาเชเดอร์สำหรับการเขียนโปรแกรมที่ทำงานบน GPU แนวคิดคล้ายกับ Vulkan, Metal และ Direct3D 12 API ข้อมูลจำเพาะจัดทำขึ้นโดยคณะทำงานซึ่งรวมถึงวิศวกรจาก Mozilla, Google, Apple และ Microsoft

ตามหลักการแล้ว WebGPU แตกต่างจาก WebGL ในลักษณะเดียวกับที่ Vulkan กราฟิก API แตกต่างจาก OpenGL แต่ไม่ได้ขึ้นอยู่กับ API กราฟิกเฉพาะ แต่เป็นเลเยอร์สากลที่ใช้พื้นฐานระดับต่ำแบบเดียวกับที่พบใน Vulkan, Metal และ ไดเร็ค3ดี. WebGPU ให้แอปพลิเคชัน JavaScript ที่มีการควบคุมระดับต่ำเหนือองค์กร การประมวลผลและการส่งคำสั่งไปยัง GPU การจัดการทรัพยากรที่เกี่ยวข้อง หน่วยความจำ บัฟเฟอร์ อ็อบเจ็กต์พื้นผิว และเชเดอร์กราฟิกที่คอมไพล์แล้ว แนวทางนี้ช่วยให้คุณได้รับประสิทธิภาพที่สูงขึ้นสำหรับแอปพลิเคชันกราฟิกโดยลดต้นทุนค่าใช้จ่ายและเพิ่มประสิทธิภาพในการทำงานกับ GPU

WebGPU ช่วยให้สามารถสร้างโปรเจ็กต์ 3 มิติที่ซับซ้อนสำหรับเว็บซึ่งทำงานได้ไม่แย่ไปกว่าโปรแกรมสแตนด์อโลนที่เข้าถึง Vulkan, Metal หรือ Direct3D ได้โดยตรง แต่ไม่ได้เชื่อมโยงกับแพลตฟอร์มเฉพาะ WebGPU ยังมอบความสามารถเพิ่มเติมสำหรับการย้ายโปรแกรมกราฟิกเนทิฟไปเป็นรูปแบบที่เปิดใช้งานเว็บผ่านการคอมไพล์ลงใน WebAssembly นอกเหนือจากกราฟิก 3D แล้ว WebGPU ยังมีความสามารถที่เกี่ยวข้องกับการลดภาระการคำนวณไปยัง GPU และการดำเนินการเชเดอร์

คุณสมบัติที่สำคัญของ WebGPU:

  • แยกการจัดการทรัพยากร งานเตรียมการ และการส่งคำสั่งไปยัง GPU (ใน WebGL วัตถุเดียวรับผิดชอบทุกอย่างในคราวเดียว) มีบริบทที่แยกจากกันสามแบบ: GPUDevice สำหรับการสร้างทรัพยากร เช่น พื้นผิวและบัฟเฟอร์; GPUCommandEncoder สำหรับการเข้ารหัสคำสั่งแต่ละคำสั่ง รวมถึงขั้นตอนการเรนเดอร์และการคำนวณ GPUCommandBuffer ที่จะเข้าคิวเพื่อดำเนินการบน GPU ผลลัพธ์สามารถแสดงผลในพื้นที่ที่เกี่ยวข้องกับองค์ประกอบแคนวาสตั้งแต่หนึ่งองค์ประกอบขึ้นไป หรือประมวลผลโดยไม่มีเอาต์พุต (เช่น เมื่อรันงานคำนวณ) การแยกขั้นตอนช่วยให้แยกการดำเนินการสร้างทรัพยากรและการเตรียมการออกเป็นตัวจัดการต่างๆ ที่สามารถทำงานบนเธรดที่ต่างกันได้ง่ายขึ้น
  • แนวทางที่แตกต่างในการประมวลผลสถานะ WebGPU นำเสนอสองออบเจ็กต์ - GPURenderPipeline และ GPUComputePipeline ซึ่งช่วยให้คุณสามารถรวมสถานะต่างๆ ที่กำหนดไว้ล่วงหน้าโดยนักพัฒนา ซึ่งช่วยให้เบราว์เซอร์ไม่เปลืองทรัพยากรไปกับงานเพิ่มเติม เช่น การคอมไพล์เชเดอร์ใหม่ สถานะที่รองรับได้แก่: เชเดอร์ บัฟเฟอร์จุดยอดและเค้าโครงแอตทริบิวต์ เค้าโครงกลุ่มแบบติดหนึบ การผสมผสาน ความลึกและรูปแบบ และรูปแบบเอาต์พุตหลังการเรนเดอร์
  • โมเดลการเชื่อมโยงคล้ายกับฟีเจอร์การจัดกลุ่มทรัพยากรของ Vulkan ในการจัดกลุ่มทรัพยากรเข้าด้วยกัน WebGPU จะจัดเตรียมออบเจ็กต์ GPUBindGroup ซึ่งสามารถเชื่อมโยงกับออบเจ็กต์อื่นที่คล้ายคลึงกันเพื่อใช้ในเชเดอร์ขณะเขียนคำสั่ง การสร้างกลุ่มดังกล่าวช่วยให้ผู้ขับขี่สามารถดำเนินการเตรียมการที่จำเป็นล่วงหน้า และช่วยให้เบราว์เซอร์เปลี่ยนการเชื่อมโยงทรัพยากรระหว่างการโทรออกได้เร็วยิ่งขึ้น เค้าโครงของการผูกทรัพยากรสามารถกำหนดไว้ล่วงหน้าได้โดยใช้ออบเจ็กต์ GPUBindGroupLayout

ที่มา: opennet.ru

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