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

François Beaufort
François Beaufort

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

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

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

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

เราได้ใช้การติดตั้งใช้งานกลุ่มย่อยแบบขั้นต่ำและไม่เป็นมาตรฐานไว้เบื้องหลังแฟล็ก "ฟีเจอร์แพลตฟอร์มเว็บเวอร์ชันทดลอง" ที่ 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 มิติได้โดยตรงภายใน Render Pass ซึ่งจะขยายความสามารถของ Render Pass ให้เหนือกว่าการแสดงผลเท็กซ์เจอร์ 2 มิติทั่วไปด้วยสมาชิก depthSlice ใหม่ใน GPURenderPassColorAttachment การเพิ่มนี้ช่วยให้คุณสร้างฉากและเอฟเฟกต์ที่อิงตาม Voxel ได้โดยการเรนเดอร์ลงในวอลุ่มเท็กซ์เจอร์ 3 มิติโดยตรง ดูissue dawn:1020

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

ดูรายการคอมมิตทั้งหมด

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

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

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