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

François Beaufort
François Beaufort

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

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

แอตทริบิวต์บูลีน isFallbackAdapter ของ GPUAdapterInfo จะระบุว่า 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 จึงเป็นเท็จเสมอในอุปกรณ์ของผู้ใช้ เรากำลังตรวจสอบว่าสามารถเลิกใช้งานและนำแอตทริบิวต์ isFallbackAdapter ของ GPUAdapter ออกได้หรือไม่ ดูความตั้งใจที่จะจัดส่ง

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

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

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

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

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

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

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

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

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

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

อแดปเตอร์เริ่มต้นหลักจะรองรับฟีเจอร์ "core-features-and-limits" เสมอ และจะเปิดใช้โดยอัตโนมัติใน GPUDevice ที่สร้างจากอแดปเตอร์เหล่านั้น สำหรับอแดปเตอร์ที่ตั้งค่าเริ่มต้นเพื่อความเข้ากันได้ "core-features-and-limits" อาจรองรับฟีเจอร์นี้และขอได้ใน GPUDevices ที่สร้างจากอแดปเตอร์ดังกล่าว นอกจากนี้ อะแดปเตอร์ทั้ง 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.
}

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

ข้อมูลอัปเดตเกี่ยวกับ Dawn

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

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

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

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

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

Chrome 155-156

Chrome 153-154

Chrome 151-152

Chrome 149-150

Chrome 147-148

Chrome 146

Chrome 145

Chrome 144

Chrome 143

Chrome 142

Chrome 141

Chrome 140

Chrome 139

Chrome 138

Chrome 137

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