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

François Beaufort
François Beaufort

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

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

ส่วนขยายภาษา WGSL subgroup_uniformity เปลี่ยนขอบเขตของการวิเคราะห์ความสม่ำเสมอสำหรับฟังก์ชันในตัวของกลุ่มย่อยและควอดให้เกิดขึ้นที่ระดับกลุ่มย่อย (แทนที่จะเป็นเวิร์กกรุ๊ป) ฟีเจอร์นี้ช่วยให้ฟังก์ชันการทำงานของกลุ่มย่อยมีความสม่ำเสมอมากขึ้นในหลายๆ กรณี ซึ่งจะช่วยให้คุณภาพชีวิตของนักพัฒนาแอปดีขึ้นและลดโอกาสที่จะต้องปิดใช้การตรวจสอบความสม่ำเสมอทั้งหมด ผลที่ตามมาในทางปฏิบัติคือค่าต่างๆ จะถือว่าเป็นค่าที่สม่ำเสมอในกลุ่มย่อยมากขึ้น เช่น ค่า subgroup_id ในตัวที่เพิ่มเข้ามาล่าสุด

ส่วนขยายภาษาดังกล่าวสามารถตรวจหาฟีเจอร์ได้โดยใช้ navigator.gpu.wgslLanguageFeatures ดูตัวอย่างต่อไปนี้และความตั้งใจที่จะจัดส่ง

if (!navigator.gpu.wgslLanguageFeatures.has("subgroup_uniformity")) {
  throw new Error(`WGSL subgroup uniformity is 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;
  
  @group(0) @binding(0) var<storage, read_write> non_uniform: i32;

  fn main() {
    if (non_uniform == 42) {
      _ = subgroupElect();
    }
  }`,
}); // WGSL error: subgroupElect must only be called from subgroup uniform control flow.

การแมปบัฟเฟอร์แบบซิงโครนัสเวอร์ชันทดลองใน Worker

ทีม Chrome กำลังตรวจสอบการแมปบัฟเฟอร์แบบซิงโครนัสภายใน Worker เพื่อสำรวจวิธีที่เป็นไปได้ในการลดความซับซ้อนระหว่าง WebGPU กับโค้ดของแอปพลิเคชัน เราจึงได้สร้างต้นแบบmapSync()วิธีการใหม่ที่ยังอยู่ในขั้นทดลองสำหรับ GPUBuffer วิธีนี้ซึ่งจำกัดไว้สำหรับผู้ปฏิบัติงานจะทำงานคล้ายกับ mapAsync()

ฟีเจอร์นี้ยังอยู่ในขั้นทดลอง และความคิดเห็นของคุณมีความสำคัญต่อการพิจารณาว่าจะเสนอให้เป็นมาตรฐานหรือไม่ หากต้องการลองใช้ ให้เปิด Chrome โดยใช้สวิตช์ --enable-features=WebGPUMapSyncOnWorkers แล้วรายงานความคิดเห็นเกี่ยวกับประโยชน์และผลกระทบของฟีเจอร์นี้ ดูข้อมูลโค้ดต่อไปนี้เพื่อเริ่มต้น

// Create a GPU buffer.
const buffer = device.createBuffer({
  size: 42,
  usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ,
});

// Map buffer synchronously when possible.
if ("mapSync" in GPUBuffer.prototype) {
  buffer.mapSync(GPUMapMode.READ);
} else {
  // Awaiting allows other code to run, which can cause application logic issues.
  await buffer.mapAsync(GPUMapMode.READ);
}

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

ฟีเจอร์ wgpu::FeatureName::R8UnormStorage ไม่พร้อมใช้งานแล้ว โดย wgpu::FeatureName::TextureFormatTier1 ได้เข้ามาแทนที่และมีผลเหนือกว่าแล้ว ดูปัญหา 472926167

เราได้นำฟีเจอร์ wgpu::FeatureName::Snorm16TextureFormats ออกแล้ว ความสามารถของเครื่องมือนี้ ยกเว้น Resolve ตอนนี้ส่วนใหญ่รวมอยู่ใน wgpu::FeatureName::TextureFormatsTier1 แล้ว ดูปัญหา 465347942

ตอนนี้เราสร้างไบนารีรุ่น Nightly (นอกเหนือจาก Emdawnwebgpu) บน GitHub และพร้อมให้บริการในรุ่น google/dawn แล้ว โดยเป็นบริการที่พยายามทำงานอย่างเต็มที่ และ Google หรือทีม Dawn ไม่ได้ลงนามหรือรับประกัน

เพิ่มการรองรับ wgpu::ExternalTexture ลงใน Emdawnwebgpu แล้ว โปรดทราบว่าคุณจะนําเข้าได้จากโค้ด JavaScript เท่านั้น (เช่น EM_ASM) เนื่องจากสร้างใน C/C++ ไม่ได้เพราะต้องใช้ออบเจ็กต์ JavaScript เช่น HTMLVideoElement หรือ VideoFrame ดูปัญหา 462477379 และ SpotTests.cpp เพื่อดูตัวอย่างโค้ด

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

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