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

François Beaufort
François Beaufort

เผยแพร่: 7 มกราคม 2026

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

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

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

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

ส่วนขยายภาษาดังกล่าวสามารถตรวจหาฟีเจอร์ได้โดยใช้ navigator.gpu.wgslLanguageFeatures เราขอแนะนำให้ใช้ requires-directive เพื่อส่งสัญญาณความเป็นไปได้ที่จะไม่สามารถพกพาได้ด้วย requires subgroup_id; ที่ด้านบนของโค้ดเชดเดอร์ 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

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

ส่วนขยายภาษาดังกล่าวสามารถตรวจหาฟีเจอร์ได้โดยใช้ navigator.gpu.wgslLanguageFeatures เราขอแนะนำให้ใช้ requires-directive เพื่อส่งสัญญาณความเป็นไปได้ที่จะไม่สามารถพกพาได้ด้วย requires uniform_buffer_standard_layout; ที่ด้านบนของโค้ดเชดเดอร์ 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 ได้เผยแพร่รุ่นอัลฟ่าแรกของ Binding Kotlin สำหรับ WebGPU ใน Android ซึ่งพร้อมใช้งานโดยใช้ Jetpack androidx.webgpu แพ็กเกจนี้ช่วยให้นักพัฒนาแอป Android เข้าถึง GPU API ที่ทันสมัยโดยใช้ Kotlin ซึ่งจะช่วยหลีกเลี่ยงปัญหาเดิมของ OpenGL หรือความซับซ้อนของ Vulkan ซึ่งเป็นการพัฒนาที่น่าตื่นเต้นสำหรับระบบนิเวศ

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

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

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

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