發布日期: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 155-156
- WGSL fragment_depth 擴充功能
- 紋理壓縮未對齊
- srgb-linear 和 display-p3-linear 色彩空間
- 其他 snorm10-10-10-2 頂點格式
- Linux 上的 NVIDIA 支援 f16
- Dawn 更新
Chrome 153-154
Chrome 151-152
Chrome 149-150
Chrome 147-148
Chrome 146
Chrome 145
Chrome 144
- WGSL subgroup_id 擴充功能
- WGSL uniform_buffer_standard_layout 擴充功能
- Linux 上的 WebGPU
- 更快速的 writeBuffer 和 writeTexture
- Dawn 更新
Chrome 143
Chrome 142
Chrome 141
Chrome 140
- 裝置要求會耗用轉接頭
- 使用材質的簡短方式,適用於使用材質檢視區塊的情況
- WGSL textureSampleLevel 支援 1D 紋理
- 淘汰 bgra8unorm 唯讀儲存空間紋理用法
- 移除 GPUAdapter isFallbackAdapter 屬性
- Dawn 更新
Chrome 139
Chrome 138
Chrome 137
- 使用紋理檢視區塊進行 externalTexture 繫結
- 複製緩衝區,但不指定位移和大小
- WGSL 工作群組 UniformLoad,使用指標指向原子
- GPUAdapterInfo powerPreference 屬性
- 移除 GPURequestAdapterOptions compatibilityMode 屬性
- Dawn 更新
Chrome 136
Chrome 135
- 允許使用空值繫結群組版面配置建立管道版面配置
- 允許檢視區塊超出算繪目標的邊界
- 在 Android 上更輕鬆存取實驗性相容模式
- 移除 maxInterStageShaderComponents 限制
- Dawn 更新
Chrome 134
Chrome 133
- 額外的 unorm8x4-bgra 和 1 元件頂點格式
- Allow unknown limits to be requested with undefined value
- WGSL 對齊規則異動
- 使用捨棄功能提升 WGSL 效能
- 將 VideoFrame displaySize 用於外部紋理
- 使用 copyExternalImageToTexture 處理非預設方向的圖片
- 提升開發人員體驗
- 使用 featureLevel 啟用相容模式
- 清除實驗性子群組功能
- 淘汰 maxInterStageShaderComponents 限制
- Dawn 更新
Chrome 132
- 紋理檢視畫面用量
- 32 位元浮點紋理混合
- GPUDevice adapterInfo 屬性
- 以無效格式設定畫布內容時,會擲回 JavaScript 錯誤
- 紋理的篩選取樣器限制
- 擴大子群組實驗
- 提升開發人員體驗
- 實驗性支援 16 位元標準化紋理格式
- Dawn 更新
Chrome 131
- WGSL 中的裁剪距離
- GPUCanvasContext getConfiguration()
- 點和線條圖元不得有深度偏差
- 內建子群組的全面掃描功能
- 實驗性支援多重繪圖間接
- 著色器模組編譯選項嚴格數學
- 移除 GPUAdapter requestAdapterInfo()
- Dawn 更新
Chrome 130
Chrome 129
Chrome 128
Chrome 127
Chrome 126
Chrome 125
Chrome 124
Chrome 123
Chrome 122
Chrome 121
- 在 Android 上支援 WebGPU
- 在 Windows 上使用 DXC 而非 FXC 編譯著色器
- 運算和算繪階段的時間戳記查詢
- 著色器模組的預設進入點
- 支援將 display-p3 設為 GPUExternalTexture 色彩空間
- 記憶體堆積資訊
- Dawn 更新
Chrome 120
Chrome 119
Chrome 118
Chrome 117
Chrome 116
- 整合 WebCodecs
- GPUAdapter
requestDevice()傳回遺失的裝置 - 如果呼叫
importExternalTexture(),請確保影片播放流暢 - 規格一致性
- 提升開發人員體驗
- Dawn 更新
Chrome 115
Chrome 114
Chrome 113
- 在
importExternalTexture()中使用 WebCodecs VideoFrame 來源