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_writeread を使用でき、組み込み関数 textureLoad()textureStore() がそれに応じて動作し、新しい textureBarrier() 組み込み関数を使ってワークグループ内のテクスチャのメモリアクセスを同期できます。

requires-directive を使用し、WGSL シェーダーのコードの先頭の requires readonly_and_readwrite_storage_textures; で、ポータビリティがなくなる可能性を通知することをおすすめします。次の例と問題 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 を使用すると、バックグラウンド タスクやオフライン機能を強化できます。また、共有ワーカーを使用して、スクリプト間で効率的にリソースを共有できます。問題 chromium:41494731 をご覧ください。

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

<ph type="x-smartling-placeholder">
</ph> Chrome 拡張機能「WebLLM」のスクリーンショット。
WebLLM Chrome 拡張機能

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

ユーザーが「WebGPU デベロッパー機能」を有効にしている場合に、requestAdapterInfo() の呼び出し時に、標準以外の d3dShaderModel および vkDriverVersion アダプタ情報属性を使用できるようになりました。chrome://flags/#enable-webgpu-developer-featuresflag です。サポートされている場合:

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

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

で確認できます。 <ph type="x-smartling-placeholder">
</ph> アダプター情報に vkDriverVersion を含む https://webgpureport.org のスクリーンショット。
アダプター情報 vkDriverVersionhttps://webgpureport.org で確認できます。

バグの修正

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

夜明けの最新情報

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

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

WebGPU の新機能

WebGPU の新機能」シリーズに記載されている全内容のリスト。

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