このドキュメントでは、Chrome ブラウザで WebGPU が動作しない、または期待どおりに動作しない理由と、問題を可能な限り解決するための明確な手順について説明します。
navigator.gpu が定義されていない
次の例は、navigator
で gpu
を使用できない場合に発生する可能性のある JavaScript エラーを示しています。
const adapter = await navigator.gpu.requestAdapter();
cancel Uncaught TypeError: Cannot read properties of undefined (reading 'requestAdapter')
考えられる理由は次のとおりです。次の順番で確認してください。
WebGPU を使用するには、ChromeOS、macOS、Windows の場合は Chrome 113 以降、Android の場合は Chrome 121 以降が必要です。
chrome://version
でバージョンを確認し、必要に応じて更新してください。WebGPU は、安全なコンテキストでのみアクセスできます。安全でないプロトコル(
http:
、file:
など)でコードを提供する場合は、安全なhttps:
プロトコルを使用するか、ウェブアプリの開発時に次のいずれかの方法で対処します。npx http-server
またはpython3 -m http.server
のいずれかのコマンドを使用して、コードをローカルのhttp://localhost
またはhttp://127.0.0.1
で提供します。生成元を [安全でないオリジンを安全として処理する] に追加します。
chrome://flags/#unsafely-treat-insecure-origin-as-secure
のリストを開いて Chrome を再起動します。Node.js をインストールし、
npx servez --ssl
を実行して、偽の証明書を使用してフォルダを HTTPS 経由で提供します。Chrome には引き続き警告が表示されますが、[詳細設定] をクリックすると警告を無視できます。[...に続行]をクリックしますngrok を使用してローカル ウェブサーバーをインターネットに公開します。
GPU アダプタが null です
requestAdapter()
の呼び出しによって取得されるアダプターが null の場合に発生する可能性のある JavaScript エラーの例を次に示します。
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
cancel Uncaught TypeError: Cannot read properties of undefined (reading requestDevice)
これには、次のいずれかの理由が考えられます。順番は以下のとおりです。
ユーザーが [グラフィック アクセラレーションが使用可能な場合は使用する] をオフにした場合、WebGPU は無効になります。(
chrome://settings/system
)この設定がオフになっているかどうかを確認し、オンに戻してくださいWebGPU はこのプラットフォームではまだサポートされていません。
chrome://flags/#enable-unsafe-webgpu
フラグを有効にして Chrome を再起動できます。Linux 試験運用版サポートでは、chrome://flags/#enable-vulkan
フラグも有効にする必要があります。詳しくは、ヘッドレス Chrome での WebGPU のサポートをご覧ください。GPU ハードウェアは拒否リストに登録されています。「WebGPU が拒否リストまたはコマンドラインにより無効になっています」と表示される場合
chrome://gpu
でchrome://flags/#enable-unsafe-webgpu
フラグを有効にして Chrome を再起動すると、WebGPU アダプタのブロックリストを無効にできます。requestAdapter()
で渡されたオプションに一致する GPU アダプターがない。別のオプションでrequestAdapter()
を呼び出してみてください。WebGPU には GPU(ハードウェアまたはソフトウェアでエミュレートされたもの)が必要です。Chrome で GPU が検出されているかどうかを確認するには、
chrome://gpu
にアクセスします。
WebGPU が WebGL より遅い
chrome://gpu
を開き、「WebGPU: Hardware accelerated」と読み上げられることを確認します。「WebGPU: ソフトウェアのみ、ハードウェア アクセラレーションは利用できません」というメッセージが表示された場合は、GPU ドライバの更新が必要になる場合があります。WebGL のコンセプトを WebGPU に直接変換する場合、WebGPU 独自の最適化を十分に活用できない場合があります。相違点について詳しくは、WebGL から WebGPU へをご覧ください。
Windows 固有の制限事項
Windows デバイスで WebGPU を使用する場合は、次の制限事項に注意してください。
Chrome では、複数の GPU アダプターの同時使用はサポートされていません。問題 chromium:329211593 をご覧ください。
Chrome では常に、他の Chrome ワークロードに割り当てられているものと同じ GPU アダプターが使用されます。ノートパソコンでは、電力消費(省電力など)の面から、内蔵グラフィックス カードが一般的に使用されます。つまり、
powerPreference
オプションはrequestAdapter()
の呼び出し時に影響を与えません。