wgpu
、クロスプラットフォーム、安全で純粋なグラフィックスAPIです。 Vulkan、Metal、D3D12、およびOpenGLでネイティブに実行されます。 wasmのwebgl2とwebgpuの上に。
APIは、WebGPU標準に基づいています。 FirefoxとDenoのWebGPU統合の中核として機能します。
リポジトリは次のライブラリをホストします。
次のバイナリ:
naga
使用して異なる言語間でシェーダーを翻訳するためのツール。cts_runner
deno_webgpu
を使用したWebGPUコンフォーマンステストスイートランナー。player
- APIトレースを再生するためのスタンドアロンアプリケーション。GFX-RSエコシステムのすべてのコンポーネントの概要については、全体像を参照してください。
錆の例は、WGPU/例で見つけることができます。 cargo run --bin wgpu-examples <example>
。例のリストを参照してください。
ブラウザで例を実行するには、 cargo xtask run-wasm
実行します。次に、ブラウザでhttp://localhost:8000
を開き、実行する例を選択できます。当然のことながら、WebGPUベースの例のいずれかを表示するには、ブラウザがそれをサポートしていることを確認する必要があります。
WGPUチュートリアルをお探しの場合は、次のことをご覧ください。
C/C ++でWGPUを使用するには、WGPUネイティブが必要です。
WGPU C ++チュートリアルを探している場合は、次のことをご覧ください。
WGPUを他の言語で使用したい場合は、Python、D、Julia、Kotlinなどの言語からWGPU-Nativeに多くのバインディングがあります。リストを参照してください。
WGPUコミュニティを形成するいくつかの異なる部屋があるマトリックススペースがあります。
知識ベースとして機能するウィキがあります。
API | Windows | Linux/Android | macOS/iOS | web(wasm) |
---|---|---|---|---|
バルカン | ✅ | ✅ | ? | |
金属 | ✅ | |||
DX12 | ✅ | |||
opengl | ? (GL3.3+) | ? (GLES 3.0+) | ? | ? (webgl2) |
webgpu | ✅ |
✅=ファーストクラスのサポート
? =ダウンレベル/ベストエフェクションサポート
? =角度変換層(GL ES 3.0のみ)が必要です
? = MoltenVK翻訳層が必要です
=サポートされていませんが、貢献には開かれています
WGPUは、WGSL、SPIR-V、およびGLSLのシェーダーをサポートしています。 HLSLとGLSLの両方に、SPIR-Vをターゲットにするコンパイラがあります。これらのシェーダー言語はすべて、すべての変換を処理する際に、任意のバックエンドで使用できます。さらに、これらのシェーダー入力のサポートはなくなりません。
WebGPUはWGSL以外のシェーディング言語をサポートしていませんが、WebGPUで実行している場合は、非WGSLシェーダーを自動的に変換します。
WGSLは常にデフォルトでサポートされていますが、GLSLとSPIR-Vはサポートでコンパイルできる機能を有効にしています。
WGSL仕様はまだ開発中であるため、ドラフト仕様ではwgpu
サポートするものを正確に説明していないことに注意してください。詳細については、以下をご覧ください。
SPIR-Vシェーダーを有効にするには、WGPUのspirv
機能を有効にします。 GLSLシェーダーを有効にするには、WGPUのglsl
機能を有効にします。
Angleは、Googleが開発したGLESから他のバックエンドまでの翻訳レイヤーです。 GLES3バックエンドの実行をサポートして、プラットフォームDX11サポートに到達するためにアクセスできません。角度で実行するには、「角度」機能を有効にし、アプリケーションに見える場所に角度ライブラリを配置する必要があります。これらのバイナリは、gfbuild-angerアーティファクトからダウンロードできます。Appleシリコンを備えたMacでは、手動の編集が必要になる場合があります。
Windowsでは、通常、実行可能ファイルと同じディレクトリ、またはパスのどこかで作業ディレクトリにコピーする必要があります。 Linuxでは、 LD_LIBRARY_PATH
環境を使用してそれらを指すことができます。
複雑な依存者のため、2つのMSRVポリシーがあります。
d3d12
、 naga
、 wgpu-core
、 wgpu-hal
、およびwgpu-types
のMSRVは1.76ですが、将来のワークスペースの他の部分よりも低い場合があります。 CORE_MSRV
およびREPO_MSRV
変数を使用して、CI( "/.github/workflows/ci.yml")で施行されています。このバージョンは、3か月ごとに壊れたバージョンをリリースしていますが、ブレイキングリリースでのみアップグレードできます。
naga
、 wgpu-core
、 wgpu-hal
、およびwgpu-types
Cratesはpython/mozboot/mozboot/util.py
のMINIMUM_RUST_VERSION
の値によって決定されるように、毎晩ビルドにFirefoxのMSRVの前にMSRVを必要としないでください。
すべてのテストと例インフラストラクチャは、どのバックエンド/GPUが実行されるかを決定する同じ環境変数セットを共有します。
WGPU_ADAPTER_NAME
(Ex。1080 1080
NVIDIA GeForce 1080ti
と一致します)。vulkan
、 metal
、 dx12
、またはgl
)のコンマ分離されたリストを備えたWGPU_BACKEND
。WGPU_POWER_PREF
特定のアダプター名が指定されていない場合( high
、 low
、またnone
)を選択する電源優先順位WGPU_DX12_COMPILER
( dxc
またはfxc
、 dxc
はdxil.dll
およびdxcompiler.dll
作業ディレクトリにあることに注意してくださいfxc
WGPU_GLES_MINOR_VERSION
マイナーなopengl es 1
0
2
automatic
。WGPU_ALLOW_UNDERLYING_NONCOMPLIANT_ADAPTER
with boolean with compliantドライバーが列挙されているかどうか(falseの場合は0
、trueの場合は1
)。 CTSを実行するときは、変数DENO_WEBGPU_ADAPTER_NAME
、 DENO_WEBGPU_BACKEND
、 DENO_WEBGPU_POWER_PREFERENCE
を使用します。
複数のテスト方法があり、それぞれがWGPUについて異なる品質をテストします。 CIでテストを自動的に実行します。 CIテストの現在の状態:
プラットフォーム/バックエンド | テスト | メモ |
---|---|---|
Windows/DX12 | ✔✔️ | ワープを使用します |
Windows/OpenGL | ✔✔️ | llvmpipeを使用します |
macos/金属 | ✔✔️ | ハードウェアランナーを使用します |
Linux/Vulkan | ✔✔️ | Lavapipeを使用します |
Linux/opengl es | ✔✔️ | llvmpipeを使用します |
Chrome/webgl | ✔✔️ | Swiftshaderを使用します |
Chrome/webgpu | セットアップされていません |
テストを実行するには、 cargo nextest
というツールを使用します。インストールするには、 cargo install cargo-nextest
。
テストスイートを実行するには:
cargo xtask test
WebGLでテストスイートを実行する(現在不完全):
cd wgpu
wasm-pack test --headless --chrome --no-default-features --features webgl --workspace
これにより、パッケージ化されたブラウザを使用してテストが自動的に実行されます。 http://localhost:8000
で希望するブラウザでテストを実行するには、削除--headless
れます。
あなたがユーザーであり、WGPUへの貢献を支援する方法が必要な場合は、テストケースの作成により多くのサポートが必要です。
WebGPUには、実装が正しく機能していることを検証するための適合テストスイートが含まれています。このCTSをWGPUに対して実行できます。
最初にCTSを実行するには、チェックアウトする必要があります。
git clone https://github.com/gpuweb/cts.git
cd cts
# works in bash and powershell
git checkout $(cat ../cts_runner/revision.txt)
特定の一連のテストを実行するには:
# Must be inside the `cts` folder we just checked out, else this will fail
cargo run --manifest-path ../Cargo.toml -p cts_runner --bin cts_runner -- ./tools/run_deno --verbose "<test string>"
テストの完全なリストを見つけるには、オンラインCTSビューアーに移動します。
現在有効になっているCTSテストのリストは、こちらをご覧ください。
wgpu
クレートは、WebGPU APIの慣用錆の翻訳であることを意図しています。その仕様は、そのシェーディング言語であるWGSLとともに、両方ともまだ「ワーキングドラフト」フェーズにあり、一般的な概要は安定していますが、詳細は頻繁に変化します。仕様が安定するまで、 wgpu
クレートとWGSL IT実装のバージョンは、実装が追いつくにつれて、指定されているものとは異なる可能性があります。
wgpu
サポートが正確にどのWGSL機能をサポートするかは、使用方法によって異なります。
ネイティブコードとして実行するとき、 wgpu
NAGAクレートを使用して、WGSLコードをプラットフォームのネイティブGPU APIのシェーディング言語に翻訳します。 NagaにはWGSL仕様に追いつくためのマイルストーンがありますが、一般に、NagaとWGSL Specの違いの最新の要約はありません。
"webgl"
機能を有効にしないWebブラウザで(WebAssemblyにコンパイルすることにより)実行すると、 wgpu
ブラウザ独自のWebGPUの実装に依存しています。 WGSLシェーダーは単にブラウザに渡されるため、どのWGSL機能を使用できるかを決定します。
wgpu
の"webgl"
機能を有効にしてWebブラウザで実行すると、 wgpu
NAGAを使用してWGSLプログラムをGLSLに翻訳します。これは、ネイティブコードとしてwgpu
実行しているかのように、同じバージョンのNagaを使用します。
WGPUは、D3Dと金属の座標系を使用します。
与える | テクスチャ |
---|---|
![]() | ![]() |