發布日期: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
- 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 來源