sebbbi/NoGraphicsAPI

Minimal graphics API. Built on top of latest Vulkan extensions. As close as possibly to my "No Graphics API" blog post and the SIGGRAPH talk.

解決する問題

NoGraphicsAPI は、従来のグラフィックス API の複雑な仕組みを取り除くことで、GPU プログラミングを簡素化します。バッファオブジェクト、頂点レイアウト宣言、バインディングテーブルが不要になり、GPU メモリとデータ構造が標準的な CPU 側のプログラミングのように感じられます。

仕組み

このライブラリは、最新のハードウェア機能(Metal 4 と Vulkan 1.4)を活用して、バインドレスデータモデルを実装します。

  • GPU ポインタ: データに 64 ビットポインタを使用し、シェーダーがディスクリプタセットなしで配列やネスト構造へのポインタを追跡できるようにします。
  • ディスクリプタヒープ: バインドレステクスチャとサンプラーを実装し、アプリケーションがリソースを再バインドする代わりにインデックスを管理します。
  • ルート引数: バインディングテーブルを、描画またはディスパッチ呼び出しに必要なすべての定数とリソースインデックスを含む共有 C++/Slang 構造体への単一の GPU ポインタに置き換えます。
  • 直接メモリアクセス: マップされたヒープを使用して、CPU が別のバッファタイプを介さずに GPU アクセス可能なメモリに直接データを書き込めるようにします。
  • 同期の簡素化: 特定のイメージレイアウトを追跡するのではなく、ワークの生成と消費に基づく同期に焦点を当てます。

対象読者

最新のハードウェア上で従来のレンダリングパイプラインに関連するボイラープレートと状態結合を減らしたい低レベルグラフィックスプログラマー向け。

ハイライト

  • クロスプラットフォームバックエンド: Metal 4(macOS/iOS)と Vulkan 1.4(Windows/Linux)をネイティブサポート。
  • Slang 統合: 共有 Slang シェーダーを使用して、CPU と GPU が同じデータ宣言を共有することを保証します。
  • パイプライン状態の削減: リソースバインディングと頂点レイアウトをパイプライン作成から切り離し、パイプラインの組み合わせ数を削減します。
  • ハードウェア最適化: ハイエンドの最新 GPU(例:Apple Silicon M1+、NVIDIA RTX 30/40/50 シリーズ、AMD RDNA 3/4)を特にターゲットにしています。

関連

  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト