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

François Beaufort
François Beaufort

การทดสอบการรองรับ OpenGL ES บน Android

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

การรับข้อมูลระบุตัวตนเกี่ยวกับอะแดปเตอร์ทำแบบซิงโครนัสด้วยแอตทริบิวต์ GPUAdapter info ได้แล้ว ก่อนหน้านี้ การเรียกใช้เมธอด 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

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

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

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

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]).

ข้อมูลอัปเดตรุ่งเช้า

webgpu.h C API จะไม่แสดง 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

รายการทั้งหมดที่กล่าวถึงในซีรีส์ What's New in WebGPU

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