Mozilla ได้ตัดสินใจเปิดใช้งานการสนับสนุน WebGPU API และ WGSL (WebGPU Shading Language) ใน Firefox สำหรับแพลตฟอร์มนี้ Windows ใน Firefox เวอร์ชัน 141 ซึ่งมีกำหนดวางจำหน่ายในวันที่ 22 กรกฎาคม การรองรับ WebGPU จะเปิดใช้งานโดยค่าเริ่มต้น จากนั้นจะมีการวางแผนที่จะเปิดใช้งานการรองรับ WebGPU ในเวอร์ชันต่างๆ ในเดือนต่อๆ ไป: Linux и macOSและหลังจากนั้นสักระยะในเวอร์ชันสำหรับแพลตฟอร์ม Androidหากต้องการเปิดใช้งาน WebGPU ด้วยตนเอง คุณสามารถใช้พารามิเตอร์ "dom.webgpu.enabled" และ "gfx.webrender.all" ในหน้า about:config ได้
ใน Chrome เวอร์ชัน 113 ซึ่งเปิดตัวในเดือนพฤษภาคม 2023 มีการรองรับ WebGPU ตามค่าเริ่มต้น ส่วน Safari มีแผนที่จะเปิดใช้งานการรองรับ WebGPU ตามค่าเริ่มต้นในฤดูใบไม้ร่วงนี้ (การรองรับแบบทดลองมีให้ใช้งานตั้งแต่เดือนพฤศจิกายน 2021) ส่วน Firefox มีการรองรับ WebGPU แบบทดลองมาตั้งแต่ปี 2020 แต่เปิดใช้งานตามค่าเริ่มต้นเฉพาะใน Firefox รุ่น nightly เท่านั้น การใช้งาน WebGPU ของ Firefox อิงตามโค้ดโครงการ WGPU ซึ่งเขียนด้วยภาษา Rust และสามารถทำงานบน Direct3D 12, Vulkan, OpenGL และ Metal graphics APIs
WebGPU มี API ที่คล้ายกับ Vulkan, Metal และ Direct3D 12 สำหรับการดำเนินการด้าน GPU นอกจากกราฟิก 3 มิติแล้ว WebGPU ยังครอบคลุมความสามารถที่เกี่ยวข้องกับการถ่ายโอนการคำนวณไปยัง GPU และการดำเนินการเชเดอร์ ในทางแนวคิด WebGPU แตกต่างจากข้อกำหนด WebGL เดิมในลักษณะเดียวกับที่ Vulkan graphics API แตกต่างจาก OpenGL ในขณะเดียวกัน WebGPU ไม่ได้อิงตาม API กราฟิกเฉพาะ แต่เป็นเลเยอร์สากลที่ใช้ไพรมิทีฟระดับต่ำแบบเดียวกับที่มีอยู่ใน Vulkan, Metal และ Direct3D
WebGPU ช่วยให้แอปพลิเคชัน JavaScript สามารถควบคุมการจัดระเบียบ การประมวลผล และการส่งต่อคำสั่งไปยัง GPU รวมถึงจัดการทรัพยากร หน่วยความจำ บัฟเฟอร์ วัตถุพื้นผิว และกราฟิกเชเดอร์ที่คอมไพล์แล้วที่เกี่ยวข้อง วิธีนี้ช่วยให้แอปพลิเคชันกราฟิกมีประสิทธิภาพสูงขึ้น โดยลดค่าใช้จ่ายและเพิ่มประสิทธิภาพการทำงานกับ GPU
ด้วย WebGPU คุณสามารถสร้างโปรเจกต์ 3 มิติที่ซับซ้อนและไม่จำกัดแพลตฟอร์ม ซึ่งมีประสิทธิภาพเทียบเท่ากับโปรแกรมแบบสแตนด์อโลนที่ใช้ Vulkan, Metal หรือ Direct3D โดยตรง นอกจากนี้ WebGPU ยังมีความสามารถเพิ่มเติมสำหรับการพอร์ตโปรแกรมกราฟิกดั้งเดิมไปยังฟอร์มที่สามารถรันในเบราว์เซอร์ได้ ด้วยการคอมไพล์ไปยัง WebAssembly
คุณสมบัติหลักของ WebGPU และความแตกต่างจาก WebGL:
- แยกการจัดการทรัพยากร งานเตรียมการ และการส่งคำสั่งไปยัง GPU (ใน WebGL วัตถุเดียวรับผิดชอบทุกอย่างในคราวเดียว) มีบริบทที่แยกจากกันสามแบบ: GPUDevice สำหรับการสร้างทรัพยากร เช่น พื้นผิวและบัฟเฟอร์; GPUCommandEncoder สำหรับการเข้ารหัสคำสั่งแต่ละคำสั่ง รวมถึงขั้นตอนการเรนเดอร์และการคำนวณ GPUCommandBuffer ที่จะเข้าคิวเพื่อดำเนินการบน GPU ผลลัพธ์สามารถแสดงผลในพื้นที่ที่เกี่ยวข้องกับองค์ประกอบแคนวาสตั้งแต่หนึ่งองค์ประกอบขึ้นไป หรือประมวลผลโดยไม่มีเอาต์พุต (เช่น เมื่อรันงานคำนวณ) การแยกขั้นตอนช่วยให้แยกการดำเนินการสร้างทรัพยากรและการเตรียมการออกเป็นตัวจัดการต่างๆ ที่สามารถทำงานบนเธรดที่ต่างกันได้ง่ายขึ้น
- แนวทางที่แตกต่างในการประมวลผลสถานะ WebGPU นำเสนอสองออบเจ็กต์ - GPURenderPipeline และ GPUComputePipeline ซึ่งช่วยให้คุณสามารถรวมสถานะต่างๆ ที่กำหนดไว้ล่วงหน้าโดยนักพัฒนา ซึ่งช่วยให้เบราว์เซอร์ไม่เปลืองทรัพยากรไปกับงานเพิ่มเติม เช่น การคอมไพล์เชเดอร์ใหม่ สถานะที่รองรับได้แก่: เชเดอร์ บัฟเฟอร์จุดยอดและเค้าโครงแอตทริบิวต์ เค้าโครงกลุ่มแบบติดหนึบ การผสมผสาน ความลึกและรูปแบบ และรูปแบบเอาต์พุตหลังการเรนเดอร์
- โมเดลการเชื่อมโยงคล้ายกับฟีเจอร์การจัดกลุ่มทรัพยากรของ Vulkan ในการจัดกลุ่มทรัพยากรเข้าด้วยกัน WebGPU จะจัดเตรียมออบเจ็กต์ GPUBindGroup ซึ่งสามารถเชื่อมโยงกับออบเจ็กต์อื่นที่คล้ายคลึงกันเพื่อใช้ในเชเดอร์ขณะเขียนคำสั่ง การสร้างกลุ่มดังกล่าวช่วยให้ผู้ขับขี่สามารถดำเนินการเตรียมการที่จำเป็นล่วงหน้า และช่วยให้เบราว์เซอร์เปลี่ยนการเชื่อมโยงทรัพยากรระหว่างการโทรออกได้เร็วยิ่งขึ้น เค้าโครงของการผูกทรัพยากรสามารถกำหนดไว้ล่วงหน้าได้โดยใช้ออบเจ็กต์ GPUBindGroupLayout
ที่มา: opennet.ru
