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

สำหรับเว็บแอปหลายๆ แอป คุณสามารถเปิดใช้โหมดความเข้ากันได้โดยส่ง 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 เพื่อสร้างไฟล์แนบที่ประหยัดหน่วยความจำได้ ซึ่งจะช่วยให้การดำเนินการ Render Pass อยู่ในหน่วยความจำของไทล์ ซึ่งจะหลีกเลี่ยงการรับส่งข้อมูล 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 และความตั้งใจที่จะเปิดตัว

ส่วนขยาย WGSL texture_and_sampler_let

ส่วนขยายภาษา 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

ระดับโควต้าใหม่ที่พร้อมใช้งานมีดังนี้

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

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

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