В
เป้าหมายหลักของ WebGPU คือการจัดหาอินเทอร์เฟซการเขียนโปรแกรมที่ปลอดภัย ใช้งานง่าย พกพาได้ และมีประสิทธิภาพสูงสำหรับแพลตฟอร์มเว็บ เพื่อใช้ประโยชน์จากเทคโนโลยีกราฟิก 3D และความสามารถที่ได้รับจาก API กราฟิกระบบสมัยใหม่ เช่น Direct3D 12 บน Windows, Metal บน macOS และ Vulkan บน Linux ตามแนวคิดแล้ว WebGPU แตกต่างจาก WebGL ในลักษณะเดียวกับที่ Vulkan แตกต่างจาก OpenGL และในขณะเดียวกันก็ไม่ได้ขึ้นอยู่กับ API กราฟิกเฉพาะ แต่เป็นเลเยอร์สากลที่โดยทั่วไปใช้พื้นฐานระดับต่ำแบบเดียวกับที่พบใน Vulkan โลหะและ Direct3D
WebGPU ให้แอปพลิเคชัน JavaScript ที่มีการควบคุมระดับล่างเหนือองค์กร การประมวลผล และการส่งคำสั่งไปยัง GPU การจัดการทรัพยากร หน่วยความจำ บัฟเฟอร์ อ็อบเจ็กต์พื้นผิว และเชเดอร์กราฟิกที่คอมไพล์ที่เกี่ยวข้อง แนวทางนี้ช่วยให้คุณได้รับประสิทธิภาพที่สูงขึ้นสำหรับแอปพลิเคชันกราฟิกโดยลดต้นทุนค่าใช้จ่ายและเพิ่มประสิทธิภาพในการทำงานกับ GPU
WebGPU ช่วยให้สามารถสร้างโปรเจ็กต์ 3D ที่ซับซ้อนเต็มรูปแบบสำหรับเว็บซึ่งทำงานได้ไม่แย่ไปกว่าโปรแกรมสแตนด์อโลนที่เข้าถึง Vulkan, Metal หรือ Direct3D ได้โดยตรง แต่ไม่ได้เชื่อมโยงกับแพลตฟอร์มเฉพาะ WebGPU ยังมอบความสามารถเพิ่มเติมเมื่อย้ายโปรแกรมกราฟิกดั้งเดิมไปเป็นรูปแบบที่เปิดใช้งานเว็บผ่านการใช้เทคโนโลยี WebAssembly นอกเหนือจากกราฟิก 3D แล้ว WebGPU ยังครอบคลุมความสามารถที่เกี่ยวข้องกับการลดภาระการคำนวณไปยัง GPU และรองรับการพัฒนาเชเดอร์อีกด้วย เฉดเดอร์
WebGPU ใช้การจัดการทรัพยากร งานเตรียมการ และการส่งคำสั่งแยกกันไปยัง GPU (ใน WebGL ออบเจ็กต์เดียวรับผิดชอบทุกอย่างในคราวเดียว) มีบริบทที่แยกจากกันสามประการ:
GPUอุปกรณ์สำหรับการสร้างทรัพยากรเช่นพื้นผิวและบัฟเฟอร์ GPUCommandEncoder สำหรับการเข้ารหัสคำสั่งแต่ละคำสั่ง รวมถึงขั้นตอนการเรนเดอร์และการคำนวณ GPUCommandBuffer ที่จะเข้าคิวเพื่อดำเนินการบน GPU ผลลัพธ์สามารถแสดงผลในพื้นที่ที่เกี่ยวข้องกับองค์ประกอบแคนวาสตั้งแต่หนึ่งองค์ประกอบขึ้นไป หรือประมวลผลโดยไม่มีเอาต์พุต (เช่น เมื่อรันงานคำนวณ) การแยกขั้นตอนช่วยให้แยกการดำเนินการสร้างทรัพยากรและการเตรียมการออกเป็นตัวจัดการต่างๆ ที่สามารถทำงานบนเธรดที่ต่างกันได้ง่ายขึ้น
ข้อแตกต่างประการที่สองระหว่าง WebGPU และ WebGL คือแนวทางที่แตกต่างกันในการจัดการสถานะ WebGPU นำเสนอสองออบเจ็กต์ - GPURenderPipeline และ GPUComputePipeline ซึ่งช่วยให้คุณสามารถรวมสถานะต่างๆ ที่กำหนดไว้ล่วงหน้าโดยนักพัฒนา ซึ่งช่วยให้เบราว์เซอร์ไม่เปลืองทรัพยากรไปกับงานเพิ่มเติม เช่น การคอมไพล์เชเดอร์ใหม่ สถานะที่รองรับได้แก่: เชเดอร์ บัฟเฟอร์จุดยอดและเค้าโครงแอตทริบิวต์ เค้าโครงกลุ่มแบบติดหนึบ การผสมผสาน ความลึกและรูปแบบ และรูปแบบเอาต์พุตหลังการเรนเดอร์
คุณสมบัติที่สามของ WebGPU เรียกว่ารูปแบบการเชื่อมโยงเป็นส่วนใหญ่
ชวนให้นึกถึงเครื่องมือการจัดกลุ่มทรัพยากรที่มีอยู่ในวัลแคน
ในการจัดกลุ่มทรัพยากรเข้าด้วยกัน WebGPU จะจัดเตรียมออบเจ็กต์ GPUBindGroup ซึ่งสามารถเชื่อมโยงกับออบเจ็กต์อื่นที่คล้ายคลึงกันเพื่อใช้ในเชเดอร์ขณะเขียนคำสั่ง การสร้างกลุ่มดังกล่าวช่วยให้ผู้ขับขี่สามารถดำเนินการเตรียมการที่จำเป็นล่วงหน้า และช่วยให้เบราว์เซอร์เปลี่ยนการเชื่อมโยงทรัพยากรระหว่างการโทรออกได้เร็วยิ่งขึ้น เค้าโครงของการผูกทรัพยากรสามารถกำหนดไว้ล่วงหน้าได้โดยใช้ออบเจ็กต์ GPUBindGroupLayout
ใน Firefox หากต้องการเปิดใช้งาน WebGPU ใน about:config จะมีการตั้งค่าเป็น “dom.webgpu.enabled” การเรนเดอร์ CanvasContext ยังต้องมีการเปิดใช้งานการรวมภาพด้วย
ที่มา: opennet.ru