มีอะไรใหม่ใน 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

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

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

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

ข้อจำกัดของโหมดความเข้ากันได้ของ 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-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.
}

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

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

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

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

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

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

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

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