มีอะไรใหม่ใน 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 ดูปัญหารุ่งเช้า:1705

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

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

การปรับปรุงประสบการณ์การใช้งานของนักพัฒนาซอฟต์แวร์

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

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

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

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

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

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

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

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

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

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

บันทึก HLSL หากการรวบรวมล้มเหลว

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

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

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

การส่ง nullptr แทนที่จะเป็น wgpu::Buffer ไปยัง SetVertexBuffer() ใน wgpu::RenderPassEncoder หรือ wgpu::RenderBundleEncoder จะทำให้คุณยกเลิกการตั้งค่าบัฟเฟอร์จุดยอดมุมที่กำหนดไว้ก่อนหน้านี้ในช่องที่กำหนดได้ ดูปัญหารุ่งเช้า: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 ฟีเจอร์นี้รองรับเฉพาะเมทัลและ 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

รายการของทุกอย่างที่มีการพูดถึงในซีรีส์มีอะไรใหม่ใน WebGPU

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