mpvプレーヤーをMoltenVK対応にする

※2025年4月時点での補足:
Git Head の MoltenVK を使用すると、Intel Macのみ、mpv で再生される映像が緑一色になる現象が確認されている。詳細は以下の通り。

[主題]
自前ビルドしているmpvを、MoltenVK(vulkan)対応させる手順を述べる。

[背景]
筆者が過去に投稿(月一で更新中)したmpvプレーヤーのコンパイル手順は、MoltenVK(vulkan)対応していない。
ひょんなことから、mpvがvulkan対応で、macOSの場合、MoltenVKというものを使うことを知った。本稿は、mpvプレーヤーをコンパイルするを、MoltenVK(vulkan)対応させるための差分記事である。

[環境]
参考までに、筆者の環境を記載しておく
MacBook Air 2023 15.3inch(Apple Silicon Mac, M2)
macOS Sequoia 15.4
Xcode 16.3
CommandLine Tools for Xcode 16.3.0.0.1

MacBook Pro 2018 15.4inch(Intel based Mac)
macOS Sequoia 15.4
Xcode 16.3
CommandLine Tools for Xcode 16.3.0.0.1

[前提]
この記事に従って、mpvを自前ビルドしていることを前提とする。(Homebrew等のパッケージマネージャーを使っている場合は、対象外である)

[追加されるライブラリ]
以下のライブラリが追加される。

  1. Shaderc
  2. vulkan(Vulkan Loader及びVulkan Header)
  3. MoltenVK

[変更の対象となるライブラリ]
以下のライブラリが変更の対象となる。これ以外はmpvプレーヤーをコンパイルすると共通である。(なので、共通部分は、この記事には書かない)

  1. libplacebo
  2. mpv

[手順]

  1. Shaderc
    バイナリも配布されているが、x86_64用である。よってソースからビルドする。なお、cmakeとPython3がインストールされている必要がある。

    git clone "https://github.com/google/shaderc.git"
    cd shaderc
    ./utils/git-sync-deps
    mkdir -p ../shaderc_build
    cd ../shaderc_build
    #GoogleTestをビルドしない。(DSHADERC_SKIP_TESTS)
    #https://www.reddit.com/r/vulkan/comments/ecnjn7/converting_shader_source_to_spirv_on_the_fly/
    #macOS Ctalina以降向け
    export SDKROOT="$(xcrun --sdk macosx --show-sdk-path)"
    cmake -GNinja \
    -DCMAKE_BUILD_TYPE=Release \
    -DSHADERC_SKIP_COPYRIGHT_CHECK=True \
    -DSHADERC_SKIP_TESTS=True \
    ../shaderc
    ninja
    sudo ninja install
  2. vulkan(Vulkan Loader及びVulkan Header)
    cmakeとPython3、及びninjaがインストールされている必要がある。

    git clone "https://github.com/KhronosGroup/Vulkan-Loader.git"
    git clone "https://github.com/KhronosGroup/Vulkan-Headers.git"
    
    export PKG_CONFIG="pkgconf"
    export CMAKE_GENERATOR="Ninja"
    export MACOSX_DEPLOYMENT_TARGET="15.0"
    
    icddatadirs=(
     "/usr/local/moltenvk/share"
     "/usr/local/share"
    )
    
    cmake \
    -B Vulkan_Build \
    -S Vulkan-Headers \
    -DCMAKE_INSTALL_PREFIX=/usr/local/vulkan \
    -DCMAKE_BUILD_TYPE=Release
    
    sudo cmake --install Vulkan_Build
    
    rm -rf Vulkan_Build
    
    cmake \
    -B Vulkan_Build \
    -S Vulkan-Loader \
    -DCMAKE_INSTALL_PREFIX=/usr/local/vulkan \
    -DCMAKE_INSTALL_LIBDIR=lib \
    -DCMAKE_INSTALL_NAME_DIR=/usr/local/vulkan/lib \
    -DCMAKE_BUILD_TYPE=Release \
    -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON \
    -DVULKAN_HEADERS_INSTALL_DIR=/usr/local/vulkan \
    -DFALLBACK_DATA_DIRS="$( IFS=:; echo "${icddatadirs[*]}" )"
    
    cmake --build Vulkan_Build
    sudo cmake --install Vulkan_Build
    
    rm -rf Vulkan_Build
    
    sudo ln -s /usr/local/vulkan/lib/pkgconfig/vulkan.pc /usr/local/lib/pkgconfig/
  3. MoltenVK

    <注記>
    2025年4月7日時点の MoltenVK Git HEAD において、Intel Macでのみ、動画が緑色になる現象が発生した。
    ChatGPT の協力のもと原因を追及したが、明確な特定には至らなかった。
    現時点で確認されている回避策は以下のいずれかである:

    • 安定版(v1.2.11)を使用する
    • Git HEAD を pull しない(更新しない)

    なお、万が一 Git Head を更新してしまった場合でも、Time Machine を用いて、MoltenVKソースコードを更新前の状態に戻すことで、緑化の回避が可能である。

    git clone "https://github.com/KhronosGroup/MoltenVK.git"
    cd MoltenVK
    ./fetchDependencies --macos
    
    make macos MVK_CONFIG_LOG_LEVEL=2
    
    sed -i '' "s|./libMoltenVK|/usr/local/moltenvk/lib/libMoltenVK|g" Package/Latest/MoltenVK/dylib/macOS/MoltenVK_icd.json
    cat Package/Latest/MoltenVK/dylib/macOS/MoltenVK_icd.json
    
    sudo rm -rf /usr/local/moltenvk
    sudo mkdir -p /usr/local/moltenvk/lib /usr/local/moltenvk/share/vulkan/icd.d
    
    sudo install -vm755 Package/Latest/MoltenVK/dylib/macOS/libMoltenVK.dylib /usr/local/moltenvk/lib
    sudo install -vm644 Package/Latest/MoltenVK/dylib/macOS/MoltenVK_icd.json /usr/local/moltenvk/share/vulkan/icd.d

以下はmpvプレーヤーをコンパイルすると共通の部分である。くれぐれも、ディスクイメージのマウントと、環境変数の設定を忘れないこと。

  1. libplacebo

    export CFLAGS="-arch arm64"
    export CPPFLAGS="-arch arm64"
    cd ${CMPL}/libplacebo
    meson \
    setup \
    --wipe \
    --prefix ${TARGET} \
    -Dbuildtype=release \
    -Db_lto=true \
    -Db_lto_mode=thin \
    -Dvulkan-registry="/usr/local/vulkan/share/vulkan/registry/vk.xml" \
    -Dvulkan=enabled \
    -Dshaderc=enabled \
    -Dxxhash=enabled \
    -Dopengl=disabled \
    -Dd3d11=disabled \
    -Dglslang=disabled \
    -Ddemos=false \
    --default-library=static \
    build
    
    meson compile -C build
    meson install -C build
    
    unset CFLAGS
    unset CPPFLAGS
  2. mpv

    export CFLAGS="-arch arm64"
    export CPPFLAGS="-arch arm64"
    cd ${CMPL}/mpv
    meson \
    setup \
    --wipe \
    --prefix ${TARGET} \
    --default-library=static \
    -Dswift-flags="-target arm64-apple-macosx15.0" \
    -Dbuildtype=release \
    -Db_lto=true \
    -Db_lto_mode=thin \
    -Dgl=disabled \
    build
    
    meson compile -C build
    meson install -C build
    
    mkdir -p ~/.local/share/vulkan
    ln -sfn /usr/local/moltenvk/share/vulkan/icd.d ~/.local/share/vulkan/icd.d
    meson compile -C build macos-bundle
    
    unset CFLAGS
    unset CPPFLAGS

参考サイト

以上

この投稿へのコメント

コメントはありません。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

この投稿へのトラックバック

トラックバックはありません。

トラックバック URL