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

François Beaufort
François Beaufort

เผยแพร่เมื่อวันที่ 7 มกราคม 2026

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

ส่วนขยายภาษา subgroup_id ของ WGSL ช่วยให้คุณใช้ค่าบิวท์อินใหม่ต่อไปนี้ในเวิร์กกรุ๊ปได้เมื่อเปิดใช้ส่วนขยาย subgroups

  • subgroup_id: แสดงผลรหัสของกลุ่มย่อยของการเรียกใช้ภายในเวิร์กกรุ๊ปปัจจุบัน
  • num_subgroups: รายงานจำนวนกลุ่มย่อยที่มีอยู่ในเวิร์กกรุ๊ป

ก่อนหน้านี้ หากต้องการจัดทำดัชนีหน่วยความจำโดยใช้รหัสการเรียกใช้กลุ่มย่อย คุณต้องสร้างรหัสกลุ่มย่อยขึ้นมาใหม่ (โดยปกติจะผ่าน การดำเนินการแบบอะตอม) เพื่อหลีกเลี่ยงการเข้าถึงหน่วยความจำที่ทับซ้อนกัน ตอนนี้คุณสามารถใช้ subgroup_id เพื่อเติมสมการอีกครึ่งหนึ่งได้แล้ว เนื่องจากฟังก์ชันนี้ยังไม่พร้อมใช้งานในแบ็กเอนด์ D3D จึงมีการจำลองฟังก์ชันนี้ไว้ คุณควรสร้างความเท่าเทียมกับ local_invocation_index เป็น subgroup_invocation_id + subgroup_size * subgroup_id ได้อย่างปลอดภัย โปรดทราบว่าในบางกรณี กลุ่มย่อยอาจไม่เต็ม

ส่วนขยายภาษาดังกล่าวสามารถตรวจหาฟีเจอร์ได้โดยใช้ navigator.gpu.wgslLanguageFeatures เราขอแนะนำให้ใช้คำสั่ง requires เพื่อส่งสัญญาณว่าอาจเกิดการไม่สามารถใช้งานร่วมกันได้ด้วย requires subgroup_id; ที่ด้านบนของโค้ด Shader WGSL ดูตัวอย่างต่อไปนี้และเจตนาในการเปิดตัว

if (!navigator.gpu.wgslLanguageFeatures.has("subgroup_id")) {
  throw new Error(`WGSL subgroup_id and num_subgroups built-in values are not available`);
}

const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("subgroups")) {
  throw new Error("Subgroups support is not available");
}
const device = await adapter.requestDevice({ requiredFeatures: ["subgroups"] });

const shaderModule = device.createShaderModule({ code: `
  enable subgroups;
  requires subgroup_id;

  @compute @workgroup_size(64, 1, 1)
  fn main(@builtin(subgroup_id) subgroup_id : u32,
          @builtin(num_subgroups) num_subgroups : u32) {
    // TODO: Use subgroup_id and num_subgroups values.
  }`,
});

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

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

ส่วนขยายภาษาดังกล่าวสามารถตรวจหาฟีเจอร์ได้โดยใช้ navigator.gpu.wgslLanguageFeatures เราขอแนะนำให้ใช้คำสั่ง requires เพื่อส่งสัญญาณว่าอาจเกิดการไม่สามารถใช้งานร่วมกันได้ด้วย requires uniform_buffer_standard_layout; ที่ด้านบนของโค้ด Shader WGSL ดูตัวอย่างต่อไปนี้และเจตนาในการเปิดตัว

if (!navigator.gpu.wgslLanguageFeatures.has("uniform_buffer_standard_layout")) {
  throw new Error(`WGSL uniform buffer standard layout is not available`);
}

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

const shaderModule = device.createShaderModule({ code: `
  requires uniform_buffer_standard_layout;

  struct S {
      x: f32
  }
  struct Uniforms {
      a: S,
      b: f32
      // b is at offset 4. Without standard layout, alignment rules would
      // force b to be at offset 16 (or a multiple of 16), and you would have
      // to add extra fields or use an @align attribute.
  }

  @group(0) @binding(0) var<uniform> u: Uniforms;

  @fragment fn fs_main() -> @location(0) vec4<f32> {
      return vec4<f32>(u.a.x);
  }`,
});

WebGPU ใน Linux

ทีม Chrome กำลังเปิดตัว WebGPU สำหรับ Linux อย่างระมัดระวัง โดยเริ่มจากการรองรับ GPU ของ Intel Gen12+ แต่มีแผนที่จะขยายการรองรับไปยังอุปกรณ์อื่นๆ (AMD, NVIDIA) การติดตั้งใช้งานนี้ใช้สถาปัตยกรรมที่ WebGPU ใช้ Vulkan และส่วนที่เหลือของ Chromium ยังคงใช้ OpenGL ซึ่งเป็นการใช้เส้นทางโค้ดที่ดีที่ทราบกันดีอยู่แล้ว ดู ปัญหา 442791440

writeBuffer และ writeTexture เร็วขึ้น

เราได้เพิ่มประสิทธิภาพ writeBuffer() และ writeTexture() ใน Chrome ซึ่งส่งผลให้ประสิทธิภาพดีขึ้นสูงสุด 2 เท่าเมื่อเทียบกับเวอร์ชันก่อนหน้า ทั้งนี้ขึ้นอยู่กับขนาดของข้อมูลที่โอน การเปลี่ยนแปลงนี้ส่งผลต่อผู้ใช้การติดตั้งใช้งาน Dawn Wire ทุกคนด้วย ดู ปัญหา 441900745

ข้อมูลอัปเดตของ Dawn

ทีม GPU ของ Android ได้เผยแพร่การเปิดตัวเวอร์ชันอัลฟ่าครั้งแรกของการผูก Kotlin สำหรับ WebGPU ใน Android ซึ่งพร้อมใช้งานโดยใช้ Jetpack แพ็กเกจ androidx.webgpu ช่วยให้นักพัฒนาแอป Android เข้าถึง GPU API ที่ทันสมัยโดยใช้ Kotlin ซึ่งเป็นการหลีกเลี่ยงปัญหาเดิมของ OpenGL หรือความซับซ้อนของ Vulkan ซึ่งเป็นการพัฒนาที่น่าตื่นเต้นสำหรับระบบนิเวศ

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

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