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

François Beaufort
François Beaufort

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

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

"dual-source-blending"ฟีเจอร์ WebGPU ใหม่ช่วยให้คุณใช้แอตทริบิวต์ WGSL @blend_src ที่ @location(0) เพื่อระบุดัชนีแหล่งที่มาของการผสมและปัจจัยการผสมต่อไปนี้ได้ "src1", "one-minus-src1", "src1-alpha" และ "one-minus-src1-alpha" ดูข้อมูลโค้ดต่อไปนี้ รายการใน Chrome Status และปัญหา 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 ซึ่งเป็นคอมไพเลอร์ภาษา Shader ของ WebGPU โดยการเปิดตัวการแสดงข้อมูลระดับกลาง (IR) สำหรับอุปกรณ์ที่รองรับ WebGPU ด้วยแบ็กเอนด์ Metal IR นี้ซึ่งอยู่ระหว่าง Abstract Syntax Tree (AST) ของ Tint กับโปรแกรมเขียนแบ็กเอนด์ของ Metal จะช่วยให้คอมไพเลอร์มีประสิทธิภาพและดูแลรักษาได้มากขึ้น ซึ่งจะเป็นประโยชน์ต่อนักพัฒนาแอปและผู้ใช้ในท้ายที่สุด การทดสอบเบื้องต้นแสดงให้เห็นว่า Tint เวอร์ชันใหม่เร็วกว่าเดิมถึง 10 เท่าเมื่อแปลเชดเดอร์ WGSL ของ Unity เป็น MSL

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

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

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

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

คอนโซลเครื่องมือสำหรับนักพัฒนาเว็บจะแสดงคำเตือนการเลิกใช้งานสำหรับ 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

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

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

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

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