唯讀和讀寫儲存空間紋理
儲存體紋理繫結類型可讓著色器從儲存體紋理讀取資料,而無需新增 TEXTURE_BINDING
用法,並針對特定格式執行混合讀取和寫入作業。如果 "readonly_and_readwrite_storage_textures"
WGSL 語言擴充功能位於 navigator.gpu.wgslLanguageFeatures
中,您現在可以在建立繫結群組版面配置時,將 GPUStorageTexture
存取權設為 "read-write"
或 "read-only"
。先前這項功能僅限於 "write-only"
。
接著,WGSL 著色器程式碼可以使用 read_write
和 read
存取限定詞來存放紋理,textureLoad()
和 textureStore()
內建函式會相應運作,而新的 textureBarrier()
內建函式可用於同步處理工作群組中的紋理記憶體存取作業。
建議您使用 requires-directive,在 WGSL 著色器程式碼頂端使用 requires readonly_and_readwrite_storage_textures;
表示可能無法移植。請參閱以下範例和dawn:1972 版本。
if (!navigator.gpu.wgslLanguageFeatures.has("readonly_and_readwrite_storage_textures")) {
throw new Error("Read-only and read-write storage textures are not available");
}
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
const bindGroupLayout = device.createBindGroupLayout({
entries: [{
binding: 0,
visibility: GPUShaderStage.COMPUTE,
storageTexture: {
access: "read-write", // <-- New!
format: "r32uint",
},
}],
});
const shaderModule = device.createShaderModule({ code: `
requires readonly_and_readwrite_storage_textures;
@group(0) @binding(0) var tex : texture_storage_2d<r32uint, read_write>;
@compute @workgroup_size(1, 1)
fn main(@builtin(local_invocation_id) local_id: vec3u) {
var data = textureLoad(tex, vec2i(local_id.xy));
data.x *= 2;
textureStore(tex, vec2i(local_id.xy), data);
}`
});
// You can now create a compute pipeline with this shader module and
// send the appropriate commands to the GPU.
服務工作者和共用 worker 支援
Chrome 中的 WebGPU 將網頁工作者支援功能提升到新的層級,現在同時支援服務工作者和共用工作者。您可以使用 Service Worker 提升背景工作和離線功能,並使用共用工作站在不同指令碼之間有效共用資源。請參閱 chromium 問題 41494731。
請參閱 Chrome 擴充功能範例和 WebLLM Chrome 擴充功能,瞭解如何在擴充功能服務 worker 中使用 WebGPU。
新的轉接器資訊屬性
如果使用者已在 chrome://flags/#enable-webgpu-developer-features
中啟用「WebGPU 開發人員功能」flag,現在只要呼叫 requestAdapterInfo()
,即可使用非標準 d3dShaderModel
和 vkDriverVersion
轉接器資訊屬性。支援時:
d3dShaderModel
是系統支援的 D3D 著色器模型編號上限。舉例來說,值 62 表示目前的驅動程式支援 HLSL SM 6.2。請參閱說明文件和問題 dawn:1254。vkDriverVersion
是供應商指定的 Vulkan 驅動程式版本號碼。請參閱說明文件和 問題 chromium:327457605。
修正錯誤
使用 layout: "auto"
建立兩個管道,並使用相符的綁定群組,然後使用第一個管道建立綁定群組,並在第二個管道中使用該綁定群組,現在會引發 GPUValidationError。允許這項功能是實作錯誤,現在已透過適當的測試修正。請參閱 issue dawn:2402。
黎明更新
在 Dawn API 中,使用 wgpuDeviceSetUncapturedErrorCallback
設定未擷取的錯誤回呼,現在不會在 GPU 裝置遺失後呼叫。這個修正項目可讓 Dawn 與 JavaScript API 規格和 Blink 的實作方式保持一致。請參閱問題 dawn:2459。
這份文件僅涵蓋部分重點。請查看完整的修訂版本清單。
WebGPU 新功能
以下是「WebGPU 最新消息」系列文章中涵蓋的所有內容。
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 進行著色器編譯
- 在運算和算繪階段中執行時間戳記查詢
- 著色器模組的預設進入點
- 支援以顯示器-p3 做為 GPUExternalTexture 色彩空間
- 記憶體堆積資訊
- Dawn 更新
Chrome 120
Chrome 119
Chrome 118
Chrome 117
Chrome 116
- WebCodecs 整合
- GPUAdapter
requestDevice()
傳回的遺失裝置 - 如果呼叫
importExternalTexture()
,請保持影片播放流暢 - 規格相容性
- 改善開發人員體驗
- Dawn 更新