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

François Beaufort
François Beaufort

เผยแพร่เมื่อวันที่ 26 พฤษภาคม 2025

ใช้มุมมองพื้นผิวสำหรับการเชื่อมโยง externalTexture

ตอนนี้ระบบอนุญาตให้ใช้ GPUTextureView (2 มิติ ทรัพยากรย่อยรายการเดียว) ที่เข้ากันได้แทนการเชื่อมโยง GPUExternalTexture เมื่อสร้าง GPUBindGroup

ซึ่งจะลดความซับซ้อนของตรรกะโปรแกรมเปลี่ยนสีในไปป์ไลน์เอฟเฟกต์วิดีโอที่ต้องจัดการทั้ง GPUExternalTexture (สำหรับวิดีโอต้นทาง) และ GPUTextureView (สำหรับการประมวลผลขั้นกลาง) และยังช่วยลดความจำเป็นในการคอมไพล์เฉดเดอร์แบบไดนามิกโดยขึ้นอยู่กับแหล่งที่มาของพื้นผิว โปรดดูความตั้งใจที่จะเปิดตัว: WebGPU: GPUTextureView สำหรับการเชื่อมโยง externalTexture

const texture = myDevice.createTexture({
  size: [42, 42],
  format: navigator.gpu.getPreferredCanvasFormat(),
  usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING,
});

const code = `
@group(0) @binding(0) var texture : texture_external;
@group(0) @binding(1) var<storage, read_write> buffer: vec2u;
    
@compute @workgroup_size(1) fn main() {
  buffer = textureDimensions(texture);
}`;

const pipeline = myDevice.createComputePipeline({
  layout: "auto",
  compute: { module: myDevice.createShaderModule({ code }) },
});

const bindGroup = myDevice.createBindGroup({
  layout: pipeline.getBindGroupLayout(0),
  entries: [
    { binding: 0, resource: texture.createView() }, // Use texture view for an externalTexture binding
    { binding: 1, resource: { buffer: myBuffer } },
  ],
});

คัดลอกบัฟเฟอร์โดยไม่ระบุออฟเซตและขนาด

การโอเวอร์โหลดเมธอด GPUCommandEncoder ใหม่ช่วยให้นักพัฒนาซอฟต์แวร์ละเว้นพารามิเตอร์ออฟเซตและขนาดได้เมื่อใช้ copyBufferToBuffer() เพื่อลดความซับซ้อนในการคัดลอกบัฟเฟอร์ทั้งรายการ โปรดดูความตั้งใจที่จะเปิดตัว: WebGPU: การโอเวอร์โหลด copyBufferToBuffer

const size = 42;
const srcBuffer = myDevice.createBuffer({
  size,
  usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC,
});
const dstBuffer = myDevice.createBuffer({
  size,
  usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ,
});

// Copy entire buffer.
myCommandEncoder.copyBufferToBuffer(srcBuffer, dstBuffer);

// This is the same as the following.
// myCommandEncoder.copyBufferToBuffer(srcBuffer, 0, dstBuffer, 0, size);

WGSL workgroupUniformLoad โดยใช้พอยน์เตอร์ไปยังอะตอม

เราได้เพิ่ม workgroupUniformLoad(ptr) แบบโอเวอร์โหลดใหม่ใน WGSL เพื่ออำนวยความสะดวกให้แก่นักพัฒนาแอป โดยจะโหลดค่าที่ ptr ชี้ถึงแบบอะตอม แล้วแสดงผลในการเรียกใช้ทั้งหมดในกลุ่มงาน โดยที่ ptr เป็นพอยน์เตอร์ไปยังอะตอมภายในตัวแปรกลุ่มงาน ดูปัญหา 408241039

@group(0) @binding(0) var<storage, read_write> buffer : array<u32, 1>;

var<workgroup> wgvar : atomic<u32>;

@compute @workgroup_size(1, 1)
fn main(@builtin(local_invocation_index) lid: u32) {
  if (lid == 0) {
    atomicStore(&(wgvar), 42u);
  }
  buffer[lid] = workgroupUniformLoad(&wgvar);
}

แอตทริบิวต์ powerPreference ของ GPUAdapterInfo

ตอนนี้แอตทริบิวต์สตริง powerPreference GPUAdapterInfo ที่ไม่เป็นไปตามมาตรฐานพร้อมใช้งานแล้วเมื่อผู้ใช้เปิดใช้ Flag "ฟีเจอร์สำหรับนักพัฒนาซอฟต์แวร์ WebGPU" ที่ chrome://flags/#enable-webgpu-developer-features หากรองรับ ค่า powerPreference อาจเป็น "low-power" หรือ "high-performance" ทั้งนี้ขึ้นอยู่กับค่า GPUPowerPreference ที่ใช้ใน GPURequestAdapterOptions โปรดดู CL 6438860

function checkPowerPreferenceForGpuDevice(device) {
  const powerPreference = device.adapterInfo.powerPreference;
  if (powerPreference === "high-performance") {
    // High-performance GPU detected. Enabling enhanced graphics settings.
  } else if (powerPreference === "low-power") {
    // Low-power GPU detected. Optimizing for battery life.
  }
}

นำแอตทริบิวต์ compatibilityMode ของ GPURequestAdapterOptions ออก

เรานำแอตทริบิวต์ GPURequestAdapterOptions compatibilityMode เวอร์ชันทดลองออกแล้ว และใช้แอตทริบิวต์ featureLevel เวอร์ชันมาตรฐานแทน ซึ่งเพิ่มเข้ามาใน Chrome 133 ดูปัญหา 366151404

การอัปเดต Dawn

นักพัฒนาซอฟต์แวร์สามารถสร้างโปรเจ็กต์ WebGPU โดยใช้ภาษาต่างๆ เช่น C++ โดยใช้ webgpu.h เพื่อกำหนดเป้าหมายทั้ง WebAssembly และแพลตฟอร์มที่เฉพาะเจาะจง "emdawnwebgpu" ("Emscripten Dawn WebGPU") ที่เพิ่งเปิดตัวใหม่ของ Dawn ใช้ webgpu.h มาตรฐานล่าสุดผ่าน API ของเบราว์เซอร์

Emdawnwebgpu เป็นฟอร์ก (ที่ได้รับการดูแล) ของ Emscripten (ตอนนี้ไม่ได้รับการดูแล) ที่ใช้การเชื่อมโยงในตัว (USE_WEBGPU) การพัฒนาใหม่ทั้งหมดเกิดขึ้นใน emdawnwebgpu และเราจะนำการเชื่อมโยงในตัวของ Emscripten ออกเมื่อนักพัฒนาแอปเปลี่ยนไปใช้ emdawnwebgpu ส่วนหัว C ของ Emdawnwebgpu คล้ายกับของ Dawn มาก ส่วนการเชื่อมโยงในตัวล้าสมัยมาก

ดาวน์โหลด emdawnwebgpu จากหน้ารุ่นของ GitHub ของ Dawn และอ่านREADME.md ของแพ็กเกจเพื่อดูข้อมูลเกี่ยวกับวิธีใช้ ไฟล์ต้นฉบับจะอยู่ในที่เก็บ Dawn

ดูคู่มือฉบับสมบูรณ์ได้ในเอกสารประกอบสร้างแอปด้วย WebGPU ฉบับปรับปรุง

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

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

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

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