WebGPU 新功能 (Chrome 149-150)

François Beaufort
François Beaufort

發布日期:2026 年 6 月 17 日

Immediates

即時常數 (又稱推送常數或根常數) 可讓您直接將少量經常變更的資料傳遞至著色器,這個程序會略過建立 GPU 緩衝區及管理繫結群組的額外負擔。

更新每次繪製呼叫都會變更的資料 (例如數百個物件的專屬物件 ID 或 3D 轉換矩陣) 的統一緩衝區繫結,會造成 CPU 負荷。將原始值直接注入傳遞編碼器,避免將資料寫入記憶體及管理 GPU 查閱作業。

即時變數可為微小的高動態變數提供快速路徑。如要處理大型資料陣列、複雜的照明結構或大量矩陣,請使用統一緩衝區或儲存緩衝區。

在 WGSL 著色器中,<immediate> 位址空間可讓您定義可直接傳遞至通道編碼器的即時資料。在 JavaScript 中,於繪製呼叫前呼叫 setImmediates(),即可提供這項資料,不必繫結群組。如要檢查是否支援,請透過 navigator.gpu.wgslLanguageFeatures 偵測 immediate_address_space WGSL 語言擴充功能。請參閱以下範例和出貨意圖

if (!navigator.gpu.wgslLanguageFeatures.has('immediate_address_space')) {
   throw new Error(`WGSL immediate address space is not available`);
}

const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();

const module = device.createShaderModule({ code: `
  requires immediate_address_space;

  var<immediate> color: vec4f;

  @vertex fn vertexMain(@builtin(vertex_index) i : u32) -> @builtin(position) vec4f {
    const pos = array(vec2f(0, 1), vec2f(-1, -1), vec2f(1, -1));
    return vec4f(pos[i], 0, 1);
  }

  @fragment fn fragmentMain() -> @location(0) vec4f {
    return color;
  }`,
});

// Create render pass encoder (omitted)...

// By using layout: 'auto', WebGPU will automatically infer the `immediateSize`
// required by the pipeline layout from the WGSL module.
const pipeline = device.createRenderPipeline({
  layout: 'auto',
  vertex: { module },
  fragment: { module, targets: [{ format }] },
});
myRenderPassEncoder.setPipeline(pipeline);

// Send immediate data to the GPU, then issue a draw call
myRenderPassEncoder.setImmediates(/*rangeOffset=*/0, new Float32Array([255, 0, 0, 255]));
myRenderPassEncoder.draw(3);
myRenderPassEncoder.end();

如要深入瞭解這項功能,請參閱 WebGPUFundamentals Immediates

感謝 Microsoft 團隊的貢獻!

對暫時性附件進行更嚴格的驗證

WebGPU 最近推出了 TRANSIENT_ATTACHMENT GPUTextureUsage 旗標,可讓開發人員建立暫時的算繪附件,例如深度樣板緩衝區或多重取樣目標。這些附件會保留在快速的晶片內建記憶體中,不會分配主要 VRAM。

最近的更新 (#6248#6267) 修正了驗證規則,可防止濫用這些節省記憶體的紋理附件:

  • 由於平台限制,建立暫時性紋理時,viewFormats 必須是空陣列。暫時性紋理僅用於算繪,因此不需要替代檢視畫面格式。
  • 建立紋理檢視區塊不會縮小使用旗標。在暫時性紋理上呼叫 createView() 時,檢視區塊無法變更其用途。
  • 暫時性附件無法做為算繪通道內的 resolveTarget

黎明更新

這僅涵蓋部分重點。請參閱完整的提交清單

WebGPU 最新消息

WebGPU 最新消息」系列涵蓋的所有主題清單。

Chrome 149-150

Chrome 147-148

Chrome 146

Chrome 145

Chrome 144

Chrome 143

Chrome 142

Chrome 141

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