WebGPU の新機能(Chrome 115)

François Beaufort
François Beaufort

サポートされている WGSL 言語拡張機能

wgslLanguageFeatures オブジェクトの GPU メンバーには、サポートされている WGSL 言語拡張機能の名前が一覧表示されます。サポートされている WGSL 言語拡張機能は自動的に有効になるため、明示的にリクエストする必要はありません。このリストは現在空ですが、今後多くの拡張機能が追加される予定です(例: do-while loops)。問題 dawn:1777 をご覧ください。

if (navigator.gpu.wgslLanguageFeatures?.has("unknown-feature")) {
  // Use unknown-feature in WGSL shader code.
}

Direct3D 11 の試験運用版のサポート

Chromium チームは、Direct3D 11 の WebGPU サポートの追加に取り組んでいます。Windows で Chrome を実行し、--enable-unsafe-webgpu --use-webgpu-adapter=d3d11 コマンドライン フラグを指定することで、ローカルで試すことができます。問題 dawn:1705 をご覧ください。

AC 電源でデフォルトでディスクリート GPU を取得する

デュアル GPU macOS デバイスで、requestAdapter() が呼び出されると、powerPreference オプションを指定せずに、ユーザーのデバイスが AC 電源に接続されている場合はディスクリート GPU が返されます。それ以外の場合は、統合 GPU が返されます。変更点 4499307 をご覧ください。

デベロッパー エクスペリエンスの向上

新しい DevTools の警告

depth キーを GPUExtend3DDict で使用すると、正しいキーが depthOrArrayLayers であるため、DevTools Console に警告が表示されます。問題 chromium:1440900 をご覧ください。

GPUBlendComponent に明示的なメンバーとデフォルトのメンバーが混在している場合にも、警告が表示されます。問題 dawn:1785 をご覧ください。

ゼロサイズのディスパッチと描画は有効ですが、可能な限り避けるようにデベロッパーに促す警告が表示されます。問題 dawn:1786 をご覧ください。

エラー メッセージの改善

GPUCommandEncoder を使用しているときに finish() がすでに呼び出されている場合、改善されたエラー メッセージが表示されるようになりました。問題 dawn:1736 をご覧ください。

破棄されたオブジェクトを含むコマンド バッファを送信すると、submit() で使用されたコマンド バッファのラベルがエラー メッセージに表示されるようになりました。問題 dawn:1747 をご覧ください。

`depthStencil` を検証する際に、深度ステンシル状態の無効な部分がエラー メッセージで指定されるようになりました。問題 dawn:1735 をご覧ください。

minBindingSize 検証エラー メッセージに、検証に失敗したバインディングのグループと番号、バッファが表示されるようになりました。問題 dawn:1604 をご覧ください。

GPUBuffer オブジェクトの mapAsync() メソッドから返されるエラー メッセージが改善され、デベロッパーがデバッグしやすくなりました。以下の例と問題 chromium:1431622をご覧ください。

// Create a GPU buffer and map it.
const descriptor = { size: 0, usage: GPUBufferUsage.MAP_READ };
const buffer = device.createBuffer(descriptor);
buffer.mapAsync(GPUMapMode.READ);

// Before it has been mapped, request another mapping.
try {
  await buffer.mapAsync(GPUMapMode.READ);
} catch (error) {
  // New! Error message tells you mapping is already pending.
  console.warn(error.message);
}

macOS デバッグツールのラベル

use_user_defined_labels_in_backend デバッグ切り替えを使用すると、オブジェクト ラベルをバックエンドに転送して、RenderDoc、PIX、Instruments などのプラットフォーム固有のデバッグツールで確認できます。デバッグ用に有効にすると、macOS でのデバッグ エクスペリエンスが向上します。問題 dawn:1784 をご覧ください。

macOS の Instruments アプリのスクリーンショット。WebGPU からのカスタムラベルが表示されています。
macOS の Instruments アプリでユーザー定義ラベル。

コンパイルが失敗した場合は HLSL をログに記録する

dump_shaders デバッグ切り替えを使用すると、入力 WGSL シェーダーと変換されたバックエンド シェーダーをログに記録できます。デバッグ用に有効にすると、コンパイルが失敗した場合に HLSL がダンプされます。問題 dawn:1681 をご覧ください。

Dawn の最新情報

頂点バッファを削除する

wgpu::RenderPassEncoder または wgpu::RenderBundleEncoderSetVertexBuffer()wgpu::Buffer ではなく nullptr を渡すと、指定されたスロットで以前に設定した頂点バッファを削除できます。問題 dawn:1675 をご覧ください。

// Set vertex buffer in slot 0.
myRenderPassEncoder.SetVertexBuffer(0, myVertexBuffer);

// Then later, unset vertex buffer in slot 0.
myRenderPassEncoder.SetVertexBuffer(0, nullptr);

一時的なアタッチメント

wgpu::TextureUsage::TransientAttachment の使用を設定することで、レンダーパス オペレーションをタイルメモリに保持し、VRAM トラフィックを回避し、テクスチャの VRAM 割り当てを回避できるアタッチメントを作成できます。この機能は Metal と Vulkan でのみサポートされています。問題 dawn: 1695 をご覧ください。

wgpu::TextureDescriptor desc;
desc.format = wgpu::TextureFormat::RGBA8Unorm;
desc.size = {1, 1, 1};
desc.usage = wgpu::TextureUsage::RenderAttachment |
             wgpu::TextureUsage::TransientAttachment;

auto transientTexture = device.CreateTexture(&desc);

// You can now create views from the texture to serve as transient
// attachments, e.g. as color attachments in a render pipeline.

depot_tools を使用せずにビルドする

新しい DAWN_FETCH_DEPENDENCIES CMake オプションを使用すると、依存するすべてのプロジェクトで depot_tools をインストールする必要がなく、DEPS ファイルを読み取る Python スクリプトを使用して Dawn の依存関係を取得できます。変更点 131750 をご覧ください。

WebGPU の新機能

WebGPU の新機能シリーズで取り上げられたすべての機能の一覧です。

Chrome 149 ~ 150

Chrome 147 ~ 148

Chrome 146

Chrome 145

Chrome 144

Chrome 143

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