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

François Beaufort
François Beaufort

เท็กเจอร์พื้นที่เก็บข้อมูลแบบอ่านอย่างเดียวและอ่าน/เขียน

ประเภทการเชื่อมโยงพื้นผิวพื้นที่เก็บข้อมูลช่วยให้โปรแกรมเปลี่ยนสีสามารถอ่านจากพื้นผิวพื้นที่เก็บข้อมูลได้โดยไม่ต้องเพิ่มการใช้งาน TEXTURE_BINDING และทำการอ่านและเขียนแบบผสมในบางรูปแบบ เมื่อ "readonly_and_readwrite_storage_textures" WGSL ส่วนขยายภาษาอยู่ใน navigator.gpu.wgslLanguageFeatures ตอนนี้คุณสามารถตั้งค่าสิทธิ์เข้าถึง GPUStorageTexture เป็น "read-write" หรือ "read-only" เมื่อสร้างเลย์เอาต์กลุ่มการเชื่อมโยงได้แล้ว ก่อนหน้านี้ตัวเลือกนี้มีเพียง "write-only"

จากนั้นโค้ด Shader WGSL จะใช้ตัวระบุการเข้าถึง read_write และ read สำหรับเท็กเจอร์พื้นที่เก็บข้อมูลได้ ฟังก์ชันในตัว textureLoad() และ textureStore() จะทํางานตามลําดับ และฟังก์ชันในตัว textureBarrier() ใหม่จะพร้อมใช้งานเพื่อซิงค์การเข้าถึงหน่วยความจําของเท็กเจอร์ในกลุ่มงาน

เราขอแนะนำให้ใช้คําสั่ง requires เพื่อบ่งบอกถึงโอกาสที่โค้ดจะไม่สามารถพอร์ตได้โดยใช้ requires readonly_and_readwrite_storage_textures; ที่ด้านบนของโค้ด Shader WGSL ดูตัวอย่างต่อไปนี้และ issue dawn:1972

if (!navigator.gpu.wgslLanguageFeatures.has("readonly_and_readwrite_storage_textures")) {
  throw new Error("Read-only and read-write storage textures are not available");
}

const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();

const bindGroupLayout = device.createBindGroupLayout({
  entries: [{
    binding: 0,
    visibility: GPUShaderStage.COMPUTE,
    storageTexture: {
      access: "read-write", // <-- New!
      format: "r32uint",
    },
  }],
});

const shaderModule = device.createShaderModule({ code: `
  requires readonly_and_readwrite_storage_textures;

  @group(0) @binding(0) var tex : texture_storage_2d<r32uint, read_write>;

  @compute @workgroup_size(1, 1)
  fn main(@builtin(local_invocation_id) local_id: vec3u) {
    var data = textureLoad(tex, vec2i(local_id.xy));
    data.x *= 2;
    textureStore(tex, vec2i(local_id.xy), data);
  }`
});

// You can now create a compute pipeline with this shader module and
// send the appropriate commands to the GPU.

การสนับสนุน Service Worker และ Shared Worker

WebGPU ใน Chrome ยกระดับการรองรับ Web Worker ไปอีกขั้น โดยตอนนี้รองรับทั้ง Service Worker และ Shared Worker คุณสามารถใช้ Service Worker เพื่อปรับปรุงงานเบื้องหลังและความสามารถแบบออฟไลน์ รวมถึงใช้ Shared Worker เพื่อแชร์ทรัพยากรอย่างมีประสิทธิภาพระหว่างสคริปต์ต่างๆ ดูปัญหา chromium:41494731

ดูวิธีใช้ WebGPU ใน Extension Service Worker ได้จากตัวอย่างส่วนขยาย Chrome และส่วนขยาย WebLLM ใน Chrome

ภาพหน้าจอของส่วนขยาย WebLLM ใน Chrome
ส่วนขยาย WebLLM ใน Chrome

แอตทริบิวต์ข้อมูลอะแดปเตอร์ใหม่

ตอนนี้แอตทริบิวต์ข้อมูลอะแดปเตอร์ d3dShaderModel และ vkDriverVersion ที่ไม่ใช่มาตรฐานพร้อมใช้งานแล้วเมื่อเรียกใช้ requestAdapterInfo() หากผู้ใช้เปิดใช้Flag "ฟีเจอร์สำหรับนักพัฒนาซอฟต์แวร์ WebGPU" ที่ chrome://flags/#enable-webgpu-developer-features เมื่อรองรับ

  • d3dShaderModel คือหมายเลขรุ่นของโปรแกรมเปลี่ยนสี D3D ที่รองรับสูงสุด เช่น ค่า 62 บ่งบอกว่าไดรเวอร์ปัจจุบันรองรับ HLSL SM 6.2 โปรดดูเอกสารประกอบและปัญหา dawn:1254

  • vkDriverVersion คือหมายเลขเวอร์ชันของไดรเวอร์ Vulkan ที่ระบุโดยผู้ให้บริการ โปรดดูเอกสารประกอบและปัญหา chromium:327457605

ภาพหน้าจอของ https://webgpureport.org ที่แสดง vkDriverVersion ในข้อมูลอะแดปเตอร์
ข้อมูลอะแดปเตอร์ vkDriverVersion ที่แสดงใน https://webgpureport.org

การแก้ไขข้อบกพร่อง

การสร้างไปป์ไลน์ 2 รายการที่มีกลุ่มการเชื่อมโยงที่ตรงกันโดยใช้ layout: "auto" จากนั้นสร้างกลุ่มการเชื่อมโยงกับไปป์ไลน์แรก และนำไปใช้ในไปป์ไลน์ที่ 2 ตอนนี้จะทำให้เกิด GPUValidationError การอนุญาตให้ดำเนินการดังกล่าวเป็นข้อบกพร่องในการใช้งานซึ่งตอนนี้ได้รับการแก้ไขแล้วด้วยการทดสอบที่เหมาะสม ดู issue dawn:2402

การอัปเดต Dawn

ใน Dawn API ตอนนี้ระบบจะไม่เรียกใช้การเรียกกลับข้อผิดพลาดที่ไม่ได้บันทึกไว้ซึ่งตั้งค่าด้วย wgpuDeviceSetUncapturedErrorCallback หลังจากที่อุปกรณ์ GPU สูญหาย การแก้ไขนี้ช่วยให้ Dawn สอดคล้องกับข้อกำหนดเฉพาะของ JavaScript API และการใช้งานของ Blink ดูปัญหา dawn:2459

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

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

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

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