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

François Beaufort
François Beaufort

เผยแพร่เมื่อ: 25 กุมภาพันธ์ 2026

รองรับโหมดความเข้ากันได้ของ WebGPU ใน OpenGL ES 3.1

แม้ว่า WebGPU จะได้รับการออกแบบมาให้สอดคล้องกับกราฟิก API ที่ทันสมัยอย่าง Vulkan, Metal และ D3D12 แต่ผู้ใช้จำนวนมากมีฮาร์ดแวร์รุ่นเก่าที่ไม่รองรับมาตรฐานเหล่านี้ Chrome จึงขอแนะนำฟีเจอร์ใหม่ที่เลือกใช้ได้ชื่อว่าโหมดความเข้ากันได้ เพื่อลดช่องว่างนี้และให้การเข้าถึงเป็นไปอย่างกว้างขวาง

โหมดนี้ช่วยให้คุณเรียกใช้ WebGPU ในกราฟิก API รุ่นเก่าอย่าง OpenGL ES 3.1 ได้ การกำหนดเป้าหมายเป็นชุดย่อยของข้อกำหนด WebGPU ที่มีการจำกัดเล็กน้อยจะช่วยให้มั่นใจได้ว่าทุกคนจะเข้าถึงเว็บแอปของคุณได้ ไม่ว่าจะเป็นอุปกรณ์เล่นเกมรุ่นล่าสุดไปจนถึงแล็ปท็อปและอุปกรณ์เคลื่อนที่รุ่นเก่า ทีมงานกำลังพิจารณาการรองรับอุปกรณ์อื่นๆ เช่น ChromeOS ที่ใช้ OpenGL ES 3.1 และ Windows ที่ใช้ Direct3D 11 โดยจะเริ่มจาก Android ก่อน

สำหรับเว็บแอปจำนวนมาก คุณสามารถเปิดใช้โหมดความเข้ากันได้โดยส่ง featureLevel: "compatibility" เมื่อเรียก requestAdapter() หากอุปกรณ์ของคุณรองรับ Core WebGPU, Chrome จะแสดงผลอะแดปเตอร์ที่รองรับ Core แต่เว็บแอปของคุณจะทราบว่าต้องอยู่ภายในขีดจำกัดความเข้ากันได้ เว้นแต่จะเปิดใช้ฟีเจอร์ "core-features-and-limits" (หรือเปิดใช้ฟีเจอร์ที่มีทั้งหมด) แอปพลิเคชันที่ซับซ้อนมากขึ้นอาจต้องมีการปรับเปลี่ยนเล็กน้อยเพื่อให้เป็นไปตามข้อจำกัดของโหมด

// Request a GPUAdapter in compatibility mode.
const adapter = await navigator.gpu.requestAdapter({ featureLevel: "compatibility" });
const device = await adapter.requestDevice();

ดูข้อมูลโดยละเอียดเกี่ยวกับข้อจำกัดด้านสถาปัตยกรรมที่เฉพาะเจาะจงของโหมดนี้ได้ในคู่มือข้อมูลเบื้องต้นเกี่ยวกับ WebGPU นอกจากนี้ ตัวอย่าง WebGPU ทั้งหมดยังรองรับโหมดความเข้ากันได้แล้วด้วย คุณยังอ่านความตั้งใจในการเปิดตัวได้ด้วย

ไฟล์แนบชั่วคราว

คุณสามารถใช้แฟล็ก TRANSIENT_ATTACHMENT GPUTextureUsage ใหม่เพื่อสร้างไฟล์แนบที่มีประสิทธิภาพด้านหน่วยความจำ ซึ่งจะช่วยให้การดำเนินการส่งผ่านการแสดงผลอยู่ในหน่วยความจำแบบไทล์ ซึ่งจะหลีกเลี่ยงการรับส่งข้อมูล VRAM และการจัดสรร VRAM สำหรับพื้นผิว

เมื่อประกาศพื้นผิวเป็นแบบชั่วคราว (หรือ "ไม่มีหน่วยความจำ") GPU จะทราบว่าต้องใช้เนื้อหาของพื้นผิวชั่วคราวเท่านั้น ซึ่งก็คือเฉพาะภายในการส่งผ่านการแสดงผลปัจจุบัน นอกจากนี้ เนื่องจากระบบจะทิ้งเนื้อหาของพื้นผิวหลังจากส่งผ่านการแสดงผลแล้ว ไดรเวอร์จึงอาจไม่จำเป็นต้องจัดสรร VRAM ให้เลย

ตัวอย่างต่อไปนี้แสดงวิธีสร้างพื้นผิวชั่วคราว

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

if ('TRANSIENT_ATTACHMENT' in GPUTextureUsage) {

  const transientTexture = device.createTexture({
    size: [42, 42],
    // The TRANSIENT_ATTACHMENT flag indicates the texture content is temporary,
    // potentially keeping it in fast on-chip memory.
    usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TRANSIENT_ATTACHMENT,
    format: 'rgba8unorm',
  });
}

ดูตัวอย่าง Hello Triangle MSAA - WebGPU และ ความตั้งใจในการเปิดตัว

ส่วนขยาย texture_and_sampler_let ของ WGSL

ส่วนขยายภาษา WGSL texture_and_sampler_let ช่วยให้คุณกำหนดตัวแปรพื้นผิวหรือตัวแปรตัวอย่างให้กับ let ภายใน Shader WGSL ได้ ปัจจุบันฟีเจอร์นี้มีกลไกการตั้งชื่อแบบอื่นและเตรียมพร้อมสำหรับการรองรับแบบ ไม่ผูกมัด ซึ่งจะจัดเก็บเมธอดที่แสดงผลพื้นผิวหรือตัวอย่างลงในตัวแปรภายในได้โดยตรง

ดูตัวอย่างต่อไปนี้และความตั้งใจในการเปิดตัว

@group(0) @binding(0) var tex: texture_2d<f32>;
@group(1) @binding(0) var store : texture_storage_2d<r32float, read_write>;

@fragment fn main() {
    let a = tex;
    var res: vec4f = textureLoad(a, vec2i(1i), 0);

    textureStore(store, vec2i(0i), res);
}

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

ระดับขีดจำกัดใหม่ต่อไปนี้พร้อมให้ใช้งานแล้ว

  • maxStorageBuffersPerShaderStage รองรับได้สูงสุด 16 รายการ ดู ปัญหา 366151398

  • maxSampledTexturesPerShaderStage รองรับได้สูงสุด 48 รายการ ดู ปัญหา 475255737

ระบบเปิดใช้การตรวจสอบ SPIR-V โดยค่าเริ่มต้นใน Android เพื่อเพิ่มเลเยอร์ความปลอดภัยและป้องกันไม่ให้ไดรเวอร์ไม่เสถียรเนื่องจากอินพุตที่ผิดรูปแบบ ดู ปัญหา 473526182

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

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

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

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