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

François Beaufort
François Beaufort

การรองรับ OpenGL ES เวอร์ชันทดลองบน Android

ตอนนี้คุณเข้าถึง GPUAdapter จากแบ็กเอนด์ OpenGL ES ได้แล้วเมื่อขอโหมดความเข้ากันได้ของ WebGPU เวอร์ชันทดลองใน Chrome สำหรับ Android ซึ่งจะเป็นประโยชน์อย่างยิ่งสำหรับอุปกรณ์ Android ที่ไม่รองรับ Vulkan 1.1 ขึ้นไป ดูตัวอย่างต่อไปนี้และ issue dawn:1545

// Request a GPUAdapter in compatibility mode
const adapter = await navigator.gpu.requestAdapter({ compatibilityMode: true });
หน้ารายงาน WebGPU จะแสดงข้อมูล GPUAdapter จากแบ็กเอนด์ OpenGL ES ในอุปกรณ์ Android
ข้อมูลอะแดปเตอร์ OpenGL ES ใน webgpureport.org

เนื่องจากฟีเจอร์นี้ยังอยู่ในขั้นทดลอง คุณจึงต้องทำตามขั้นตอนต่อไปนี้

  1. เปิดใช้แฟล็ก Chrome ต่อไปนี้ "การรองรับ WebGPU ที่ไม่ปลอดภัย" "ฟีเจอร์สำหรับนักพัฒนาซอฟต์แวร์ WebGPU" และ "เปิดใช้บรรทัดคำสั่งในอุปกรณ์ที่ไม่ได้รูท"
  2. เปิดใช้การแก้ไขข้อบกพร่องผ่าน USB ในอุปกรณ์ Android
  3. เชื่อมต่ออุปกรณ์ Android กับเวิร์กสเตชัน เรียกใช้ adb shell 'echo "_ --use-webgpu-adapter=opengles" > /data/local/tmp/chrome-command-line' เพื่อใช้แบ็กเอนด์ OpenGL ES มากกว่า Vulkan แล้วรีสตาร์ท Chrome

แอตทริบิวต์ข้อมูล GPUAdapter

ตอนนี้คุณรับข้อมูลระบุตัวตนเกี่ยวกับอะแดปเตอร์แบบซิงค์ได้แล้วโดยใช้แอตทริบิวต์ info ของ GPUAdapter ก่อนหน้านี้ การเรียกใช้เมธอด GPU แบบอะซิงโครนัส requestAdapterInfo() เป็นวิธีเดียวในการรับข้อมูลอะแดปเตอร์ อย่างไรก็ตาม ระบบนำ requestAdapterInfo() ออกจากข้อกำหนดของ WebGPU แล้ว และจะนำออกใน Chrome ภายในปีนี้ เพื่อให้นักพัฒนาซอฟต์แวร์เว็บได้มีเวลาปรับเปลี่ยนที่จำเป็น โปรดดูตัวอย่างต่อไปนี้สถานะ Chrome และปัญหา 335383516

const adapter = await navigator.gpu.requestAdapter();
const info = adapter.info;

// During the transition period, you can use the following:
// const info = adapter.info || await adapter.requestAdapterInfo();

console.log(`Vendor: ${info.vendor}`); // "arm"
console.log(`Architecture: ${info.architecture}`); // "valhall"

การปรับปรุงการทำงานร่วมกันของ WebAssembly

เราไม่จำกัดขนาดอาร์กิวเมนต์ BufferSource ต่อไปนี้ไว้ที่ 2 GB อีกต่อไปเพื่อรองรับกอง WebAssembly ที่ส่งไปยัง WebGPU โดยตรง ได้แก่ dynamicOffsetsData ใน setBindGroup(), แหล่งที่มา data ใน writeBuffer() และแหล่งที่มา data Pin writeTexture() ดูปัญหา 339049388

ปรับปรุงข้อผิดพลาดของโปรแกรมเปลี่ยนไฟล์คำสั่ง

ตอนนี้ข้อผิดพลาดในการตรวจสอบบางอย่างที่มาจากโปรแกรมเข้ารหัสคําสั่งจะมีข้อมูลตามบริบทที่ปรับปรุงแล้ว เช่น การพยายามเริ่มพาสการประมวลผลขณะที่พาสการแสดงผลยังคงเปิดอยู่จะทำให้เกิดข้อผิดพลาดต่อไปนี้

Command cannot be recorded while [CommandEncoder (unlabeled)] is locked and [RenderPassEncoder (unlabeled)] is currently open.
    at CheckCurrentEncoder (..\..\third_party\dawn\src\dawn\native\EncodingContext.h:106)

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

Command cannot be recorded while [CommandEncoder (unlabeled)] is locked and [RenderPassEncoder (unlabeled)] is currently open.
 - While encoding [CommandEncoder (unlabeled)].BeginComputePass([ComputePassDescriptor]).

การอัปเดต Dawn

C API ของ webgpu.h จะไม่แสดง wgpuSurfaceGetPreferredFormat() อีกต่อไป ซึ่งเป็น C ที่เทียบเท่ากับ wgpu::Surface::GetPreferredFormat() ของ Dawn แต่ให้ใช้ wgpu::Surface::GetCapabilities() เพื่อดูรายการรูปแบบที่รองรับ แล้วใช้ formats[0] เพื่อดูรูปแบบพื้นผิวที่ต้องการสำหรับพื้นผิวนี้ ในระหว่างนี้ การเรียกใช้ wgpu::Surface::GetPreferredFormat() จะแสดงคำเตือนการเลิกใช้งาน ดูปัญหา 290

การใช้พื้นผิวที่รองรับของพื้นผิวพร้อมใช้งานแล้วผ่าน wgpu::SurfaceCapabilities::usages เมื่อเรียกใช้ wgpu::Surface::GetCapabilities() โดยควรมี wgpu::TextureUsage::RenderAttachment เสมอ โปรดดูปัญหา 301

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

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