WebGPU の新機能(Chrome 124)

François Beaufort
François Beaufort

読み取り専用と読み取り / 書き込みのストレージ テクスチャ

ストレージ テクスチャ バインディング タイプを使用すると、シェーダーは TEXTURE_BINDING 使用量を追加せずにストレージ テクスチャから読み取り、特定の形式で読み取りと書き込みを混在させることができます。navigator.gpu.wgslLanguageFeatures"readonly_and_readwrite_storage_textures" WGSL 言語拡張機能が存在する場合、バインド グループ レイアウトの作成時に GPUStorageTexture アクセスを "read-write" または "read-only" に設定できるようになりました。以前は "write-only" に限定されていました。

これにより、WGSL シェーダーコードでストレージ テクスチャに read_writeread アクセス修飾子を使用できるようになり、textureLoad()textureStore() 組み込み関数がそれに応じて動作し、ワークグループ内のテクスチャ メモリ アクセスを同期するための新しい textureBarrier() 組み込み関数が使用可能になります。

WGSL シェーダー コードの先頭で requires-directive を使用して、requires readonly_and_readwrite_storage_textures; での移植性の可能性を通知することをおすすめします。次の例と issue 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.

サービス ワーカーと共有ワーカーのサポート

Chrome の WebGPU は、ウェブ ワーカーのサポートを次のレベルに引き上げ、サービス ワーカー共有ワーカーの両方をサポートするようになりました。サービス ワーカーを使用してバックグラウンド タスクとオフライン機能を強化し、共有ワーカーを使用してスクリプト間でリソースを効率的に共有できます。問題 chromium:41494731 をご覧ください。

Chrome 拡張機能のサンプルWebLLM Chrome 拡張機能で、拡張機能のサービス ワーカーで WebGPU を使用する方法を確認してください。

WebLLM Chrome 拡張機能のスクリーンショット。
WebLLM Chrome 拡張機能。

新しいアダプター情報属性

ユーザーが chrome://flags/#enable-webgpu-developer-features で「WebGPU 開発者向け機能」フラグを有効にしている場合、requestAdapterInfo() を呼び出すと、非標準の d3dShaderModel および vkDriverVersion アダプタ情報属性が利用できるようになりました。サポートされている場合:

  • d3dShaderModel は、サポートされている D3D シェーダー モデル番号の最大値です。たとえば、値 62 は、現在のドライバが HLSL SM 6.2 をサポートしていることを示します。ドキュメントissue dawn:1254 をご覧ください。

  • vkDriverVersion は、ベンダーが指定した Vulkan ドライバのバージョン番号です。ドキュメントissue chromium:327457605 をご覧ください。

アダプター情報に vkDriverVersion が表示されている https://webgpureport.org のスクリーンショット。
アダプタ情報 vkDriverVersionhttps://webgpureport.org に表示されます。

バグの修正

layout: "auto" を使用して一致するバインド グループを含む 2 つのパイプラインを作成し、最初のパイプラインでバインド グループを作成して 2 番目のパイプラインで使用すると、GPUValidationError が発生するようになりました。許可されていたのは実装バグで、適切なテストで修正されました。問題 dawn:2402 をご覧ください。

Dawn のアップデート

Dawn API では、GPU デバイスが失われた後、wgpuDeviceSetUncapturedErrorCallback で設定されたキャプチャされていないエラー コールバックが呼び出されなくなりました。この修正により、Dawn が JavaScript API 仕様と Blink の実装に準拠します。問題 dawn:2459 をご覧ください。

ここでは、主なハイライトの一部のみを取り上げます。コミットの一覧をご覧ください。

WebGPU の新機能

WebGPU の新機能シリーズで取り上げたすべての内容のリスト。

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