มีอะไรใหม่ใน 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แฟล็กบรรทัดคำสั่ง ดูปัญหา dawn:1705

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

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

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

คำเตือนใหม่ใน DevTools

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

นอกจากนี้ ระบบจะแสดงคำเตือนหากGPUBlendComponentมีทั้งสมาชิกที่ชัดเจนและสมาชิกเริ่มต้น ดูปัญหา dawn:1785

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

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

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

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

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

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

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

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

ข้อมูลอัปเดตเกี่ยวกับ Dawn

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

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

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

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

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

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

มีอะไรใหม่ใน WebGPU

รายการทุกอย่างที่ครอบคลุมในซีรีส์มีอะไรใหม่ใน WebGPU

Chrome 140

Chrome 139

Chrome 138

Chrome 137

Chrome 136

Chrome 135

Chrome 134

Chrome 133

Chrome 132

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