Repo-lab
開発ツール

NoGraphicsAPI解説:Vulkan 1.4の未来を探る実験的グラフィックスAPI

⭐ 1,366 stars GitHub →

ゲームエンジニアやグラフィックスプログラマーの間で話題の実験的プロジェクトNoGraphicsAPIをご存知でしょうか。ゲームエンジン開発者として著名なSebastian Aaltonen氏(代表作:GPU Occlusion Culling等)が「No Graphics API」ブログで提唱したコンセプトを実装したVulkan 1.4プロジェクトです。

GitHub急上昇で1,366スターを超えており、Vulkan・D3D12の最新拡張に注目するグラフィックスコミュニティで活発に議論されています。バッファオブジェクト・記述子セットという従来の概念を廃し、シェーダが64ビットGPUポインタで直接メモリにアクセスするアーキテクチャを実証しています。

NoGraphicsAPIとは:記述子セット不要の新発想グラフィックスAPI

NoGraphicsAPIは「もしグラフィックスAPIの複雑さをVulkanの最新拡張で大幅に削減できたら」という問いへの答えです。

従来のVulkan APIが抱える課題

従来のVulkan APIでは以下のオブジェクトをすべて管理する必要があります:VkDescriptorSetLayout・VkDescriptorPool・VkDescriptorSet・VkPipelineLayout・各種バインディング。これらのボイラープレートコードがVulkanを「難しい」と言われる主因です。

NoGraphicsAPIはこれらを一切作成しません。代わりに:

  • GPU側64ビットポインタでシェーダがメモリに直接アクセス
  • アプリケーション管理の記述子ヒープ(CPU側でスロットを選んで書き込む)
  • vkCmdPushDataEXTによる小さなルートペイロードで描画・ディスパッチ

使用する最新Vulkan拡張

このプロジェクトが活用する主要拡張:

  • VK_EXT_descriptor_heap:アプリ管理リソース/サンプラーヒープとvkCmdPushDataEXT
  • VK_KHR_device_address_commands:アドレスベースのインデックス・間接・コピーコマンド
  • VK_KHR_shader_untyped_pointers:記述子ヒープのSPIR-V前提条件
  • VK_KHR_unified_image_layoutsVK_IMAGE_LAYOUT_GENERALでのテクスチャアクセス最適化
  • VK_EXT_mesh_shader:タスク/メッシュパイプライン

従来のVulkan・DirectX 12との違い:なぜ今このアーキテクチャが注目されるのか

Vulkan・DirectX 12・Metalはそれぞれ「バインドレスレンダリング」を実現する独自アプローチを持っていますが、NoGraphicsAPIはより根本的な変更を試みています。

D3D12との比較:D3D12のBindless Rendering(Descriptor Heapベース)に近い概念ですが、NoGraphicsAPIではパイプラインレイアウト自体が存在しません。ルートデータはCPU供給の小さな構造体1つだけです。

通常のVulkanとの比較:Vulkanのデスクリプタセット管理コードが完全になくなります。VkDescriptorSetLayoutVkDescriptorPoolVkDescriptorSetのいずれもcreate_device()後に一度も作成されません。

Metal 4との比較:Metal 4(まだ実験段階)は類似のアーキテクチャを検討していますが、Vulkanの拡張セットでの実装はNoGraphicsAPIが先行しています。設計ドキュメント(docs/metal-porting.md)にMetal 4への移植計画も記載されています。

こんな人に向いている:NoGraphicsAPIを活用できる場面

ゲームエンジニア・グラフィックスアーキテクト

次世代ゲームエンジンでバインドレスレンダリングを実装したいエンジニアにとって、完全な実装例として価値があります。C++/Slang共有ルートABIのパターン・記述子ヒープの書き込み方・タイムラインサブミッションの制御方法などを実際のコードで確認できます。

Vulkan研究者・グラフィックスAPI学習者

VK_EXT_descriptor_heapはまだ対応ドライバが限られる新しい拡張です。NoGraphicsAPIはその実際の使用パターンを示す数少ない公開実装の一つです。サンプルアプリ(triangle・cube・deferred_renderer)がAPIの具体的な使い方を示しています。

Slangシェーダ言語ユーザー

SlangのC++/GPUコード共有の実践例として参考になります。C++とSlangで同じRootArguments構造体を共有し、CPUではGPUアドレスを、GPUでは直接ポインタデリファレンスを使うパターンが実証されています。

使い方・ビルド方法

システム要件

  • CMake 3.24以上
  • C++20コンパイラ(Windows: MSVC または clang-cl)
  • Vulkan SDK 1.4.357以上
  • サンプルビルド時: Slang 2026.14.1以上 + SPIRV-Tools 2026.3以上

ビルド手順

# 基本ライブラリのビルド
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build
cmake --install build --prefix path/to/install

# サンプルとテストを含めてビルド(Windows推奨)
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release \
  -DNOGRAPHICSAPI_BUILD_EXAMPLES=ON \
  -DNOGRAPHICSAPI_BUILD_TESTS=ON
cmake --build build
ctest --test-dir build --output-on-failure

CMakeプロジェクトへの組み込み

find_package(NoGraphicsAPI CONFIG REQUIRED)
find_package(NoGraphicsAPIUtility CONFIG REQUIRED)
target_link_libraries(my_application PRIVATE
    NoGraphicsAPI::NoGraphicsAPI
    NoGraphicsAPIUtility::math
    NoGraphicsAPIUtility::textures)

シェーダでの記述子ヒープアクセス例

// Slangシェーダ側:32ビットインデックスでヒープにアクセス
Texture2D<float4> texture = ResourceDescriptorHeap[texture_index];
SamplerState sampler = SamplerDescriptorHeap[sampler_index];
float4 texel = texture.Sample(sampler, uv);

使う前に知っておきたいこと

GPU対応状況(2026年9月現在)

GPU Windows Linux
NVIDIA RTX 2000/3000/4000/5000 ✅ 対応 ✅ 対応
AMD RDNA 3/4(RX 7000/9000) ✅ 対応 ✅ 対応
AMD RDNA 2(RX 6000) ❌ 未対応 ✅ Mesa RADV 26.2以上
Intel Arc ❌ 未検証 ✅ Mesa ANV 26.2以上
NVIDIA Turing(RTX 2000) ⚠️ BAR制限 -

AMD RDNA 2はWindowsドライバがVK_EXT_descriptor_heapを未実装のため非対応。Linuxでは最新MesaドライバのRADVで対応済みです。

現在スコープ外の機能

  • レイトレーシング
  • スパースメモリ
  • MSAAマルチサンプリング
  • パイプラインキャッシュ
  • Metal/Linuxウィンドウプレゼンテーション(近日対応予定)
  • マルチキュー・マルチスレッド(意図的にシングルキュー設計)

ライセンス

NoGraphicsAPIとNoGraphicsAPIUtilityはMITライセンスで公開されており、商用利用が可能です。サンプルのキューブテクスチャはApache-2.0(Vulkan-Toolsから)です。

まとめ:次世代グラフィックスAPI設計の実験場

NoGraphicsAPIはゲームエンジンやグラフィックスAPIの未来を探る先進的なプロジェクトです。VK_EXT_descriptor_heapなどVulkan 1.4の最新拡張を使い、従来の複雑な記述子管理を完全に排除するアーキテクチャを実証しています。

プロトタイプ段階でシングルスレッド・シングルキュー限定のため本番利用には適しませんが、バインドレスレンダリングを学習したいエンジニアや次世代API設計に興味があるグラフィックスアーキテクトにとって必見のリポジトリです。

関連ツール・おすすめサービス

  • DigitalOcean — 開発者向けクラウド・App Platformでかんたんデプロイ

この技術を学ぶ

DevTool・グラフィックスプログラミングに興味を持った方には、Udemyのオンラインコースもおすすめです。

毎日更新のGitHubツール情報

LINEで受け取って最新情報をキャッチアップしよう

友達追加する(無料)

関連記事

この記事が役に立ったらシェアしてください