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

François Beaufort
François Beaufort

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

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

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

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

ปรับปรุงประสบการณ์การใช้งานสำหรับนักพัฒนาแอป

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

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

ระบบจะแสดงคำเตือนด้วยหาก GPUBlendComponent มีสมาชิกแบบระบุและแบบค่าเริ่มต้นผสมกัน ดู issue dawn:1785

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

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

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

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

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

ตอนนี้ข้อความแสดงข้อผิดพลาดในการตรวจสอบ minBindingSize จะรายงานกลุ่มและจํานวนการเชื่อมโยงที่ตรวจสอบไม่สําเร็จ รวมถึงบัฟเฟอร์ ดู issue 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 หรือ Instruments นับจากนี้ไป macOS จะมอบประสบการณ์การแก้ไขข้อบกพร่องที่ดีขึ้นเมื่อคุณเปิดใช้เพื่อการแก้ไขข้อบกพร่อง ดู issue dawn:1784

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

บันทึก HLSL หากการคอมไพล์ไม่สำเร็จ

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

การอัปเดต Dawn

ยกเลิกการตั้งค่าบัฟเฟอร์เวิร์กเท็กซ์

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

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

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

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

คุณสามารถสร้างไฟล์แนบที่อนุญาตให้การดำเนินการของเรนเดอร์พาสอยู่ในหน่วยความจำไทล์ได้ ซึ่งจะช่วยหลีกเลี่ยงการจราจรของ VRAM และอาจหลีกเลี่ยงการจัดสรร VRAM สำหรับพื้นผิวได้ด้วยการตั้งค่าการใช้ wgpu::TextureUsage::TransientAttachment ฟีเจอร์นี้รองรับเฉพาะ Metal และ Vulkan ดูปัญหา dawn: 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 ในโปรเจ็กต์ทั้งหมดที่ต้องใช้ Dependency ดังกล่าว ดูการเปลี่ยนแปลง 131750

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