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

François Beaufort
François Beaufort

จำนวนฟีเจอร์ WebGPU อาจดูน้อยไปเล็กน้อยในช่วงนี้ แต่ก็มีความก้าวหน้าที่สำคัญอยู่ใกล้เคียง รุ่นต่อๆ ไปจะมีฟีเจอร์ต่างๆ เช่น การปรับปรุงความเร็วในการคอมไพล์ตัวปรับแสงเงา และการเปลี่ยนแปลงรูปแบบการใช้งานแบบอะซิงโครนัสโดยใช้ WGPUFuture

กลุ่มย่อย (ฟีเจอร์อยู่ระหว่างการพัฒนา)

ฟีเจอร์กลุ่มย่อยจะเปิดใช้การทำงานพร้อมกันในระดับ SIMD ทำให้ชุดข้อความภายในกลุ่มสื่อสารและคำนวณผลรวมได้ (เช่น การคำนวณผลรวมของตัวเลข 16 ตัว) ซึ่งเป็นรูปแบบการแชร์ข้อมูลแบบข้ามชุดข้อความที่มีประสิทธิภาพสูง

GPU API สมัยใหม่รองรับการดำเนินการกลุ่มย่อย แต่การตั้งชื่อและรายละเอียดการใช้งานจะแตกต่างกันไป ทีม Chrome ได้ระบุความแพร่หลายและกำลังดำเนินการทำให้ฟีเจอร์นี้เป็นมาตรฐาน ดูข้อเสนอและความคิดเห็นหากคุณมีคำถาม

การติดตั้งใช้งานกลุ่มย่อยที่อยู่เบื้องหลัง Flag "ฟีเจอร์แพลตฟอร์มเว็บรุ่นทดลอง" ที่ chrome://flags/#enable-experimental-web-platform-features มีเพียงเล็กน้อยและไม่เป็นไปตามมาตรฐานเพื่อให้นักพัฒนาซอฟต์แวร์ได้ทดลองใช้และแชร์ความคิดเห็น เนื่องจากประโยชน์ในการใช้งานจริงยังไม่ได้รับการยืนยันในบริบทของ WebGPU

เมื่อฟีเจอร์ "chromium-experimental-subgroups" พร้อมใช้งานใน GPUAdapter ให้ขอ GPUDevice ที่มีฟีเจอร์นี้เพื่อรับการสนับสนุนกลุ่มย่อยแบบทดลองใน WGSL และตรวจสอบขีดจำกัด minSubgroupSize และ maxSubgroupSize

นอกจากนี้ คุณต้องเปิดใช้ส่วนขยายนี้อย่างชัดเจนในรหัส WGSL ด้วย enable chromium_experimental_subgroups เมื่อเปิดใช้ คุณจะมีสิทธิ์เข้าถึงส่วนเพิ่มเติมต่อไปนี้

  • subgroup_invocation_id: ค่าในตัวสำหรับดัชนีของชุดข้อความภายในกลุ่มย่อย
  • subgroup_size: ค่าในตัวสำหรับการเข้าถึงขนาดกลุ่มย่อย
  • subgroupBallot(value): แสดงผลชุดฟิลด์บิตโดยที่บิตที่สอดคล้องกับ subgroup_invocation_id มีค่าเป็น 1 หาก value เป็นจริงสำหรับการเรียกใช้ที่ใช้งานอยู่นั้น และ 0 เป็นอย่างอื่น
  • subgroupBroadcast(value, id): ประกาศ value จากคำขอที่มี subgroup_invocation_id จับคู่ id ไปยังคำขอทั้งหมดภายในกลุ่มย่อย หมายเหตุ: id ต้องเป็นค่าคงที่เวลาคอมไพล์

ข้อมูลโค้ดต่อไปนี้เป็นพื้นฐานในการปรับแต่งและสำรวจศักยภาพของกลุ่มย่อย

const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("chromium-experimental-subgroups")) {
  throw new Error("Experimental subgroups support is not available");
}
// Explicitly request experimental subgroups support.
const device = await adapter.requestDevice({
  requiredFeatures: ["chromium-experimental-subgroups"],
});

const shaderModule = device.createShaderModule({ code: `
  enable chromium_experimental_subgroups;

  @compute @workgroup_size(64) fn main(
      @builtin(global_invocation_id) global_id : vec3u,
      @builtin(subgroup_size) sg_size : u32,
      @builtin(subgroup_invocation_id) sg_id : u32) {
    // TODO: Use subgroupBallot() and subgroupBroadcast().
  }`,
});

แสดงผลตามส่วนของพื้นผิว 3 มิติ

ตอนนี้คุณสามารถแสดงผลไปยังชิ้นส่วน 3 มิติของพื้นผิว 3 มิติภายในการส่งผ่านการแสดงผลได้โดยตรง ซึ่งมากกว่าการแสดงผลพื้นผิว 2 มิติทั่วไป ด้วยสมาชิกใหม่ของ depthSlice ใน GPURenderPassColorAttachment ส่วนที่เพิ่มเข้ามานี้ จะช่วยให้คุณสามารถสร้างฉากและเอฟเฟ็กต์แบบว็อกเซล โดยการแสดงผลเป็นวอลุ่มของพื้นผิว 3 มิติโดยตรง ดูปัญหารุ่งเช้า:1020

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

ดูรายการสัญญาผูกมัดอย่างละเอียด

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

รายการของทุกอย่างที่มีการพูดถึงในซีรีส์มีอะไรใหม่ใน WebGPU

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