wgpu - Rustでの安全でポータブルなGPU抽象化、WebGPUAPIの実装。

(Safe and portable GPU abstraction in Rust, implementing WebGPU API.)

Created at: 2018-09-14 03:18:50
Language: Rust
License: MPL-2.0

wgpu

マトリックススペース 開発マトリックス  ユーザーマトリックス ビルドステータス codecov.io

wgpu
クロスプラットフォームで安全な純粋な錆びたグラフィックAPIです。Vulkan、Metal、D3D12、D3D11、およびOpenGLESでネイティブに実行されます。そして、wasm上のWebGPUの上に。

APIはWebGPU標準に基づいています。これは、Firefox、Servo、およびDenoでのWebGPU統合のコアとして機能します。

レポの概要

リポジトリは次のライブラリをホストします。

  • Crates.io docs.rs-RustAPIに直面しているユーザー。
  • Crates.io docs.rs-内部WebGPU実装。
  • Crates.io docs.rs-内部の安全でないGPUAPI抽象化レイヤー。
  • Crates.io docs.rs-すべての箱で共有される錆の種類。
  • Crates.io-Deno JavaScript/TypeScriptランタイムのWebGPU実装

次のバイナリ:

  • cts_runner
    -を使用するWebGPUConformanceTestSuiteランナー
    deno_webgpu
  • player
    -APIトレースを再生するためのスタンドアロンアプリケーション。
  • wgpu-info
    -システム上のすべてのアダプターに関する情報を出力するプログラム、またはすべてのアダプターのコマンドを呼び出すプログラム。

gfx-rsエコシステムのすべてのコンポーネントの概要については、全体像を参照してください。

MSRVポリシー

サポートされているRustの最小バージョンは1.59です。これは、変数を使用してCI( "/.github/workflows/ci.yml"内)に適用され

RUST_VERSION
ます。このバージョンは、最新リリースでのみアップグレードできます。

入門

さび

さびた例はで見つけることができます

wgpu/examples
。で例を実行できます
cargo run --example name
例のリストを参照してください。詳細な手順については、GetStartedwikiを参照してください

wgpuチュートリアルをお探しの場合は、以下をご覧ください。

C / C ++

C / C ++でwgpuを使用するには、 wgpu-nativeが必要です。

その他

他の言語でwgpuを使用したい場合は、Python、D、Julia、Kotlinなどの言語からwgpu-nativeに多くのバインディングがあります。リストを参照してください。

コミュニティ

マトリックススペースwgpuコミュニティを形成するいくつかの異なる部屋を備えたマトリックススペースがあります。

  • 開発マトリックス-ライブラリの開発についての議論。
  • ユーザーマトリックス-ライブラリと周辺のエコシステムの使用に関する議論。
  • ランダム行列-他のすべての議論。

ウィキ

ナレッジベースとして機能するwikiがあります。

サポートされているプラ​​ットフォーム

API ウィンドウズ LinuxとAndroid macOSとiOS
バルカン 🆗(vulkan-portability)
金属
DX12 (W10 +のみ)
DX11 🛠️
GLES3 🆗
角度 🆗 🆗 🆗(macOSのみ)

=ファーストクラスのサポート—🆗=ベストエフォートサポート—🛠️=サポートされていませんが、サポートは進行中です

シェーダーサポート

wgpuは、 WGSL、SPIR-V、およびGLSLのシェーダーをサポートします。HLSLGLSLの両方に、 SPIR-Vをターゲットとするコンパイラがあります。これらのシェーダー言語はすべて、任意のバックエンドで使用できます。すべての変換を処理します。さらに、これらのシェーダー入力のサポートがなくなることはありません。

WebGPUはWGSL以外のシェーディング言語をサポートしていませんが、WebGPUで実行している場合は、WGSL以外のシェーダーを自動的に変換します。

WGSLはデフォルトで常にサポートされていますが、GLSLとSPIR-Vは、サポートでコンパイルするために機能を有効にする必要があります。

SPIR-Vシェーダーを有効にするには

spirv
、wgpuの機能を有効にします。
GLSLシェーダーを有効にするには
glsl
、wgpuの機能を有効にします。

角度

Angleは、GLESから他のバックエンドへの変換レイヤーであり、Googleによって開発されました。他の方法ではアクセスできないGLES2またはDX11をサポートするプラットフォームに到達するために、GLES3バックエンドをその上で実行することをサポートします。Angleで実行するには、「角度」機能を有効にし、Angleライブラリをアプリケーションから見える場所に配置する必要があります。これらのバイナリはgfbuild-angleアーティファクトからダウンロードできます。Appleシリコンを搭載したMacでは手動コンパイルが必要になる場合があります。

Windowsでは、通常、それらを作業ディレクトリ、実行可能ファイルと同じディレクトリ、またはパスのどこかにコピーする必要があります。Linuxでは、環境を使用してそれらを指すことができ

LD_LIBRARY_PATH
ます。

環境変数

すべてのテストおよびサンプルインフラストラクチャは、実行するバックエンド/GPUを決定する同じ環境変数のセットを共有します。

  • WGPU_ADAPTER_NAME
    使用するアダプタの名前のサブストリングを使用します(例:
    1080
    一致し
    NVIDIA GeForce 1080ti
    ます)。
  • WGPU_BACKEND
    使用するバックエンドのコンマ区切りリスト(、、、、、、または)
    vulkan
    を使用します。
    metal
    dx12
    dx11
    gl
  • WGPU_POWER_PREF
    特定のアダプター名が指定されていない場合に選択する電源設定(
    high
    または
    low

CTSを実行するときは、変数、、を使用

DENO_WEBGPU_ADAPTER_NAME
DENO_WEBGPU_BACKEND
ます
DENO_WEBGPU_POWER_PREFERENCE

テスト

テストには複数の方法があり、それぞれがwgpuに関するさまざまな品質をテストします。可能であれば、CIでテストを自動的に実行します。CIテストの現状:

バックエンド/プラットフォーム テスト CTS ノート
DX12 / Windows 10 ✔️ ✔️ WARPを使用する
DX11 / Windows 10 🚧 WARPを使用する
Metal / MacOS 金属にはGPUが必要
Vulkan / Linux ✔️ lavapipeを使用すると、ctsがハングします
GLES / Linux ✔️ llvmpipeを使用する

コアテストインフラストラクチャ

cargo nextest
テストを実行するために呼び出されるツールを使用します。インストールするには、を実行します
cargo install cargo-nextest

デフォルトのデバイスでテストスイートを実行するには、次の手順に従います。

cargo nextest run --no-fail-fast

wgpu-info
システム上のアダプタごとに1回テストを実行できます。

cargo run --bin wgpu-info -- cargo nextest run --no-fail-fast

次に、例の画像比較テストを実行するには、次のコマンドを実行します。

cargo nextest run --example <example-name> --no-fail-fast

または、統合テストスイートの一部を実行します。

cargo nextest run -p wgpu -- <name-of-test>

あなたがユーザーであり、wgpuに貢献するのを助ける方法が欲しいなら、私たちは常にテストケースを書くのにもっと助けが必要です。

WebGPU適合性テストスイート

WebGPUには、実装が正しく機能していることを検証するためのConformanceTestSuiteが含まれています。このCTSをwgpuに対して実行できます。

CTSを実行するには、最初に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 ../cts_runner/Cargo.toml -- ./tools/run_deno --verbose "<test string>"

テストの完全なリストを見つけるには、オンラインのctsビューアにアクセスしてください。

現在有効になっているCTSテストのリストは、ここにあります。

座標系

wgpuは、D3DとMetalの座標系を使用します。

与える テクスチャ
render_coordinates texture_coordinates