Vulkanの低レイヤーAPI実装と最適化ガイド

日本語のグラフィックスプログラミング資料は限られており、英語リソースが主流です。ソフトウェアレンダリングを実装した後、光ラスタライゼーションの理解が深まります。ソフトレンダリングとソフトレイトライティングの習得がグラフィックス開発の基礎となります。

Vulkanの学習には線形代数の基礎知識が必須です。OpenGLはブラックボックスで詳細な最適化が困難ですが、Vulkanはすべての処理を明示的に実装する必要があり、CPU-GPU間データ転送の最適化に特化しています。CPUとGPU間のデータ転送がパフォーマンスボトルネックとなるケースでは、Vulkanの採用が有効です。

学習リソース

Vulkanサポート確認

システムがVulkanをサポートするか確認するには、サンプルアプリを実行します:

vulkan_cube

立方体の回転が表示されれば、Vulkanが利用可能です。

開発環境構築

CMakeを用いたC++17環境構築のディレクトリ構成:

ディレクトリ用途
cmakeCMake設定ファイル
sandbox実験用プロジェクト
srcソースコード
toy2dシンプルなグラフィックスサンプル

CMake設定例

FindSDL2.cmakeの実装:

if (NOT TARGET SDL2)
    if (WIN32)
        set(SDL2_INSTALL_DIR "${CMAKE_SOURCE_DIR}/libs/SDL2" CACHE PATH "SDL2インストールパス")
        set(SDL2_INCLUDE_DIR "${SDL2_INSTALL_DIR}/include")
        set(SDL2_LIB_DIR "${SDL2_INSTALL_DIR}/lib/x64")
        add_library(SDL2::SDL2 SHARED IMPORTED GLOBAL)
        set_target_properties(
            SDL2::SDL2
            PROPERTIES
            IMPORTED_LOCATION "${SDL2_LIB_DIR}/SDL2.dll"
            IMPORTED_IMPLIB "${SDL2_LIB_DIR}/SDL2.lib"
            INTERFACE_INCLUDE_DIRECTORIES "${SDL2_INCLUDE_DIR}"
        )
    else()
        find_package(SDL2 REQUIRED)
        add_library(SDL2 ALIAS SDL2::SDL2)
    endif()
endif()

CopyDLL.cmakeの実装:

macro(CopyVulkanDLL target_name)
    if (WIN32)
        add_custom_command(
            TARGET ${target_name} POST_BUILD
            COMMAND ${CMAKE_COMMAND} -E copy "${SDL2_INSTALL_DIR}/lib/x64/SDL2.dll" $
        )
    endif()
endmacro()

FindVulkan.cmakeの実装:

find_package(Vulkan REQUIRED)

タグ: Vulkan CMake SDL2 GPUOptimization

8月4日 17:32 投稿