มีอะไรใหม่ใน WebGPU (Chrome 136)

François Beaufort
François Beaufort

เผยแพร่แล้ว: 23 เมษายน 2025

แอตทริบิวต์ isFallbackAdapter ของ GPUAdapterInfo

แอตทริบิวต์บูลีน GPUAdapterInfo isFallbackAdapter จะระบุว่า GPUAdapter มีข้อจำกัดด้านประสิทธิภาพที่สำคัญหรือไม่ เพื่อแลกกับความสามารถในการใช้งานร่วมกันที่กว้างขึ้น ลักษณะการทำงานที่คาดการณ์ได้มากขึ้น หรือความเป็นส่วนตัวที่ดีขึ้น การเพิ่มนี้จําเป็นเนื่องจากไลบรารีที่ใช้ออบเจ็กต์ GPUDevice ที่ผู้ใช้ระบุไม่สามารถเข้าถึงข้อมูลนี้ผ่านแอตทริบิวต์ adapterInfo ใน GPUDevice โปรดดูตัวอย่างต่อไปนี้และปัญหา 403172841

const adapter = await navigator.gpu.requestAdapter();

if (adapter?.info.isFallbackAdapter) {
  // The returned adapter is a software-backed fallback adapter, which
  // may have significantly lower performance and fewer features.
}

เนื่องจาก Chrome ยังไม่รองรับอะแดปเตอร์สำรอง isFallbackAdapter จึงจะเป็นเท็จเสมอในอุปกรณ์ของผู้ใช้ เรากําลังตรวจสอบว่าจะเลิกใช้งานและนําแอตทริบิวต์ GPUAdapter isFallbackAdapter ออกได้หรือไม่ ดูความตั้งใจที่จะจัดส่ง

การปรับปรุงเวลาคอมไพล์ Shader ใน D3D12

ทีม Chrome ยังคงปรับปรุง Tint ซึ่งเป็นคอมไพเลอร์ภาษาเชดเดอร์ WebGPU โดยเพิ่มการแสดงข้อมูลระดับกลาง (IR) สำหรับอุปกรณ์ที่รองรับ WebGPU ที่มีแบ็กเอนด์ D3D12 IR นี้ซึ่งอยู่ตรงกลางระหว่าง Abstract Syntax Tree (AST) ของ Tint กับโปรแกรมเขียนแบ็กเอนด์ HLSL จะทำให้คอมไพเลอร์มีประสิทธิภาพและดูแลรักษาได้ง่ายขึ้น ซึ่งท้ายที่สุดแล้วจะเป็นประโยชน์ต่อทั้งนักพัฒนาซอฟต์แวร์และผู้ใช้ การทดสอบเบื้องต้นแสดงให้เห็นว่า Tint เวอร์ชันใหม่ทำงานได้เร็วขึ้นถึง 10 เท่าเมื่อแปลเฉดสี WGSL ของ Unity เป็น HLSL

โฟลว์ชาร์ตแสดงขั้นตอนการแปลงโค้ด Shader WGSL เป็นคำสั่งระดับต่ำของ GPU
การสร้างไปป์ไลน์การแสดงผลใน Windows

การปรับปรุงเหล่านี้ซึ่งพร้อมใช้งานบน Android, ChromeOS และ macOS อยู่แล้วกำลังขยายการให้บริการไปยังอุปกรณ์ Windows ที่รองรับ WebGPU ด้วยแบ็กเอนด์ D3D12 โปรดดูปัญหา 42251045

บันทึกและคัดลอกรูปภาพพิมพ์แคนวาส

ตอนนี้ผู้ใช้ Chrome สามารถคลิกขวาที่ผืนผ้าใบ WebGPU และเข้าถึงตัวเลือกเมนูตามบริบทอย่างบันทึกรูปภาพเป็น… หรือคัดลอกรูปภาพได้แล้ว โปรดดูปัญหา 40902474

หน้า
ผู้ใช้เลือกเมนูบริบท "บันทึกรูปภาพเป็น…"

ข้อจํากัดของโหมดความเข้ากันได้ของ Brand Lift

ฟีเจอร์ "core-features-and-limits" เวอร์ชันทดลอง (หากมีใน GPUDevice) จะยกเลิกข้อจำกัดทั้งหมดของโหมดความเข้ากันได้ (ฟีเจอร์และขีดจำกัด) เมื่อเปิดใช้ Flag chrome://flags/#enable-unsafe-webgpu โปรดดูปัญหา 395855517

การขอ GPUAdapter ที่มีตัวเลือก featureLevel: "compatibility" จะบอกให้เบราว์เซอร์เลือกโหมดความเข้ากันได้ของ WebGPU เวอร์ชันทดลอง หากดำเนินการสำเร็จ ตัวแปลงที่ได้จะเป็น "ค่าเริ่มต้นที่เข้ากันได้" มิฉะนั้นจะเป็น "ค่าเริ่มต้นหลัก" ซึ่งเหมือนกับการใช้ตัวเลือก featureLevel: "core" นอกจากนี้ การเรียกใช้ requestDevice() ที่ไม่มี requiredFeatures และ requiredLimits จะขอ GPUDevice ที่มีความสามารถเริ่มต้นของ GPUAdapter

อะแดปเตอร์ที่เป็นค่าเริ่มต้นของ Core จะรองรับฟีเจอร์ "core-features-and-limits" เสมอ และระบบจะเปิดใช้ฟีเจอร์นี้โดยอัตโนมัติใน GPUDevice ที่สร้างขึ้นจากอะแดปเตอร์ดังกล่าว สำหรับอะแดปเตอร์ที่เปิดใช้ความเข้ากันได้โดยค่าเริ่มต้น ฟีเจอร์ "core-features-and-limits" อาจใช้งานได้และสามารถขอได้ใน GPUDevice ที่สร้างขึ้นจากอะแดปเตอร์ดังกล่าว นอกจากนี้ ตัวแปลงทั้ง 2 ประเภทยังอาจรองรับฟีเจอร์อย่าง "float32-blendable" ซึ่งไม่บังคับทั้งในโหมดหลักและโหมดความเข้ากันได้

ตัวอย่างต่อไปนี้เป็นแอปพลิเคชันที่ต้องใช้ "float32-blendable" และรองรับการใช้ฟีเจอร์หลักหากมี แต่จะใช้เฉพาะฟีเจอร์ที่เข้ากันได้หากฟีเจอร์หลักไม่พร้อมใช้งาน

const adapter = await navigator.gpu.requestAdapter({ featureLevel: "compatibility" });

if (!adapter || !adapter.features.has("float32-blendable")) {
  throw new Error("32-bit float textures blending support is not available");
}

const requiredFeatures = [];
if (adapter.features.has("core-features-and-limits")) {
  requiredFeatures.push("core-features-and-limits");
}

const device = await adapter.requestDevice({ requiredFeatures });

if (!device.features.has("core-features-and-limits")) {
  // Compatibility mode restrictions validation rules will apply.
}

ระบบได้นำแอตทริบิวต์ GPUAdapter featureLevel และ isCompatibilityMode เวอร์ชันทดลองออกแล้วเพื่อใช้ฟีเจอร์ "core-features-and-limits" ดูปัญหา 395855516

การอัปเดต Dawn

เราได้เปลี่ยนชื่อ enum สถานะการเรียกกลับ InstanceDropped เป็น CallbackCancelled เพื่อชี้แจงว่าการเรียกกลับถูกยกเลิก แต่การประมวลผลเบื้องหลังที่เกี่ยวข้องกับเหตุการณ์ เช่น การคอมไพล์ไปป์ไลน์ อาจยังคงทํางานอยู่ ชื่อใหม่นี้ใช้ได้ทั่วไปมากกว่าในกรณีที่มีการเพิ่มกลไกการยกเลิกอื่นในภายหลัง ดูปัญหา 520

เราได้เปลี่ยนชื่อ enum wgpu::PopErrorScopeStatus::EmptyStack ที่ระบุว่าไม่สามารถยกเลิกสแต็กขอบเขตข้อผิดพลาดเป็น wgpu::PopErrorScopeStatus::Error (ซึ่งใช้ได้ทั่วไปมากกว่า) ตอนนี้การติดต่อกลับจะมีข้อความคำอธิบายข้อผิดพลาดที่เกี่ยวข้องเพื่อช่วยแก้ไขข้อบกพร่องด้วย ดูปัญหา 369

ข้อมูลนี้เป็นเพียงไฮไลต์สำคัญบางส่วนเท่านั้น ดูรายการคอมมิตทั้งหมด

มีอะไรใหม่ใน WebGPU

รายการทุกอย่างที่ครอบคลุมในชุดมีอะไรใหม่ใน WebGPU

Chrome 136

Chrome 135

Chrome 134

Chrome 133

Chrome 132

Chrome 131

Chrome 130

Chrome 129

Chrome 128

Chrome 127

Chrome 126

Chrome 125

Chrome 124

Chrome 123

Chrome 122

Chrome 121

Chrome 120

Chrome 119

Chrome 118

Chrome 117

Chrome 116

Chrome 115

Chrome 114

Chrome 113