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

François Beaufort
François Beaufort

การผสมผสานแหล่งที่มาแบบคู่

การรวมเอาเอาต์พุตของโปรแกรมเปลี่ยนรูปแบบเศษส่วนของภาพ 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 ที่มีแบ็กเอนด์ 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 แบบสอดคล้องกันโดยใช้แอตทริบิวต์ GPUAdapter info อยู่แล้ว เราจึงเลิกใช้งานเมธอด 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

ประเภทแอตทริบิวต์ 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