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

François Beaufort
François Beaufort

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

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

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

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

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

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

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

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

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

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

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

เมื่อส่งบัฟเฟอร์คำสั่งที่มีออบเจ็กต์ที่ถูกทำลาย ป้ายกำกับของบัฟเฟอร์คำสั่งที่ใช้ใน submit() จะปรากฏในข้อความแสดงข้อผิดพลาด ดูปัญหา 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 หากการคอมไพล์ไม่สำเร็จ ดูปัญหา 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

รายการทั้งหมดที่กล่าวถึงในซีรีส์ What's New in 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