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

François Beaufort
François Beaufort

ส่วนขยายภาษา WGSL ที่รองรับ

สมาชิก wgslLanguageFeatures ของออบเจ็กต์ GPU จะแสดงชื่อของส่วนขยายภาษา WGSL ที่รองรับ ระบบจะเปิดใช้ส่วนขยายภาษา WGSL ที่รองรับโดยอัตโนมัติ คุณจึงไม่จำเป็นต้องส่งคำขออย่างชัดแจ้ง ปัจจุบันรายการนี้ว่างเปล่า แต่คาดว่าจะมีหลายรายการในอนาคต (เช่น do-while loops) ดูปัญหา dawn:1777

if (navigator.gpu.wgslLanguageFeatures?.has("unknown-feature")) {
  // Use unknown-feature in WGSL shader code.
}

การสนับสนุนรุ่นทดลองสำหรับ Direct3D 11

ทีม Chromium กำลังเพิ่มการรองรับ WebGPU สำหรับ Direct3D 11 ตอนนี้คุณทดสอบในเครื่องได้แล้วโดยเรียกใช้ Chrome ใน Windows ด้วยแฟล็กบรรทัดคำสั่ง --enable-unsafe-webgpu --use-webgpu-adapter=d3d11 ดูปัญหา dawn:1705

ใช้ GPU แบบแยกกันโดยค่าเริ่มต้นเมื่อใช้พลังงานจากไฟฟ้า AC

ในอุปกรณ์ macOS แบบ Dual GPU หากมีการเรียกใช้ requestAdapter() โดยไม่มีตัวเลือก powerPreference ระบบจะส่ง GPU แบบแยกกันเมื่ออุปกรณ์ของผู้ใช้เสียบปลั๊กไฟอยู่ มิเช่นนั้น ระบบจะแสดงผล GPU ที่ผสานรวม โปรดดูการเปลี่ยนแปลง 4499307

การปรับปรุงประสบการณ์ของนักพัฒนาแอป

คำเตือนใหม่สำหรับเครื่องมือสำหรับนักพัฒนาเว็บ

หากใช้คีย์ depth ใน GPUExtend3DDict คำเตือนจะแสดงในคอนโซลเครื่องมือสำหรับนักพัฒนาเว็บเนื่องจากคีย์ที่ถูกต้องคือ depthOrArrayLayers ดูปัญหา chromium:1440900

คำเตือนยังเพิ่มขึ้นด้วยหาก GPUBlendComponent มีทั้งสมาชิกที่ไม่ปฏิบัติตามหลักเกณฑ์ ดูปัญหา dawn:1785

แม้ว่าการจ่ายและการสุ่มขนาดเป็น 0 จะถูกต้อง แต่คำเตือนจะกระตุ้นให้นักพัฒนาแอปหลีกเลี่ยงเมื่อทำได้ ดูปัญหา dawn:1786

ข้อความแสดงข้อผิดพลาดที่ดียิ่งขึ้น

ระบบจะแสดงข้อความแสดงข้อผิดพลาดที่ได้รับการปรับปรุงเมื่อใช้ GPUCommandEncoder หากมีการเรียก finish() แล้ว ดูปัญหา dawn:1736

เมื่อส่งบัฟเฟอร์คำสั่งที่มีออบเจ็กต์ที่ถูกทำลาย ป้ายกำกับของบัฟเฟอร์คำสั่งที่ใช้ใน submit() จะปรากฏในข้อความแสดงข้อผิดพลาด ดูปัญหา dawn:1747

ตอนนี้ระบบระบุส่วนที่ไม่ถูกต้องของสถานะของเทมเพลตความลึกไว้ในข้อความแสดงข้อผิดพลาดเมื่อตรวจสอบ depthStencil ดูปัญหา dawn:1735

ตอนนี้ข้อความแสดงข้อผิดพลาดในการตรวจสอบความถูกต้อง minBindingSize จะรายงานกลุ่มและหมายเลขการเชื่อมโยงที่ไม่ผ่านการตรวจสอบ รวมถึงบัฟเฟอร์ด้วย ดูปัญหา dawn:1604

ข้อความแสดงข้อผิดพลาดที่แสดงผลโดยเมธอด mapAsync() ในออบเจ็กต์ GPUBuffer ได้รับการปรับปรุงเพื่อช่วยนักพัฒนาซอฟต์แวร์เมื่อแก้ไขข้อบกพร่อง ดูตัวอย่างด้านล่างและปัญหา chromium:1431622

// Create a GPU buffer and map it.
const descriptor = { size: 0, usage: GPUBufferUsage.MAP_READ };
const buffer = device.createBuffer(descriptor);
buffer.mapAsync(GPUMapMode.READ);

// Before it has been mapped, request another mapping.
try {
  await buffer.mapAsync(GPUMapMode.READ);
} catch (error) {
  // New! Error message tells you mapping is already pending.
  console.warn(error.message);
}

ป้ายกำกับในเครื่องมือแก้ไขข้อบกพร่องของ macOS

การเปิด/ปิดการแก้ไขข้อบกพร่องของ use_user_defined_labels_in_backend จะช่วยให้คุณส่งต่อป้ายกำกับออบเจ็กต์ไปยังแบ็กเอนด์เพื่อดูป้ายกำกับดังกล่าวในเครื่องมือแก้ไขข้อบกพร่องเฉพาะแพลตฟอร์ม เช่น RenderDoc, PIX หรือเครื่องมือได้ จากนี้ไป macOS จะมอบประสบการณ์การแก้ไขข้อบกพร่องที่ดีกว่าให้คุณเมื่อคุณเปิดใช้สำหรับการแก้ไขข้อบกพร่อง ดูปัญหา dawn:1784

วันที่ ภาพหน้าจอของแอป Instruments ใน macOS แสดงป้ายกำกับที่กำหนดเองที่มาจาก WebGPU
ป้ายกำกับที่ผู้ใช้กำหนดในแอป Instruments ใน macOS

บันทึก HLSL หากการคอมไพล์ล้มเหลว

การเปิด/ปิดการแก้ไขข้อบกพร่อง dump_shaders ช่วยให้คุณบันทึกตัวสร้างเฉดสี WGSL และโปรแกรมสร้างเฉดสีแบ็กเอนด์ที่แปลแล้วได้ จากนี้ไป เมื่อเปิดใช้สำหรับการแก้ไขข้อบกพร่อง ระบบจะส่งออก HLSL หากทำการคอมไพล์ไม่สำเร็จ ดูปัญหา dawn:1681

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

ยกเลิกการตั้งค่าบัฟเฟอร์ Vertex

การส่ง nullptr แทนที่จะเป็น wgpu::Buffer ไปยัง SetVertexBuffer() ใน wgpu::RenderPassEncoder หรือ wgpu::RenderBundleEncoder ช่วยให้คุณยกเลิกการตั้งค่าบัฟเฟอร์ Vertex ที่ตั้งค่าไว้ก่อนหน้านี้ในช่องที่กำหนดได้ ดูปัญหา dawn:1675

// Set vertex buffer in slot 0.
myRenderPassEncoder.SetVertexBuffer(0, myVertexBuffer);

// Then later, unset vertex buffer in slot 0.
myRenderPassEncoder.SetVertexBuffer(0, nullptr);

ไฟล์แนบแบบชั่วคราว

คุณสามารถสร้างไฟล์แนบที่อนุญาตให้การดำเนินการแสดงผล Pass อยู่ในหน่วยความจำการ์ดต่อไป โดยหลีกเลี่ยงการรับส่งข้อมูล VRAM และอาจหลีกเลี่ยงการจัดสรร VRAM สำหรับพื้นผิวได้โดยการตั้งค่าการใช้งาน wgpu::TextureUsage::TransientAttachment ฟีเจอร์นี้รองรับเฉพาะโลหะและ Vulkan เท่านั้น ดูจุดเริ่มต้นของปัญหา: 1695

wgpu::TextureDescriptor desc;
desc.format = wgpu::TextureFormat::RGBA8Unorm;
desc.size = {1, 1, 1};
desc.usage = wgpu::TextureUsage::RenderAttachment |
             wgpu::TextureUsage::TransientAttachment;

auto transientTexture = device.CreateTexture(&desc);

// You can now create views from the texture to serve as transient
// attachments, e.g. as color attachments in a render pipeline.

อาคารที่ไม่มี depot_tools

ตัวเลือก DAWN_FETCH_DEPENDENCIES CMake ใหม่ช่วยให้คุณดึงข้อมูลทรัพยากร Dependency ของ Dawn ได้โดยใช้สคริปต์ Python ที่อ่านไฟล์ DEPS แทนการติดตั้ง depot_tools โดยโปรเจ็กต์ทั้งหมดที่จำเป็นต้องใช้ โปรดดูการเปลี่ยนแปลง 131750

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