WebGPU 新功能 (Chrome 142)

François Beaufort
François Beaufort

發布日期:2025 年 10 月 22 日

擴充紋理格式支援功能

開發人員可透過新的 "texture-formats-tier1" GPU 功能,將現有內容移植到網頁,不必為 WebGPU 的較低功能重新編寫內容。支援新的 "r16unorm""r16snorm""rg16unorm""rg16snorm""rgba16unorm""rgba16snorm" 紋理格式,並提供算繪附件、可混合、多重取樣功能,以及 "read-only""write-only" 儲存空間紋理存取權。此外,也支援現有的 "r8snorm""rg8snorm""rgba8snorm" 紋理格式,並提供算繪附件、可混合、多重取樣和解析功能。您也可以搭配 "read-only""write-only" 儲存空間紋理存取權,使用更多紋理格式。

新的「texture-formats-tier2」GPU 功能可讓特定格式存取 "read-write" 儲存空間紋理,這對將 Unreal Engine 移植到網頁等專案至關重要。請注意,在建立裝置時啟用 "texture-formats-tier2",系統會自動啟用 "texture-formats-tier1"

請參閱下列程式碼片段和 chromestatus 項目

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

const requiredFeatures = [];
if (adapter.features.has("texture-format-tier1")) {
  requiredFeatures.push("texture-format-tier1");
}
if (adapter.features.has("texture-format-tier2")) {
  requiredFeatures.push("texture-format-tier2");
}
const device = await adapter.requestDevice({ requiredFeatures });

// Later on, when dealing with "r8unorm" texture formats for example...
if (device.features.has("texture-format-tier2")) {
  // Use "read-write" storage texture access...
} else if (device.features.has("texture-format-tier1")) {
  // Use "read-only" or "write-only" storage texture access...
} else {
  // Fallback: Use another texture format...
}

非常感謝 Intel 團隊的付出!

WGSL 中的基本體索引

primitive_index 是內建的 WGSL 值,可專門用於識別片段著色器處理的目前圖元 (例如點、線或三角形)。這個值從 0 開始,每處理完一個圖元就會遞增 1,並在每次繪製執行個體之間重設為 0。

如果 GPUAdapter 提供 "primitive-index" 功能,請要求使用這項功能的 GPUDevice,在 WGSL 中取得原始索引支援,並使用 enable primitive_index; 在 WGSL 程式碼中明確啟用這項擴充功能。啟用後,即可在片段著色器中使用 primitive_index 內建整數值,存取每個圖元的資料,或執行因每個要算繪的不同幾何形狀而異的邏輯 (例如)。

下列程式碼片段顯示的片段著色器會以紅色算繪第二個圖元,並以藍色算繪所有其他圖元。

const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("primitive-index")) {
  throw new Error("Primitive index support is not available");
}
// Explicitly request primitive index support.
const device = await adapter.requestDevice({
  requiredFeatures: ["primitive-index"],
});

const fragmentShaderModule = device.createShaderModule({ code: `
  enable primitive_index;

  @fragment
  fn main(@builtin(primitive_index) i : u32) -> @location(0) vec4f {
    if (i == 1) {
      return vec4f(1, 0, 0, 1);
    }
    return vec4f(0, 1, 0, 1);
  }`,
});
// Send the appropriate commands to the GPU...

如要進一步瞭解,請查看原始挑選範例,並參閱 chromestatus 項目

3D 茶壺模型三角形會根據其原始索引值著色。
「primitive indexes」模式下的 Primitive Picking 範例。

黎明更新

用於處理要建構的單一程式庫類型的 DAWN_BUILD_MONOLITHIC_LIBRARY CMake 變數,已將預設值從 OFF 變更為 STATIC,因此預設會產生 libwebgpu* 檔案。

設定 wgpu::Surface 時,Dawn 現在會正確處理 wgpu::PresentMode::Undefined 預設值。請參閱問題 441410668

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

WebGPU 最新消息

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

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