WebGPU の新機能(Chrome 124)

François Beaufort
François Beaufort

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

ストレージ テクスチャのバインディング タイプを使用すると、シェーダーで 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; によりポータビリティがない可能性があることを通知することをおすすめします。次の例と 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.

Service Worker と共有ワーカーは、

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

拡張機能 Service Worker で WebGPU を使用する方法については、Chrome 拡張機能のサンプルWebLLM の Chrome 拡張機能をご覧ください。

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

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

ユーザーが chrome://flags/#enable-webgpu-developer-features で「WebGPU Developer Features」フラグを有効にしている場合、requestAdapterInfo() の呼び出し時に、標準以外の d3dShaderModelvkDriverVersion のアダプタ情報属性を利用できるようになりました。サポートされている場合:

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

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

アダプター情報に vkDriverVersion が含まれている https://webgpureport.org のスクリーンショット。
アダプター情報 vkDriverVersionhttps://webgpureport.org を参照)。

バグの修正

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

夜明けの更新情報

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

ここでは、重要なハイライトの一部についてのみ説明します。commit の完全なリストを確認する。

WebGPU の新機能

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

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