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

François Beaufort
François Beaufort

การผสมแบบ 2 แหล่งข้อมูล

การรวมเอาเอาต์พุตของโปรแกรมเปลี่ยนรูปแบบเศษส่วนของภาพ 2 รายการเข้าด้วยกันเป็นเฟรมบัฟเฟอร์เดียวเรียกว่าการผสมแหล่งที่มาแบบคู่ เทคนิคนี้มีประโยชน์อย่างยิ่งสำหรับแอปพลิเคชันที่ต้องมีการดำเนินการผสานรวมที่ซับซ้อน เช่น โหมดการผสมแบบ Porter-Duff การแทนที่การผ่านการจัดการแสดงผลที่ตามมาด้วยการผ่านการจัดการแสดงผลเดียวจะช่วยเพิ่มประสิทธิภาพและความยืดหยุ่นในการผสมแหล่งที่มาแบบคู่

ฟีเจอร์ "dual-source-blending" WebGPU ใหม่ช่วยให้คุณใช้แอตทริบิวต์ WGSL @blend_src ที่ @location(0) เพื่อระบุดัชนีแหล่งที่มาของการผสมและปัจจัยการผสม "src1", "one-minus-src1", "src1-alpha" และ "one-minus-src1-alpha" ได้ ดูข้อมูลโค้ดต่อไปนี้ รายการ chromestatus และปัญหา 341973423

const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("dual-source-blending")) {
  throw new Error("Dual source blending support is not available");
}
// Explicitly request dual source blending support.
const device = await adapter.requestDevice({
  requiredFeatures: ["dual-source-blending"],
});

const code = `
  enable dual_source_blending;

  struct FragOut {
    @location(0) @blend_src(0) color : vec4f,
    @location(0) @blend_src(1) blend : vec4f,
  }

  @fragment fn main() -> FragOut {
    var output : FragOut;
    output.color = vec4f(1.0, 1.0, 1.0, 1.0);
    output.blend = vec4f(0.5, 0.5, 0.5, 0.5);
    return output;
  }
`;

const shaderModule = device.createShaderModule({ code });
// Create a render pipeline with this shader module
// and run the shader on the GPU...

การปรับปรุงเวลาในการคอมไพล์ Shader ใน Metal

ทีม Chrome กำลังปรับปรุง Tint ซึ่งเป็นคอมไพเลอร์ภาษาเงา WebGPU ด้วยการเปิดตัวการนำเสนอระดับกลาง (IR) สำหรับอุปกรณ์ที่รองรับ WebGPU พร้อมแบ็กเอนด์โลหะ IR นี้ซึ่งอยู่ตรงกลางระหว่าง Abstract Syntax Tree (AST) ของ Tint กับโปรแกรมเขียนแบ็กเอนด์ Metal จะทำให้คอมไพเลอร์มีประสิทธิภาพและดูแลรักษาได้ง่ายขึ้น ซึ่งท้ายที่สุดแล้วจะเป็นประโยชน์ต่อทั้งนักพัฒนาแอปและผู้ใช้ การทดสอบเบื้องต้นแสดงให้เห็นว่า Tint เวอร์ชันใหม่ทำงานได้เร็วขึ้นถึง 10 เท่าเมื่อแปลเฉดสี WGSL ของ Unity เป็น MSL

โฟลว์ชาร์ตแสดงขั้นตอนการแปลงโค้ด Shader WGSL เป็นคำสั่งระดับต่ำของ GPU
การสร้างไปป์ไลน์การแสดงผลใน macOS

การปรับปรุงเหล่านี้ซึ่งพร้อมใช้งานบน Android และ ChromeOS อยู่แล้วกำลังขยายการให้บริการไปยังอุปกรณ์ macOS ที่รองรับ WebGPU ด้วยแบ็กเอนด์ Metal ดูปัญหา 42251016

การเลิกใช้งาน requestAdapterInfo() ของ GPUAdapter

วิธีแบบไม่พร้อมกันของ GPUAdapter requestAdapterInfo() ซ้ำซ้อนเนื่องจากนักพัฒนาซอฟต์แวร์สามารถรับ GPUAdapterInfo แบบพร้อมกันอยู่แล้วโดยใช้แอตทริบิวต์ GPUAdapter info เราจึงเลิกใช้งานเมธอด requestAdapterInfo() ของ GPUAdapter ที่ไม่เป็นไปตามมาตรฐานแล้ว ดูความตั้งใจที่จะเลิกใช้งาน

คอนโซล DevTools แสดงคำเตือนการเลิกใช้งานสำหรับ requestAdapterInfo()
คำเตือนเกี่ยวกับฟีเจอร์ที่เลิกใช้งานสำหรับ requestAdapterInfo() ในเครื่องมือสำหรับนักพัฒนาเว็บใน Chrome

การอัปเดต Dawn

C API ของ webgpu.h ได้กำหนดรูปแบบการตั้งชื่อสำหรับโครงสร้างส่วนขยายไว้ ดูการเปลี่ยนชื่อและปัญหา 42241174 ดังต่อไปนี้

ส่วนขยาย WGPURenderPassDescriptor รายการ
WGPURenderPassDescriptorMaxDrawCount -> WGPURenderPassMaxDrawCount
ส่วนขยาย WGPUShaderModuleDescriptor รายการ
WGPUShaderModuleSPIRVDescriptor -> WGPUShaderSourceSPIRV
WGPUShaderModuleWGSLDescriptor -> WGPUShaderSourceWGSL
ส่วนขยาย WGPUSurfaceDescriptor รายการ
WGPUSurfaceDescriptorFromMetalLayer -> WGPUSurfaceSourceMetalLayer
WGPUSurfaceDescriptorFromWindowsHWND -> WGPUSurfaceSourceWindowsHWND
WGPUSurfaceDescriptorFromXlibWindow -> WGPUSurfaceSourceXlibWindow
WGPUSurfaceDescriptorFromWaylandSurface -> WGPUSurfaceSourceWaylandSurface
WGPUSurfaceDescriptorFromAndroidNativeWindow -> WGPUSurfaceSourceAndroidNativeWindow
WGPUSurfaceDescriptorFromXcbWindow -> WGPUSurfaceSourceXCBWindow
WGPUSurfaceDescriptorFromCanvasHTMLSelector -> WGPUSurfaceSourceCanvasHTMLSelector_Emscripten

ประเภทแอตทริบิวต์ depthWriteEnabled ของ WGPUDepthStencilState จะเปลี่ยนจากบูลีนเป็น WGPUOptionalBool เพื่อให้แสดงสถานะ 3 สถานะที่เป็นไปได้ (จริง เท็จ และไม่มีการกำหนดค่า) ได้ดียิ่งขึ้น เช่นเดียวกับใน JavaScript API ดูข้อมูลเพิ่มเติมได้ที่ข้อมูลโค้ดต่อไปนี้และ webgpu-headers PR

wgpu::DepthStencilState depthStencilState = {};
depthStencilState.depthWriteEnabled = wgpu::OptionalBool::True; // Undefined by default

ซึ่งกล่าวถึงไฮไลต์สำคัญเพียงบางส่วนเท่านั้น ดูรายการคอมมิตทั้งหมด

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