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メモリのアドレス指定と簡素化された同期に置き換える設計を模索しています。

仕組み

Vulkan 1.4に基づいて構築されており、このプロジェクトはVkDescriptorSetVkPipelineLayoutのような従来のAPI抽象化を取り除きます。その代わりに、以下を使用します:

  • GPUポインタ: シェーダーは64ビットGPUポインタを使用して、メモリから頂点やデータを直接取得し、従来のバッファバインディングを置き換えます。
  • アプリケーション所有のヒープ: アプリケーションはテクスチャやサンプラー用の独自の記述子ヒープを管理し、共有ルートペイロードを介してインデックスをシェーダーに渡します。
  • 簡素化された同期: リソースごとの遷移リストではなく、グローバルなステージおよびアクセスバリアを使用して、実行とメモリのハザードを記述します。
  • 共有ルートABI: 各描画またはディスパッチコールにおいて、不可欠なポインタや値を提供するために、小さく共有されたC++/Slang構造体がGPUに直接コピーされます。

対象者

このプロジェクトは、低レベルのGPUアーキテクチャ、実験的なAPI設計、およびVulkanを使用したグラフィックスプログラミングへの「ポインタベース」のアプローチを探索したいグラフィックスプログラマーやエンジン開発者を対象としています。

ハイライト

  • ボイラープレートの排除: 記述子プール、レイアウト、およびサンプラーオブジェクトの必要性を排除します。
  • 直接メモリ操作: VK_EXT_descriptor_heapおよびVK_KHR_device_address_commandsを活用して、生のGPUアドレスベースの操作を実現します。
  • Slang統合: Slangシェーダー言語を使用して、CPUとGPUデータ構造間のクリーンな契約を実装します。
  • ハードウェア検証済み: 一連の最新のNVIDIAおよびAMD GPU(RDNA 3+, Turing+)でテスト済みです。

関連

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