發布日期:2025 年 1 月 8 日
紋理檢視畫面用法
GPU 紋理檢視畫面目前會繼承來源 GPU 紋理的所有用法旗標。但這可能會造成問題,因為某些檢視格式與特定用途不相容。如要解決這個問題,請使用選用的 usage
成員,搭配呼叫 createView()
,即可明確指定與所選檢視畫面格式相容的來源材質使用標記子集。
這項異動可讓您事先驗證,並進一步控管檢視畫面的使用方式。這項功能也與其他圖形 API 保持一致,在建立檢視畫面時,使用標記是常見的參數,可提供最佳化機會。
請參閱以下程式碼片段、chromestatus 項目和問題 363903526。
const texture = myDevice.createTexture({
size: [4, 4],
format: "rgba8unorm",
usage:
GPUTextureUsage.RENDER_ATTACHMENT |
GPUTextureUsage.TEXTURE_BINDING |
GPUTextureUsage.STORAGE_BINDING,
viewFormats: ["rgba8unorm-srgb"],
});
const view = texture.createView({
format: 'rgba8unorm-srgb',
usage: GPUTextureUsage.RENDER_ATTACHMENT, // Restrict allowed usage.
});
32 位元浮點紋理混合
32 位元浮點紋理對於 HDR 算繪至關重要,可保留多種顏色值,並防止色帶現象。例如科學可視化。
新的 "float32-blendable"
GPU 功能可讓格式為 "r32float"
、"rg32float"
和 "rgba32float"
的 GPU 紋理可進行混合。在要求具有這項功能的 GPU 裝置時,現在可以建立使用混合與任何 float32 格式附件的算繪管道。
請參閱以下程式碼片段、chromestatus 項目和問題 369649348。
const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("float32-blendable")) {
throw new Error("32-bit float textures blending support is not available");
}
// Explicitly request 32-bit float textures blending support.
const device = await adapter.requestDevice({
requiredFeatures: ["float32-blendable"],
});
// ... Creation of shader modules is omitted for readability.
// Create a render pipeline that uses blending for the rgba32float format.
device.createRenderPipeline({
vertex: { module: myVertexShaderModule },
fragment: {
module: myFragmentShaderModule,
targets: [
{
format: "rgba32float",
blend: { color: {}, alpha: {} },
},
],
},
layout: "auto",
});
// Create the GPU texture with rgba32float format and
// send the appropriate commands to the GPU...
GPUDevice adapterInfo
屬性
對於使用者提供的 GPUDevice
物件,存取實體 GPU 相關資訊的程式庫非常重要,因為這些程式庫可能需要根據 GPU 架構進行最佳化或實作因應措施。雖然可以透過 GPUAdapter
物件存取這項資訊,但無法單獨從 GPUDevice
取得這項資訊。這可能會造成不便,因為使用者可能需要在 GPUDevice
旁提供額外資訊。
為解決這個問題,GPUAdapterInfo
現在會透過 GPUDevice
adapterInfo
屬性公開。這些屬性類似現有的 GPUAdapter
info
屬性。
請參閱以下程式碼片段、chromestatus 項目和問題 376600838。
function optimizeForGpuDevice(device) {
if (device.adapterInfo.vendor === "amd") {
// Use AMD-specific optimizations.
} else if (device.adapterInfo.architecture.includes("turing")) {
// Optimize for NVIDIA Turing architecture.
}
}
使用無效格式設定無格式內容時,會擲回 JavaScript 錯誤
先前,使用無效的紋理格式搭配 GPU 畫布內容的 configure()
方法,會導致 GPU 驗證錯誤。這項設定已變更為擲回 JavaScript TypeError
。這可避免以下情況:即使 GPU 畫布背景設定錯誤,getCurrentTexture()
仍會傳回有效的 GPU 材質。詳情請參閱問題 372837859。
篩選紋理上的取樣器限制
先前允許使用 "sint"
、"uint"
和「depth"
」格式紋理搭配篩選樣本。系統現在可正確禁止使用 "sint"
或 "uint"
格式紋理搭配篩選取樣器。請注意,如果您使用「depth"
紋理搭配篩選取樣器」,系統目前會發出警告,因為這項做法將在日後禁止。請參閱問題 376497143。
這些限制表示,如果要使用深度紋理搭配非篩選取樣器,就必須手動建立繫結群組版面配置。這是因為「自動」產生的繫結群組版面配置目前不支援這種組合。規格問題 4952 包含正在考慮的提案,以便日後解決此限制。
擴大子群組實驗
子群組實驗原本預計在 Chrome 131 結束,但已延長至 Chrome 133,並將於 2025 年 4 月 16 日結束。雖然第一個原始來源測試著重於效能,但缺乏重要的可移植性安全防護措施。這些安全防護措施現在會加入,可能會導致現有程式碼出現錯誤。
改善開發人員使用體驗
在 Windows 上,如果 powerPreference
選項與 requestAdapter()
搭配使用,開發人員工具現在會顯示警告。當 Chrome 瞭解如何使用兩個不同的 GPU 並將結果合成時,就會移除這項警告。請參閱問題 369219127。
建立過大的 GPU 緩衝區時,錯誤訊息中現在會顯示 GPU 緩衝區的大小。請參閱問題 374167798。
實驗性支援 16 位元規格化紋理格式
16 位元帶正負號和不帶正負號的紋理格式現在可在 "chromium-experimental-snorm16-texture-formats"
和 "chromium-experimental-unorm16-texture-formats"
GPU 功能背後進行實驗,同時這些功能正在討論標準化。
這些功能新增了對 16 位元標準化紋理格式的支援,包括 COPY_SRC
、COPY_DST
、TEXTURE_BINDING
、RENDER_ATTACHMENT
用途、多重取樣和解析功能。其他格式為 "r16unorm"
、"rg16unorm"
、"rgba16unorm"
、"r16snorm"
、"rg16snorm"
和 "rgba16snorm"
。
在這些實驗功能標準化之前,請在 chrome://flags/#enable-unsafe-webgpu
中啟用「Unsafe WebGPU Support」旗標,讓 Chrome 提供這些功能。
請參閱以下程式碼片段和 問題 374790898。
const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("chromium-experimental-snorm16-texture-formats")) {
throw new Error("16-bit signed normalized formats support is not available");
}
// Explicitly request 16-bit signed normalized formats support.
const device = await adapter.requestDevice({
requiredFeatures: ["chromium-experimental-snorm16-texture-formats"],
});
// Create a texture with the rgba16snorm format which consists of four
// components, each of which is a 16-bit, normalized, signed integer value.
const texture = device.createTexture({
size: [4, 4],
format: "rgba16snorm",
usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING,
});
// Send the appropriate commands to the GPU...
黎明更新
wgpu::Adapter
和 wgpu::Device
的 EnumerateFeatures(FeatureName * features)
方法已淘汰,改用 GetFeatures(SupportedFeatures * features)
。請參閱問題 368672123。
webgpu.h C API 已將所有 char const *
變更為 WGPUStringView
結構,該結構定義了 UTF-8 編碼字串的檢視畫面。它就像字串資料的指標,並搭配長度。這樣一來,您就能使用字串的部分內容,而無需複製整個字串。請參閱問題 42241188。
這份文件僅涵蓋部分重點。請查看完整的修訂版本清單。
WebGPU 新功能
以下是「WebGPU 最新消息」系列文章中涵蓋的所有內容。
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 進行著色器編譯
- 在運算和算繪階段中執行時間戳記查詢
- 著色器模組的預設進入點
- 支援使用顯示器-p3 做為 GPUExternalTexture 色彩空間
- 記憶體堆積資訊
- Dawn 更新
Chrome 120
Chrome 119
Chrome 118
Chrome 117
Chrome 116
- WebCodecs 整合
- GPUAdapter
requestDevice()
傳回的遺失裝置 - 如果呼叫
importExternalTexture()
,請保持影片播放流暢 - 規格相符性
- 改善開發人員體驗
- Dawn 更新