* vulkan-driver-loader.md * static vulkan on appletags/20240102
| @@ -36,10 +36,10 @@ jobs: | |||
| - name: build | |||
| run: | | |||
| mkdir build && cd build | |||
| cmake -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_LATEST_HOME/build/cmake/android.toolchain.cmake -DANDROID_ABI="armeabi-v7a" -DANDROID_ARM_NEON=ON -DANDROID_PLATFORM=android-24 -DNCNN_VULKAN=ON .. | |||
| cmake -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_LATEST_HOME/build/cmake/android.toolchain.cmake -DANDROID_ABI="armeabi-v7a" -DANDROID_ARM_NEON=ON -DANDROID_PLATFORM=android-21 -DNCNN_VULKAN=ON .. | |||
| cmake --build . -j 2 | |||
| - name: build-shared | |||
| run: | | |||
| mkdir build-shared && cd build-shared | |||
| cmake -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_LATEST_HOME/build/cmake/android.toolchain.cmake -DANDROID_ABI="armeabi-v7a" -DANDROID_ARM_NEON=ON -DANDROID_PLATFORM=android-24 -DNCNN_VULKAN=ON -DNCNN_SHARED_LIB=ON -DNCNN_ENABLE_LTO=OFF .. | |||
| cmake -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_LATEST_HOME/build/cmake/android.toolchain.cmake -DANDROID_ABI="armeabi-v7a" -DANDROID_ARM_NEON=ON -DANDROID_PLATFORM=android-21 -DNCNN_VULKAN=ON -DNCNN_SHARED_LIB=ON -DNCNN_ENABLE_LTO=OFF .. | |||
| cmake --build . -j 2 | |||
| @@ -36,17 +36,17 @@ jobs: | |||
| - name: build | |||
| run: | | |||
| mkdir build && cd build | |||
| cmake -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_LATEST_HOME/build/cmake/android.toolchain.cmake -DANDROID_ABI="arm64-v8a" -DANDROID_PLATFORM=android-24 -DNCNN_VULKAN=ON .. | |||
| cmake -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_LATEST_HOME/build/cmake/android.toolchain.cmake -DANDROID_ABI="arm64-v8a" -DANDROID_PLATFORM=android-21 -DNCNN_VULKAN=ON .. | |||
| cmake --build . -j 2 | |||
| - name: build-shared | |||
| run: | | |||
| mkdir build-shared && cd build-shared | |||
| cmake -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_LATEST_HOME/build/cmake/android.toolchain.cmake -DANDROID_ABI="arm64-v8a" -DANDROID_PLATFORM=android-24 -DNCNN_VULKAN=ON -DNCNN_SHARED_LIB=ON .. | |||
| cmake -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_LATEST_HOME/build/cmake/android.toolchain.cmake -DANDROID_ABI="arm64-v8a" -DANDROID_PLATFORM=android-21 -DNCNN_VULKAN=ON -DNCNN_SHARED_LIB=ON .. | |||
| cmake --build . -j 2 | |||
| - name: build-termux | |||
| run: | | |||
| mkdir build-termux && cd build-termux | |||
| cmake -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_LATEST_HOME/build/cmake/android.toolchain.cmake -DANDROID_ABI="arm64-v8a" -DANDROID_PLATFORM=android-24 -DNCNN_VULKAN=ON -DNCNN_PLATFORM_API=OFF .. | |||
| cmake -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_LATEST_HOME/build/cmake/android.toolchain.cmake -DANDROID_ABI="arm64-v8a" -DANDROID_PLATFORM=android-21 -DNCNN_VULKAN=ON -DNCNN_PLATFORM_API=OFF .. | |||
| cmake --build . -j 2 | |||
| - name: build-android-29 | |||
| run: | | |||
| @@ -70,6 +70,6 @@ jobs: | |||
| wget https://dl.google.com/android/repository/android-ndk-r16b-linux-x86_64.zip -O $GITHUB_WORKSPACE/android-ndk-r16b-linux-x86_64.zip | |||
| cd $GITHUB_WORKSPACE && unzip -q android-ndk-r16b-linux-x86_64.zip | |||
| - name: configure | |||
| run: mkdir build && cd build && cmake -DCMAKE_TOOLCHAIN_FILE=$GITHUB_WORKSPACE/android-ndk-r16b/build/cmake/android.toolchain.cmake -DANDROID_ABI="arm64-v8a" -DANDROID_PLATFORM=android-24 -DNCNN_VULKAN=ON .. | |||
| run: mkdir build && cd build && cmake -DCMAKE_TOOLCHAIN_FILE=$GITHUB_WORKSPACE/android-ndk-r16b/build/cmake/android.toolchain.cmake -DANDROID_ABI="arm64-v8a" -DANDROID_PLATFORM=android-21 -DNCNN_VULKAN=ON .. | |||
| - name: build | |||
| run: cmake --build build -j 2 | |||
| @@ -36,10 +36,10 @@ jobs: | |||
| - name: build | |||
| run: | | |||
| mkdir build && cd build | |||
| cmake -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_LATEST_HOME/build/cmake/android.toolchain.cmake -DANDROID_ABI="x86_64" -DANDROID_PLATFORM=android-24 -DNCNN_VULKAN=ON .. | |||
| cmake -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_LATEST_HOME/build/cmake/android.toolchain.cmake -DANDROID_ABI="x86_64" -DANDROID_PLATFORM=android-21 -DNCNN_VULKAN=ON .. | |||
| cmake --build . -j 2 | |||
| - name: build-shared | |||
| run: | | |||
| mkdir build-shared && cd build-shared | |||
| cmake -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_LATEST_HOME/build/cmake/android.toolchain.cmake -DANDROID_ABI="x86_64" -DANDROID_PLATFORM=android-24 -DNCNN_VULKAN=ON -DNCNN_SHARED_LIB=ON .. | |||
| cmake -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_LATEST_HOME/build/cmake/android.toolchain.cmake -DANDROID_ABI="x86_64" -DANDROID_PLATFORM=android-21 -DNCNN_VULKAN=ON -DNCNN_SHARED_LIB=ON .. | |||
| cmake --build . -j 2 | |||
| @@ -36,10 +36,10 @@ jobs: | |||
| - name: build | |||
| run: | | |||
| mkdir build && cd build | |||
| cmake -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_LATEST_HOME/build/cmake/android.toolchain.cmake -DANDROID_ABI="x86" -DANDROID_PLATFORM=android-24 -DNCNN_VULKAN=ON .. | |||
| cmake -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_LATEST_HOME/build/cmake/android.toolchain.cmake -DANDROID_ABI="x86" -DANDROID_PLATFORM=android-21 -DNCNN_VULKAN=ON .. | |||
| cmake --build . -j 2 | |||
| - name: build-shared | |||
| run: | | |||
| mkdir build-shared && cd build-shared | |||
| cmake -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_LATEST_HOME/build/cmake/android.toolchain.cmake -DANDROID_ABI="x86" -DANDROID_PLATFORM=android-24 -DNCNN_VULKAN=ON -DNCNN_SHARED_LIB=ON .. | |||
| cmake -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_LATEST_HOME/build/cmake/android.toolchain.cmake -DANDROID_ABI="x86" -DANDROID_PLATFORM=android-21 -DNCNN_VULKAN=ON -DNCNN_SHARED_LIB=ON .. | |||
| cmake --build . -j 2 | |||
| @@ -109,38 +109,25 @@ jobs: | |||
| sudo cp $GITHUB_WORKSPACE/openmp-install/include/* $DEVELOPER_DIR/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/include | |||
| sudo cp $GITHUB_WORKSPACE/openmp-install/lib/libomp.a $DEVELOPER_DIR/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/lib | |||
| - name: vulkansdk | |||
| run: | | |||
| wget https://sdk.lunarg.com/sdk/download/1.3.236.0/mac/vulkansdk-macos-1.3.236.0.dmg?Human=true -O vulkansdk-macos-1.3.236.0.dmg | |||
| hdiutil attach vulkansdk-macos-1.3.236.0.dmg | |||
| sudo /Volumes/vulkansdk-macos-1.3.236.0/InstallVulkan.app/Contents/MacOS/InstallVulkan --root $GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0 --accept-licenses --default-answer --confirm-command install | |||
| hdiutil detach /Volumes/vulkansdk-macos-1.3.236.0 | |||
| - name: build-arm64 | |||
| run: | | |||
| export VULKAN_SDK=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0/macOS | |||
| mkdir build-arm64 && cd build-arm64 | |||
| cmake -DCMAKE_TOOLCHAIN_FILE=../toolchains/ios.toolchain.cmake -DPLATFORM=OS64 -DARCHS="arm64" \ | |||
| -DDEPLOYMENT_TARGET=$IOS_DEPLOYMENT_TARGET -DENABLE_BITCODE=$ENABLE_BITCODE -DENABLE_ARC=$ENABLE_ARC -DENABLE_VISIBILITY=$ENABLE_VISIBILITY \ | |||
| -DOpenMP_C_FLAGS="-Xclang -fopenmp" -DOpenMP_CXX_FLAGS="-Xclang -fopenmp" \ | |||
| -DOpenMP_C_LIB_NAMES="libomp" -DOpenMP_CXX_LIB_NAMES="libomp" \ | |||
| -DOpenMP_libomp_LIBRARY="$DEVELOPER_DIR/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/lib/libomp.a" \ | |||
| -DVulkan_INCLUDE_DIR=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0/MoltenVK/include \ | |||
| -DVulkan_LIBRARY=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0/MoltenVK/dylib/iOS/libMoltenVK.dylib \ | |||
| -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=install \ | |||
| -DNCNN_VULKAN=ON -DNCNN_BUILD_BENCHMARK=OFF .. | |||
| cmake --build . -j 3 | |||
| - name: build-arm64e | |||
| run: | | |||
| export VULKAN_SDK=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0/macOS | |||
| mkdir build-arm64e && cd build-arm64e | |||
| cmake -DCMAKE_TOOLCHAIN_FILE=../toolchains/ios.toolchain.cmake -DPLATFORM=OS64 -DARCHS="arm64e" \ | |||
| -DDEPLOYMENT_TARGET=$IOS_DEPLOYMENT_TARGET -DENABLE_BITCODE=$ENABLE_BITCODE -DENABLE_ARC=$ENABLE_ARC -DENABLE_VISIBILITY=$ENABLE_VISIBILITY \ | |||
| -DOpenMP_C_FLAGS="-Xclang -fopenmp" -DOpenMP_CXX_FLAGS="-Xclang -fopenmp" \ | |||
| -DOpenMP_C_LIB_NAMES="libomp" -DOpenMP_CXX_LIB_NAMES="libomp" \ | |||
| -DOpenMP_libomp_LIBRARY="$DEVELOPER_DIR/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/lib/libomp.a" \ | |||
| -DVulkan_INCLUDE_DIR=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0/MoltenVK/include \ | |||
| -DVulkan_LIBRARY=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0/MoltenVK/dylib/iOS/libMoltenVK.dylib \ | |||
| -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=install \ | |||
| -DNCNN_VULKAN=ON -DNCNN_BUILD_BENCHMARK=OFF .. | |||
| cmake --build . -j 3 | |||
| @@ -109,38 +109,25 @@ jobs: | |||
| sudo cp $GITHUB_WORKSPACE/openmp-install/include/* $DEVELOPER_DIR/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/include | |||
| sudo cp $GITHUB_WORKSPACE/openmp-install/lib/libomp.a $DEVELOPER_DIR/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/lib | |||
| - name: vulkansdk | |||
| run: | | |||
| wget https://sdk.lunarg.com/sdk/download/1.3.236.0/mac/vulkansdk-macos-1.3.236.0.dmg?Human=true -O vulkansdk-macos-1.3.236.0.dmg | |||
| hdiutil attach vulkansdk-macos-1.3.236.0.dmg | |||
| sudo /Volumes/vulkansdk-macos-1.3.236.0/InstallVulkan.app/Contents/MacOS/InstallVulkan --root $GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0 --accept-licenses --default-answer --confirm-command install | |||
| hdiutil detach /Volumes/vulkansdk-macos-1.3.236.0 | |||
| - name: build-x86_64 | |||
| run: | | |||
| export VULKAN_SDK=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0/macOS | |||
| mkdir build-x86_64 && cd build-x86_64 | |||
| cmake -DCMAKE_TOOLCHAIN_FILE=../toolchains/ios.toolchain.cmake -DPLATFORM=SIMULATOR64 -DARCHS="x86_64" \ | |||
| -DDEPLOYMENT_TARGET=$IOS_DEPLOYMENT_TARGET -DENABLE_BITCODE=$ENABLE_BITCODE -DENABLE_ARC=$ENABLE_ARC -DENABLE_VISIBILITY=$ENABLE_VISIBILITY \ | |||
| -DOpenMP_C_FLAGS="-Xclang -fopenmp" -DOpenMP_CXX_FLAGS="-Xclang -fopenmp" \ | |||
| -DOpenMP_C_LIB_NAMES="libomp" -DOpenMP_CXX_LIB_NAMES="libomp" \ | |||
| -DOpenMP_libomp_LIBRARY="$DEVELOPER_DIR/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/lib/libomp.a" \ | |||
| -DVulkan_INCLUDE_DIR=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0/MoltenVK/include \ | |||
| -DVulkan_LIBRARY=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0/MoltenVK/dylib/macOS/libMoltenVK.dylib \ | |||
| -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=install \ | |||
| -DNCNN_VULKAN=ON -DNCNN_BUILD_BENCHMARK=OFF .. | |||
| cmake --build . -j 3 | |||
| - name: build-arm64 | |||
| run: | | |||
| export VULKAN_SDK=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0/macOS | |||
| mkdir build-arm64 && cd build-arm64 | |||
| cmake -DCMAKE_TOOLCHAIN_FILE=../toolchains/ios.toolchain.cmake -DPLATFORM=SIMULATORARM64 -DARCHS="arm64" \ | |||
| -DDEPLOYMENT_TARGET=$IOS_DEPLOYMENT_TARGET -DENABLE_BITCODE=$ENABLE_BITCODE -DENABLE_ARC=$ENABLE_ARC -DENABLE_VISIBILITY=$ENABLE_VISIBILITY \ | |||
| -DOpenMP_C_FLAGS="-Xclang -fopenmp" -DOpenMP_CXX_FLAGS="-Xclang -fopenmp" \ | |||
| -DOpenMP_C_LIB_NAMES="libomp" -DOpenMP_CXX_LIB_NAMES="libomp" \ | |||
| -DOpenMP_libomp_LIBRARY="$DEVELOPER_DIR/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/lib/libomp.a" \ | |||
| -DVulkan_INCLUDE_DIR=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0/MoltenVK/include \ | |||
| -DVulkan_LIBRARY=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0/MoltenVK/dylib/macOS/libMoltenVK.dylib \ | |||
| -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=install \ | |||
| -DNCNN_VULKAN=ON -DNCNN_BUILD_BENCHMARK=OFF .. | |||
| cmake --build . -j 3 | |||
| @@ -38,19 +38,6 @@ jobs: | |||
| - uses: actions/checkout@v4 | |||
| with: | |||
| submodules: true | |||
| - name: cache-vulkansdk | |||
| id: cache-vulkansdk | |||
| uses: actions/cache@v3 | |||
| with: | |||
| path: "1.3.236.0" | |||
| key: vulkansdk-linux-x86_64-1.3.236.0 | |||
| - name: vulkansdk | |||
| if: steps.cache-vulkansdk.outputs.cache-hit != 'true' | |||
| run: | | |||
| wget https://sdk.lunarg.com/sdk/download/1.3.236.0/linux/vulkansdk-linux-x86_64-1.3.236.0.tar.gz?Human=true -O vulkansdk-linux-x86_64-1.3.236.0.tar.gz | |||
| tar -xf vulkansdk-linux-x86_64-1.3.236.0.tar.gz | |||
| rm -rf 1.3.236.0/source 1.3.236.0/samples | |||
| find 1.3.236.0 -type f | grep -v -E 'vulkan|glslang' | xargs rm | |||
| - name: cache-swiftshader | |||
| id: cache-swiftshader | |||
| uses: actions/cache@v3 | |||
| @@ -91,7 +78,6 @@ jobs: | |||
| CC: clang | |||
| CXX: clang++ | |||
| run: | | |||
| export VULKAN_SDK=`pwd`/1.3.236.0/x86_64 | |||
| mkdir build && cd build | |||
| cmake -DNCNN_VULKAN=ON -DNCNN_PYTHON=ON -DNCNN_DISABLE_RTTI=OFF -DNCNN_DISABLE_EXCEPTION=OFF -DNCNN_BUILD_TOOLS=OFF -DNCNN_BUILD_EXAMPLES=OFF .. | |||
| cmake --build . -j 2 | |||
| @@ -117,7 +117,6 @@ jobs: | |||
| CXX: g++ | |||
| LD_LIBRARY_PATH: /data/action/install/lib64 | |||
| run: | | |||
| export VULKAN_SDK=/data/action/osd/1.2.189.0/x86_64 | |||
| mkdir build && cd build | |||
| cmake -DNCNN_VULKAN=ON -DNCNN_BUILD_TESTS=ON -DNCNN_BUILD_TOOLS=OFF -DNCNN_BUILD_EXAMPLES=OFF .. | |||
| cmake --build . -j 4 | |||
| @@ -94,24 +94,14 @@ jobs: | |||
| sudo cp $GITHUB_WORKSPACE/openmp-install/include/* $DEVELOPER_DIR/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include | |||
| sudo cp $GITHUB_WORKSPACE/openmp-install/lib/libomp.a $DEVELOPER_DIR/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/lib | |||
| - name: vulkansdk | |||
| run: | | |||
| wget https://sdk.lunarg.com/sdk/download/1.3.236.0/mac/vulkansdk-macos-1.3.236.0.dmg?Human=true -O vulkansdk-macos-1.3.236.0.dmg | |||
| hdiutil attach vulkansdk-macos-1.3.236.0.dmg | |||
| sudo /Volumes/vulkansdk-macos-1.3.236.0/InstallVulkan.app/Contents/MacOS/InstallVulkan --root $GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0 --accept-licenses --default-answer --confirm-command install | |||
| hdiutil detach /Volumes/vulkansdk-macos-1.3.236.0 | |||
| - name: build | |||
| run: | | |||
| export VULKAN_SDK=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0/macOS | |||
| mkdir build && cd build | |||
| cmake -DCMAKE_TOOLCHAIN_FILE=../toolchains/ios.toolchain.cmake -DPLATFORM=MAC_CATALYST_ARM64 -DARCHS="arm64" \ | |||
| -DDEPLOYMENT_TARGET=$MAC_CATALYST_DEPLOYMENT_TARGET -DENABLE_BITCODE=$ENABLE_BITCODE -DENABLE_ARC=$ENABLE_ARC -DENABLE_VISIBILITY=$ENABLE_VISIBILITY \ | |||
| -DOpenMP_C_FLAGS="-Xclang -fopenmp" -DOpenMP_CXX_FLAGS="-Xclang -fopenmp" \ | |||
| -DOpenMP_C_LIB_NAMES="libomp" -DOpenMP_CXX_LIB_NAMES="libomp" \ | |||
| -DOpenMP_libomp_LIBRARY="$DEVELOPER_DIR/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/lib/libomp.a" \ | |||
| -DVulkan_INCLUDE_DIR=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0/MoltenVK/include \ | |||
| -DVulkan_LIBRARY=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0/MoltenVK/dylib/macOS/libMoltenVK.dylib \ | |||
| -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=install \ | |||
| -DNCNN_VULKAN=ON -DNCNN_BUILD_BENCHMARK=OFF .. | |||
| cmake --build . -j 3 | |||
| @@ -102,24 +102,14 @@ jobs: | |||
| sudo cp $GITHUB_WORKSPACE/openmp-install/include/* $DEVELOPER_DIR/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include | |||
| sudo cp $GITHUB_WORKSPACE/openmp-install/lib/libomp.a $DEVELOPER_DIR/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/lib | |||
| - name: vulkansdk | |||
| run: | | |||
| wget https://sdk.lunarg.com/sdk/download/1.3.236.0/mac/vulkansdk-macos-1.3.236.0.dmg?Human=true -O vulkansdk-macos-1.3.236.0.dmg | |||
| hdiutil attach vulkansdk-macos-1.3.236.0.dmg | |||
| sudo /Volumes/vulkansdk-macos-1.3.236.0/InstallVulkan.app/Contents/MacOS/InstallVulkan --root $GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0 --accept-licenses --default-answer --confirm-command install | |||
| hdiutil detach /Volumes/vulkansdk-macos-1.3.236.0 | |||
| - name: build | |||
| run: | | |||
| export VULKAN_SDK=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0/macOS | |||
| mkdir build && cd build | |||
| cmake -DCMAKE_TOOLCHAIN_FILE=../toolchains/ios.toolchain.cmake -DPLATFORM=MAC_CATALYST -DARCHS="x86_64" \ | |||
| -DDEPLOYMENT_TARGET=$MAC_CATALYST_DEPLOYMENT_TARGET -DENABLE_BITCODE=$ENABLE_BITCODE -DENABLE_ARC=$ENABLE_ARC -DENABLE_VISIBILITY=$ENABLE_VISIBILITY \ | |||
| -DOpenMP_C_FLAGS="-Xclang -fopenmp" -DOpenMP_CXX_FLAGS="-Xclang -fopenmp" \ | |||
| -DOpenMP_C_LIB_NAMES="libomp" -DOpenMP_CXX_LIB_NAMES="libomp" \ | |||
| -DOpenMP_libomp_LIBRARY="$DEVELOPER_DIR/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/lib/libomp.a" \ | |||
| -DVulkan_INCLUDE_DIR=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0/MoltenVK/include \ | |||
| -DVulkan_LIBRARY=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0/MoltenVK/dylib/macOS/libMoltenVK.dylib \ | |||
| -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=install \ | |||
| -DNCNN_VULKAN=ON -DNCNN_BUILD_BENCHMARK=OFF .. | |||
| cmake --build . -j 3 | |||
| @@ -95,38 +95,14 @@ jobs: | |||
| sudo cp $GITHUB_WORKSPACE/openmp-install/include/* $DEVELOPER_DIR/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include | |||
| sudo cp $GITHUB_WORKSPACE/openmp-install/lib/libomp.a $DEVELOPER_DIR/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/lib | |||
| - name: vulkansdk | |||
| run: | | |||
| wget https://sdk.lunarg.com/sdk/download/1.3.236.0/mac/vulkansdk-macos-1.3.236.0.dmg?Human=true -O vulkansdk-macos-1.3.236.0.dmg | |||
| hdiutil attach vulkansdk-macos-1.3.236.0.dmg | |||
| sudo /Volumes/vulkansdk-macos-1.3.236.0/InstallVulkan.app/Contents/MacOS/InstallVulkan --root $GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0 --accept-licenses --default-answer --confirm-command install | |||
| hdiutil detach /Volumes/vulkansdk-macos-1.3.236.0 | |||
| - name: build | |||
| run: | | |||
| export VULKAN_SDK=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0/macOS | |||
| mkdir build && cd build | |||
| cmake -DCMAKE_TOOLCHAIN_FILE=../toolchains/ios.toolchain.cmake -DPLATFORM=MAC_ARM64 -DARCHS="arm64" \ | |||
| -DDEPLOYMENT_TARGET=$MAC_ARM64_DEPLOYMENT_TARGET -DENABLE_BITCODE=$ENABLE_BITCODE -DENABLE_ARC=$ENABLE_ARC -DENABLE_VISIBILITY=$ENABLE_VISIBILITY \ | |||
| -DOpenMP_C_FLAGS="-Xclang -fopenmp" -DOpenMP_CXX_FLAGS="-Xclang -fopenmp" \ | |||
| -DOpenMP_C_LIB_NAMES="libomp" -DOpenMP_CXX_LIB_NAMES="libomp" \ | |||
| -DOpenMP_libomp_LIBRARY="$DEVELOPER_DIR/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/lib/libomp.a" \ | |||
| -DVulkan_INCLUDE_DIR=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0/MoltenVK/include \ | |||
| -DVulkan_LIBRARY=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0/MoltenVK/dylib/macOS/libMoltenVK.dylib \ | |||
| -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=install \ | |||
| -DNCNN_VULKAN=ON -DNCNN_BUILD_TOOLS=OFF -DNCNN_BUILD_EXAMPLES=OFF .. | |||
| cmake --build . -j 3 | |||
| - name: build-shared | |||
| run: | | |||
| export VULKAN_SDK=`pwd`/vulkansdk-macos-1.3.236.0/macOS | |||
| mkdir build-shared && cd build-shared | |||
| cmake -DCMAKE_TOOLCHAIN_FILE=../toolchains/ios.toolchain.cmake -DPLATFORM=MAC_ARM64 -DARCHS="arm64" \ | |||
| -DDEPLOYMENT_TARGET=$MAC_ARM64_DEPLOYMENT_TARGET -DENABLE_BITCODE=$ENABLE_BITCODE -DENABLE_ARC=$ENABLE_ARC -DENABLE_VISIBILITY=$ENABLE_VISIBILITY \ | |||
| -DOpenMP_C_FLAGS="-Xclang -fopenmp" -DOpenMP_CXX_FLAGS="-Xclang -fopenmp" \ | |||
| -DOpenMP_C_LIB_NAMES="libomp" -DOpenMP_CXX_LIB_NAMES="libomp" \ | |||
| -DOpenMP_libomp_LIBRARY="$DEVELOPER_DIR/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/lib/libomp.a" \ | |||
| -DVulkan_INCLUDE_DIR=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0/MoltenVK/include \ | |||
| -DVulkan_LIBRARY=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0/MoltenVK/dylib/macOS/libMoltenVK.dylib \ | |||
| -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=install \ | |||
| -DNCNN_VULKAN=ON -DNCNN_BUILD_TOOLS=OFF -DNCNN_BUILD_EXAMPLES=OFF -DNCNN_SHARED_LIB=ON .. | |||
| -DNCNN_VULKAN=ON -DNCNN_BUILD_BENCHMARK=OFF -DNCNN_BUILD_TOOLS=OFF -DNCNN_BUILD_EXAMPLES=OFF .. | |||
| cmake --build . -j 3 | |||
| @@ -105,13 +105,6 @@ jobs: | |||
| sudo cp $GITHUB_WORKSPACE/openmp-install/include/* $DEVELOPER_DIR/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include | |||
| sudo cp $GITHUB_WORKSPACE/openmp-install/lib/libomp.a $DEVELOPER_DIR/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/lib | |||
| - name: vulkansdk | |||
| run: | | |||
| wget https://sdk.lunarg.com/sdk/download/1.3.236.0/mac/vulkansdk-macos-1.3.236.0.dmg?Human=true -O vulkansdk-macos-1.3.236.0.dmg | |||
| hdiutil attach vulkansdk-macos-1.3.236.0.dmg | |||
| sudo /Volumes/vulkansdk-macos-1.3.236.0/InstallVulkan.app/Contents/MacOS/InstallVulkan --root $GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0 --accept-licenses --default-answer --confirm-command install | |||
| hdiutil detach /Volumes/vulkansdk-macos-1.3.236.0 | |||
| - name: cache-swiftshader | |||
| id: cache-swiftshader | |||
| uses: actions/cache@v3 | |||
| @@ -142,31 +135,29 @@ jobs: | |||
| - name: build | |||
| run: | | |||
| export VULKAN_SDK=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0/macOS | |||
| mkdir build && cd build | |||
| cmake -DCMAKE_TOOLCHAIN_FILE=../toolchains/ios.toolchain.cmake -DPLATFORM=MAC -DARCHS="x86_64" \ | |||
| -DDEPLOYMENT_TARGET=$MAC_DEPLOYMENT_TARGET -DENABLE_BITCODE=$ENABLE_BITCODE -DENABLE_ARC=$ENABLE_ARC -DENABLE_VISIBILITY=$ENABLE_VISIBILITY \ | |||
| -DOpenMP_C_FLAGS="-Xclang -fopenmp" -DOpenMP_CXX_FLAGS="-Xclang -fopenmp" \ | |||
| -DOpenMP_C_LIB_NAMES="libomp" -DOpenMP_CXX_LIB_NAMES="libomp" \ | |||
| -DOpenMP_libomp_LIBRARY="$DEVELOPER_DIR/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/lib/libomp.a" \ | |||
| -DVulkan_LIBRARY=$GITHUB_WORKSPACE/swiftshader-install/libvulkan.dylib \ | |||
| -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=install \ | |||
| -DNCNN_VULKAN=ON -DNCNN_BUILD_TESTS=ON .. | |||
| cmake --build . -j 3 | |||
| - name: test | |||
| run: | | |||
| printf "[Processor]\nThreadCount=1\n" > build/tests/SwiftShader.ini | |||
| export DYLD_LIBRARY_PATH="$GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0/macOS/lib":$DYLD_LIBRARY_PATH | |||
| export VK_ICD_FILENAMES="$GITHUB_WORKSPACE/swiftshader-install/vk_swiftshader_icd.json" | |||
| cd build && ctest --output-on-failure -j 3 | |||
| - name: build-shared | |||
| run: | | |||
| export VULKAN_SDK=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0/macOS | |||
| mkdir build-shared && cd build-shared | |||
| cmake -DCMAKE_TOOLCHAIN_FILE=../toolchains/ios.toolchain.cmake -DPLATFORM=MAC -DARCHS="x86_64" \ | |||
| -DDEPLOYMENT_TARGET=$MAC_DEPLOYMENT_TARGET -DENABLE_BITCODE=$ENABLE_BITCODE -DENABLE_ARC=$ENABLE_ARC -DENABLE_VISIBILITY=$ENABLE_VISIBILITY \ | |||
| -DOpenMP_C_FLAGS="-Xclang -fopenmp" -DOpenMP_CXX_FLAGS="-Xclang -fopenmp" \ | |||
| -DOpenMP_C_LIB_NAMES="libomp" -DOpenMP_CXX_LIB_NAMES="libomp" \ | |||
| -DOpenMP_libomp_LIBRARY="$DEVELOPER_DIR/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/lib/libomp.a" \ | |||
| -DVulkan_LIBRARY=$GITHUB_WORKSPACE/swiftshader-install/libvulkan.dylib \ | |||
| -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=install \ | |||
| -DNCNN_VULKAN=ON -DNCNN_SHARED_LIB=ON .. | |||
| cmake --build . -j 3 | |||
| @@ -70,90 +70,26 @@ jobs: | |||
| python-version: '3.x' | |||
| # build wheels for ubuntu-20.04 | |||
| - name: Build wheels for ubuntu manylinux | |||
| if: matrix.os == 'ubuntu-20.04' && matrix.build != 'cp*-musllinux*' | |||
| - name: Build wheels for ubuntu | |||
| if: matrix.os == 'ubuntu-20.04' | |||
| uses: pypa/cibuildwheel@v2.16.2 | |||
| env: | |||
| CIBW_ARCHS_LINUX: ${{ matrix.arch }} | |||
| CIBW_BUILD: ${{ matrix.build }} | |||
| CIBW_BUILD_VERBOSITY: 1 | |||
| CIBW_ENVIRONMENT: CMAKE_BUILD_PARALLEL_LEVEL=2 NCNN_VULKAN=ON | |||
| VULKAN_SDK=/project/Vulkan-Loader/build/Vulkan-Headers | |||
| LD_LIBRARY_PATH=/project/Vulkan-Loader/build/loader | |||
| CIBW_BEFORE_ALL: yum -y install libXrandr-devel && | |||
| git clone https://github.com/KhronosGroup/Vulkan-Loader.git && | |||
| cd Vulkan-Loader && mkdir build && cd build && | |||
| ../scripts/update_deps.py && | |||
| cmake -DCMAKE_BUILD_TYPE=Release -DVULKAN_HEADERS_INSTALL_DIR=$(pwd)/Vulkan-Headers/build/install .. && | |||
| make -j$(nproc) && | |||
| cd Vulkan-Headers && | |||
| ln -s ../loader lib | |||
| with: | |||
| output-dir: wheelhouse | |||
| - name: Build wheels for ubuntu musllinux | |||
| if: matrix.os == 'ubuntu-20.04' && matrix.build == 'cp*-musllinux*' | |||
| uses: pypa/cibuildwheel@v2.16.2 | |||
| env: | |||
| CIBW_ARCHS_LINUX: ${{ matrix.arch }} | |||
| CIBW_BUILD: ${{ matrix.build }} | |||
| CIBW_BUILD_VERBOSITY: 1 | |||
| CIBW_ENVIRONMENT: CMAKE_BUILD_PARALLEL_LEVEL=2 NCNN_VULKAN=ON | |||
| VULKAN_SDK=/project/Vulkan-Loader/build/Vulkan-Headers | |||
| LD_LIBRARY_PATH=/project/Vulkan-Loader/build/loader | |||
| CIBW_BEFORE_ALL: apk add libxrandr-dev && | |||
| git clone https://github.com/KhronosGroup/Vulkan-Loader.git && | |||
| cd Vulkan-Loader && mkdir build && cd build && | |||
| ../scripts/update_deps.py && | |||
| cmake -DCMAKE_BUILD_TYPE=Release -DVULKAN_HEADERS_INSTALL_DIR=$(pwd)/Vulkan-Headers/build/install .. && | |||
| make -j$(nproc) && | |||
| cd Vulkan-Headers && | |||
| ln -s ../loader lib | |||
| CIBW_ENVIRONMENT: CMAKE_BUILD_PARALLEL_LEVEL=2 | |||
| with: | |||
| output-dir: wheelhouse | |||
| # build wheels for windows-2019 | |||
| - name: Build wheels for windows amd64 | |||
| if: matrix.os == 'windows-2019' && matrix.arch == 'AMD64' | |||
| - name: Build wheels for windows | |||
| if: matrix.os == 'windows-2019' && (matrix.arch == 'AMD64' || matrix.arch == 'x86') | |||
| uses: pypa/cibuildwheel@v2.16.2 | |||
| env: | |||
| CIBW_ARCHS_WINDOWS: ${{ matrix.arch }} | |||
| CIBW_BUILD: ${{ matrix.build }} | |||
| CIBW_BUILD_VERBOSITY: 1 | |||
| CIBW_ENVIRONMENT_WINDOWS: > | |||
| PATH="D:\\a\\ncnn\\ncnn\\Vulkan-Loader\\build\\loader\\Release;$PATH" | |||
| CMAKE_BUILD_PARALLEL_LEVEL=2 NCNN_VULKAN=ON | |||
| VULKAN_SDK=D:/a/ncnn/ncnn/Vulkan-Loader/external/Vulkan-Headers | |||
| CIBW_BEFORE_ALL: git clone https://github.com/KhronosGroup/Vulkan-Loader.git && | |||
| cd Vulkan-Loader && mkdir build && cd build && | |||
| python3 ../scripts/update_deps.py --dir ../external --config release && | |||
| cmake -C ../external/helper.cmake -G "Visual Studio 16 2019" -A x64 -DCMAKE_BUILD_TYPE=Release .. && | |||
| cmake --build . --config Release && | |||
| mklink /d "D:/a/ncnn/ncnn/Vulkan-Loader/external/Vulkan-Headers/build/install/lib" | |||
| "D:/a/ncnn/ncnn/Vulkan-Loader/build/loader/Release" | |||
| CIBW_BEFORE_BUILD: pip install delvewheel | |||
| CIBW_REPAIR_WHEEL_COMMAND: delvewheel repair -w {dest_dir} {wheel} | |||
| with: | |||
| output-dir: wheelhouse | |||
| - name: Build wheels for windows x86 | |||
| if: matrix.os == 'windows-2019' && matrix.arch == 'x86' | |||
| uses: pypa/cibuildwheel@v2.16.2 | |||
| env: | |||
| CIBW_ARCHS_WINDOWS: ${{ matrix.arch }} | |||
| CIBW_BUILD: ${{ matrix.build }} | |||
| CIBW_BUILD_VERBOSITY: 1 | |||
| CIBW_ENVIRONMENT_WINDOWS: > | |||
| PATH="D:\\a\\ncnn\\ncnn\\Vulkan-Loader\\build\\loader\\Release;$PATH" | |||
| CMAKE_BUILD_PARALLEL_LEVEL=2 NCNN_VULKAN=ON | |||
| VULKAN_SDK=D:/a/ncnn/ncnn/Vulkan-Loader/external/Vulkan-Headers | |||
| CIBW_BEFORE_ALL: git clone https://github.com/KhronosGroup/Vulkan-Loader.git && | |||
| cd Vulkan-Loader && mkdir build && cd build && | |||
| python3 ../scripts/update_deps.py --dir ../external --arch ${{ matrix.arch }} --config release && | |||
| cmake -C ../external/helper.cmake -G "Visual Studio 16 2019" -A Win32 -DCMAKE_BUILD_TYPE=Release .. && | |||
| cmake --build . --config Release && | |||
| mklink /d "D:/a/ncnn/ncnn/Vulkan-Loader/external/Vulkan-Headers/build/install/lib" | |||
| "D:/a/ncnn/ncnn/Vulkan-Loader/build/loader/Release" | |||
| CIBW_ENVIRONMENT_WINDOWS: CMAKE_BUILD_PARALLEL_LEVEL=2 | |||
| CIBW_BEFORE_BUILD: pip install delvewheel | |||
| CIBW_REPAIR_WHEEL_COMMAND: delvewheel repair -w {dest_dir} {wheel} | |||
| with: | |||
| @@ -166,17 +102,7 @@ jobs: | |||
| CIBW_ARCHS_WINDOWS: ${{ matrix.arch }} | |||
| CIBW_BUILD: ${{ matrix.build }} | |||
| CIBW_BUILD_VERBOSITY: 1 | |||
| CIBW_ENVIRONMENT_WINDOWS: > | |||
| PATH="D:\\a\\ncnn\\ncnn\\Vulkan-Loader\\build\\loader\\Release;$PATH" | |||
| CMAKE_BUILD_PARALLEL_LEVEL=2 NCNN_VULKAN=ON | |||
| VULKAN_SDK=D:/a/ncnn/ncnn/Vulkan-Loader/external/Vulkan-Headers | |||
| CIBW_BEFORE_ALL: git clone https://github.com/KhronosGroup/Vulkan-Loader.git && | |||
| cd Vulkan-Loader && mkdir build && cd build && | |||
| python3 ../scripts/update_deps.py --dir ../external --config release && | |||
| cmake -C ../external/helper.cmake -G "Visual Studio 16 2019" -A ARM64 -DCMAKE_BUILD_TYPE=Release -DUSE_MASM=OFF .. && | |||
| cmake --build . --config Release && | |||
| mklink /d "D:/a/ncnn/ncnn/Vulkan-Loader/external/Vulkan-Headers/build/install/lib" | |||
| "D:/a/ncnn/ncnn/Vulkan-Loader/build/loader/Release" | |||
| CIBW_ENVIRONMENT_WINDOWS: CMAKE_BUILD_PARALLEL_LEVEL=2 | |||
| CIBW_BEFORE_BUILD: pip install delvewheel | |||
| CIBW_REPAIR_WHEEL_COMMAND: delvewheel repair -w {dest_dir} {wheel} --no-dll "msvcp140.dll;vcomp140.dll" | |||
| with: | |||
| @@ -243,14 +169,6 @@ jobs: | |||
| sudo cp $GITHUB_WORKSPACE/openmp-install/include/* $DEVELOPER_DIR/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include | |||
| sudo cp $GITHUB_WORKSPACE/openmp-install/lib/libomp.a $DEVELOPER_DIR/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/lib | |||
| - name: vulkansdk for macos | |||
| if: matrix.os == 'macos-latest' | |||
| run: | | |||
| wget https://sdk.lunarg.com/sdk/download/1.3.236.0/mac/vulkansdk-macos-1.3.236.0.dmg?Human=true -O vulkansdk-macos-1.3.236.0.dmg | |||
| hdiutil attach vulkansdk-macos-1.3.236.0.dmg | |||
| sudo /Volumes/vulkansdk-macos-1.3.236.0/InstallVulkan.app/Contents/MacOS/InstallVulkan --root $GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0 --accept-licenses --default-answer --confirm-command install | |||
| hdiutil detach /Volumes/vulkansdk-macos-1.3.236.0 | |||
| - name: Build wheels for macos x86_64 | |||
| if: matrix.os == 'macos-latest' && matrix.arch == 'x86_64' | |||
| uses: pypa/cibuildwheel@v2.16.2 | |||
| @@ -258,14 +176,12 @@ jobs: | |||
| CIBW_ARCHS_MACOS: ${{ matrix.arch }} | |||
| CIBW_BUILD: ${{ matrix.build }} | |||
| CIBW_BUILD_VERBOSITY: 1 | |||
| CIBW_ENVIRONMENT: CMAKE_BUILD_PARALLEL_LEVEL=2 NCNN_VULKAN=ON VULKAN_SDK=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0/macOS | |||
| CIBW_ENVIRONMENT: CMAKE_BUILD_PARALLEL_LEVEL=2 | |||
| CMAKE_TOOLCHAIN_FILE=$GITHUB_WORKSPACE/toolchains/ios.toolchain.cmake PLATFORM=MAC ARCHS="x86_64" | |||
| DEPLOYMENT_TARGET="10.9" ENABLE_BITCODE=OFF ENABLE_ARC=OFF ENABLE_VISIBILITY=OFF | |||
| OpenMP_C_FLAGS="-Xclang -fopenmp" OpenMP_CXX_FLAGS="-Xclang -fopenmp" | |||
| OpenMP_C_LIB_NAMES="libomp" OpenMP_CXX_LIB_NAMES="libomp" | |||
| OpenMP_libomp_LIBRARY="$DEVELOPER_DIR/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/lib/libomp.a" | |||
| Vulkan_INCLUDE_DIR=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0/MoltenVK/include | |||
| Vulkan_LIBRARY=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0/MoltenVK/dylib/macOS/libMoltenVK.dylib | |||
| with: | |||
| output-dir: wheelhouse | |||
| @@ -276,14 +192,12 @@ jobs: | |||
| CIBW_ARCHS_MACOS: ${{ matrix.arch }} | |||
| CIBW_BUILD: ${{ matrix.build }} | |||
| CIBW_BUILD_VERBOSITY: 1 | |||
| CIBW_ENVIRONMENT: CMAKE_BUILD_PARALLEL_LEVEL=2 NCNN_VULKAN=ON VULKAN_SDK=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0/macOS | |||
| CIBW_ENVIRONMENT: CMAKE_BUILD_PARALLEL_LEVEL=2 | |||
| CMAKE_TOOLCHAIN_FILE=$GITHUB_WORKSPACE/toolchains/ios.toolchain.cmake PLATFORM=MAC_ARM64 ARCHS="arm64" | |||
| DEPLOYMENT_TARGET="11.0" ENABLE_BITCODE=OFF ENABLE_ARC=OFF ENABLE_VISIBILITY=OFF | |||
| OpenMP_C_FLAGS="-Xclang -fopenmp" OpenMP_CXX_FLAGS="-Xclang -fopenmp" | |||
| OpenMP_C_LIB_NAMES="libomp" OpenMP_CXX_LIB_NAMES="libomp" | |||
| OpenMP_libomp_LIBRARY="$DEVELOPER_DIR/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/lib/libomp.a" | |||
| Vulkan_INCLUDE_DIR=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0/MoltenVK/include | |||
| Vulkan_LIBRARY=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0/MoltenVK/dylib/macOS/libMoltenVK.dylib | |||
| with: | |||
| output-dir: wheelhouse | |||
| @@ -338,47 +252,12 @@ jobs: | |||
| platforms: all | |||
| - name: Build wheels for manylinux with qemu | |||
| if: (matrix.build != 'cp36-musllinux*') && (matrix.build != 'cp37-musllinux*') && | |||
| (matrix.build != 'cp38-musllinux*') && (matrix.build != 'cp39-musllinux*') && | |||
| (matrix.build != 'cp310-musllinux*') && (matrix.build != 'cp311-musllinux*') && | |||
| (matrix.build != 'cp312-musllinux*') | |||
| uses: pypa/cibuildwheel@v2.16.2 | |||
| env: | |||
| CIBW_ARCHS_LINUX: ${{ matrix.arch }} | |||
| CIBW_BUILD: ${{ matrix.build }} | |||
| CIBW_BUILD_VERBOSITY: 1 | |||
| CIBW_ENVIRONMENT: CMAKE_BUILD_PARALLEL_LEVEL=2 NCNN_VULKAN=ON VULKAN_SDK=/project/Vulkan-Loader/build/Vulkan-Headers | |||
| LD_LIBRARY_PATH=/project/Vulkan-Loader/build/loader | |||
| CIBW_BEFORE_ALL: yum -y install libXrandr-devel && | |||
| git clone https://github.com/KhronosGroup/Vulkan-Loader.git && | |||
| cd Vulkan-Loader && mkdir build && cd build && | |||
| ../scripts/update_deps.py && | |||
| cmake -DCMAKE_BUILD_TYPE=Release -DVULKAN_HEADERS_INSTALL_DIR=$(pwd)/Vulkan-Headers/build/install .. && | |||
| make -j$(nproc) && | |||
| cd Vulkan-Headers && | |||
| ln -s ../loader lib | |||
| with: | |||
| output-dir: wheelhouse | |||
| - name: Build wheels for musllinux with qemu | |||
| if: (matrix.build == 'cp36-musllinux*') || (matrix.build == 'cp37-musllinux*') || | |||
| (matrix.build == 'cp38-musllinux*') || (matrix.build == 'cp39-musllinux*') || | |||
| (matrix.build == 'cp310-musllinux*') || (matrix.build == 'cp311-musllinux*') || | |||
| (matrix.build == 'cp312-musllinux*') | |||
| uses: pypa/cibuildwheel@v2.16.2 | |||
| env: | |||
| CIBW_ARCHS_LINUX: ${{ matrix.arch }} | |||
| CIBW_BUILD: ${{ matrix.build }} | |||
| CIBW_BUILD_VERBOSITY: 1 | |||
| CIBW_ENVIRONMENT: CMAKE_BUILD_PARALLEL_LEVEL=2 NCNN_VULKAN=ON VULKAN_SDK=/project/Vulkan-Loader/build/Vulkan-Headers LD_LIBRARY_PATH=/project/Vulkan-Loader/build/loader | |||
| CIBW_BEFORE_ALL: apk add libxrandr-dev && | |||
| git clone https://github.com/KhronosGroup/Vulkan-Loader.git && | |||
| cd Vulkan-Loader && mkdir build && cd build && | |||
| ../scripts/update_deps.py && | |||
| cmake -DCMAKE_BUILD_TYPE=Release -DVULKAN_HEADERS_INSTALL_DIR=$(pwd)/Vulkan-Headers/build/install .. && | |||
| make -j$(nproc) && | |||
| cd Vulkan-Headers && | |||
| ln -s ../loader lib | |||
| CIBW_ENVIRONMENT: CMAKE_BUILD_PARALLEL_LEVEL=2 | |||
| with: | |||
| output-dir: wheelhouse | |||
| @@ -64,7 +64,7 @@ jobs: | |||
| submodules: true | |||
| - name: apt | |||
| run: | | |||
| sudo apt-get install -y libvulkan-dev libprotobuf-dev protobuf-compiler | |||
| sudo apt-get install -y libprotobuf-dev protobuf-compiler | |||
| - name: build | |||
| run: | | |||
| mkdir build && cd build | |||
| @@ -96,7 +96,7 @@ jobs: | |||
| submodules: true | |||
| - name: apt | |||
| run: | | |||
| sudo apt-get install -y libvulkan-dev libprotobuf-dev protobuf-compiler | |||
| sudo apt-get install -y libprotobuf-dev protobuf-compiler | |||
| - name: build | |||
| run: | | |||
| mkdir build && cd build | |||
| @@ -128,7 +128,7 @@ jobs: | |||
| submodules: true | |||
| - name: apt | |||
| run: | | |||
| sudo apt-get install -y libvulkan-dev libprotobuf-dev protobuf-compiler | |||
| sudo apt-get install -y libprotobuf-dev protobuf-compiler | |||
| - name: build | |||
| run: | | |||
| mkdir build && cd build | |||
| @@ -160,7 +160,7 @@ jobs: | |||
| submodules: true | |||
| - name: apt | |||
| run: | | |||
| sudo apt-get install -y libvulkan-dev libprotobuf-dev protobuf-compiler | |||
| sudo apt-get install -y libprotobuf-dev protobuf-compiler | |||
| - name: build | |||
| run: | | |||
| mkdir build && cd build | |||
| @@ -332,38 +332,26 @@ jobs: | |||
| run: | | |||
| sudo cp openmp-macos/include/* $DEVELOPER_DIR/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include | |||
| sudo cp openmp-macos/lib/libomp.a $DEVELOPER_DIR/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/lib | |||
| - name: vulkansdk | |||
| run: | | |||
| wget https://sdk.lunarg.com/sdk/download/1.3.236.0/mac/vulkansdk-macos-1.3.236.0.dmg?Human=true -O vulkansdk-macos-1.3.236.0.dmg | |||
| hdiutil attach vulkansdk-macos-1.3.236.0.dmg | |||
| sudo /Volumes/vulkansdk-macos-1.3.236.0/InstallVulkan.app/Contents/MacOS/InstallVulkan --root $GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0 --accept-licenses --default-answer --confirm-command install | |||
| hdiutil detach /Volumes/vulkansdk-macos-1.3.236.0 | |||
| - name: build-x86_64 | |||
| run: | | |||
| export VULKAN_SDK=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0/macOS | |||
| mkdir build-x86_64 && cd build-x86_64 | |||
| cmake -DCMAKE_TOOLCHAIN_FILE=../toolchains/ios.toolchain.cmake -DPLATFORM=MAC -DARCHS="x86_64" \ | |||
| -DDEPLOYMENT_TARGET=$MAC_DEPLOYMENT_TARGET -DENABLE_BITCODE=$ENABLE_BITCODE -DENABLE_ARC=$ENABLE_ARC -DENABLE_VISIBILITY=$ENABLE_VISIBILITY \ | |||
| -DOpenMP_C_FLAGS="-Xclang -fopenmp" -DOpenMP_CXX_FLAGS="-Xclang -fopenmp" \ | |||
| -DOpenMP_C_LIB_NAMES="libomp" -DOpenMP_CXX_LIB_NAMES="libomp" \ | |||
| -DOpenMP_libomp_LIBRARY="$DEVELOPER_DIR/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/lib/libomp.a" \ | |||
| -DVulkan_INCLUDE_DIR=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0/MoltenVK/include \ | |||
| -DVulkan_LIBRARY=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0/MoltenVK/dylib/macOS/libMoltenVK.dylib \ | |||
| -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=install -DNCNN_VERSION_STRING="${{ needs.setup.outputs.VERSION }}" \ | |||
| -DNCNN_VULKAN=ON -DNCNN_BUILD_TOOLS=OFF -DNCNN_BUILD_EXAMPLES=OFF -DNCNN_BUILD_BENCHMARK=OFF .. | |||
| cmake --build . -j 3 | |||
| cmake --build . --target install/strip | |||
| - name: build-arm64 | |||
| run: | | |||
| export VULKAN_SDK=`pwd`/vulkansdk-macos-1.3.236.0/macOS | |||
| mkdir build-arm64 && cd build-arm64 | |||
| cmake -DCMAKE_TOOLCHAIN_FILE=../toolchains/ios.toolchain.cmake -DPLATFORM=MAC_ARM64 -DARCHS="arm64" \ | |||
| -DDEPLOYMENT_TARGET=$MAC_ARM64_DEPLOYMENT_TARGET -DENABLE_BITCODE=$ENABLE_BITCODE -DENABLE_ARC=$ENABLE_ARC -DENABLE_VISIBILITY=$ENABLE_VISIBILITY \ | |||
| -DOpenMP_C_FLAGS="-Xclang -fopenmp" -DOpenMP_CXX_FLAGS="-Xclang -fopenmp" \ | |||
| -DOpenMP_C_LIB_NAMES="libomp" -DOpenMP_CXX_LIB_NAMES="libomp" \ | |||
| -DOpenMP_libomp_LIBRARY="$DEVELOPER_DIR/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/lib/libomp.a" \ | |||
| -DVulkan_INCLUDE_DIR=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0/MoltenVK/include \ | |||
| -DVulkan_LIBRARY=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0/MoltenVK/dylib/macOS/libMoltenVK.dylib \ | |||
| -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=install -DNCNN_VERSION_STRING="${{ needs.setup.outputs.VERSION }}" \ | |||
| -DNCNN_VULKAN=ON -DNCNN_BUILD_TOOLS=OFF -DNCNN_BUILD_EXAMPLES=OFF -DNCNN_BUILD_BENCHMARK=OFF .. | |||
| cmake --build . -j 3 | |||
| @@ -594,38 +582,26 @@ jobs: | |||
| run: | | |||
| sudo cp openmp-ios/include/* $DEVELOPER_DIR/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/include | |||
| sudo cp openmp-ios/lib/libomp.a $DEVELOPER_DIR/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/lib | |||
| - name: vulkansdk | |||
| run: | | |||
| wget https://sdk.lunarg.com/sdk/download/1.3.236.0/mac/vulkansdk-macos-1.3.236.0.dmg?Human=true -O vulkansdk-macos-1.3.236.0.dmg | |||
| hdiutil attach vulkansdk-macos-1.3.236.0.dmg | |||
| sudo /Volumes/vulkansdk-macos-1.3.236.0/InstallVulkan.app/Contents/MacOS/InstallVulkan --root $GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0 --accept-licenses --default-answer --confirm-command install | |||
| hdiutil detach /Volumes/vulkansdk-macos-1.3.236.0 | |||
| - name: build-arm64 | |||
| run: | | |||
| export VULKAN_SDK=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0/macOS | |||
| mkdir build-arm64 && cd build-arm64 | |||
| cmake -DCMAKE_TOOLCHAIN_FILE=../toolchains/ios.toolchain.cmake -DPLATFORM=OS64 -DARCHS="arm64" \ | |||
| -DDEPLOYMENT_TARGET=$IOS_DEPLOYMENT_TARGET -DENABLE_BITCODE=$ENABLE_BITCODE -DENABLE_ARC=$ENABLE_ARC -DENABLE_VISIBILITY=$ENABLE_VISIBILITY \ | |||
| -DOpenMP_C_FLAGS="-Xclang -fopenmp" -DOpenMP_CXX_FLAGS="-Xclang -fopenmp" \ | |||
| -DOpenMP_C_LIB_NAMES="libomp" -DOpenMP_CXX_LIB_NAMES="libomp" \ | |||
| -DOpenMP_libomp_LIBRARY="$DEVELOPER_DIR/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/lib/libomp.a" \ | |||
| -DVulkan_INCLUDE_DIR=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0/MoltenVK/include \ | |||
| -DVulkan_LIBRARY=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0/MoltenVK/iOS/dynamic/libMoltenVK.dylib \ | |||
| -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=install -DNCNN_VERSION_STRING="${{ needs.setup.outputs.VERSION }}" \ | |||
| -DNCNN_VULKAN=ON -DNCNN_BUILD_BENCHMARK=OFF .. | |||
| cmake --build . -j 3 | |||
| cmake --build . --target install/strip | |||
| - name: build-arm64e | |||
| run: | | |||
| export VULKAN_SDK=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0/macOS | |||
| mkdir build-arm64e && cd build-arm64e | |||
| cmake -DCMAKE_TOOLCHAIN_FILE=../toolchains/ios.toolchain.cmake -DPLATFORM=OS64 -DARCHS="arm64e" \ | |||
| -DDEPLOYMENT_TARGET=$IOS_DEPLOYMENT_TARGET -DENABLE_BITCODE=$ENABLE_BITCODE -DENABLE_ARC=$ENABLE_ARC -DENABLE_VISIBILITY=$ENABLE_VISIBILITY \ | |||
| -DOpenMP_C_FLAGS="-Xclang -fopenmp" -DOpenMP_CXX_FLAGS="-Xclang -fopenmp" \ | |||
| -DOpenMP_C_LIB_NAMES="libomp" -DOpenMP_CXX_LIB_NAMES="libomp" \ | |||
| -DOpenMP_libomp_LIBRARY="$DEVELOPER_DIR/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/lib/libomp.a" \ | |||
| -DVulkan_INCLUDE_DIR=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0/MoltenVK/include \ | |||
| -DVulkan_LIBRARY=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0/MoltenVK/iOS/dynamic/libMoltenVK.dylib \ | |||
| -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=install -DNCNN_VERSION_STRING="${{ needs.setup.outputs.VERSION }}" \ | |||
| -DNCNN_VULKAN=ON -DNCNN_BUILD_BENCHMARK=OFF .. | |||
| cmake --build . -j 3 | |||
| @@ -876,38 +852,26 @@ jobs: | |||
| run: | | |||
| sudo cp openmp-ios-bitcode/include/* $DEVELOPER_DIR/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/include | |||
| sudo cp openmp-ios-bitcode/lib/libomp.a $DEVELOPER_DIR/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/lib | |||
| - name: vulkansdk | |||
| run: | | |||
| wget https://sdk.lunarg.com/sdk/download/1.3.236.0/mac/vulkansdk-macos-1.3.236.0.dmg?Human=true -O vulkansdk-macos-1.3.236.0.dmg | |||
| hdiutil attach vulkansdk-macos-1.3.236.0.dmg | |||
| sudo /Volumes/vulkansdk-macos-1.3.236.0/InstallVulkan.app/Contents/MacOS/InstallVulkan --root $GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0 --accept-licenses --default-answer --confirm-command install | |||
| hdiutil detach /Volumes/vulkansdk-macos-1.3.236.0 | |||
| - name: build-arm64 | |||
| run: | | |||
| export VULKAN_SDK=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0/macOS | |||
| mkdir build-arm64 && cd build-arm64 | |||
| cmake -DCMAKE_TOOLCHAIN_FILE=../toolchains/ios.toolchain.cmake -DPLATFORM=OS64 -DARCHS="arm64" \ | |||
| -DDEPLOYMENT_TARGET=$IOS_DEPLOYMENT_TARGET -DENABLE_BITCODE=ON -DENABLE_ARC=$ENABLE_ARC -DENABLE_VISIBILITY=$ENABLE_VISIBILITY \ | |||
| -DOpenMP_C_FLAGS="-Xclang -fopenmp" -DOpenMP_CXX_FLAGS="-Xclang -fopenmp" \ | |||
| -DOpenMP_C_LIB_NAMES="libomp" -DOpenMP_CXX_LIB_NAMES="libomp" \ | |||
| -DOpenMP_libomp_LIBRARY="$DEVELOPER_DIR/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/lib/libomp.a" \ | |||
| -DVulkan_INCLUDE_DIR=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0/MoltenVK/include \ | |||
| -DVulkan_LIBRARY=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0/MoltenVK/iOS/dynamic/libMoltenVK.dylib \ | |||
| -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=install -DNCNN_VERSION_STRING="${{ needs.setup.outputs.VERSION }}" \ | |||
| -DNCNN_VULKAN=ON -DNCNN_BUILD_BENCHMARK=OFF .. | |||
| cmake --build . -j 3 | |||
| cmake --build . --target install/strip | |||
| - name: build-arm64e | |||
| run: | | |||
| export VULKAN_SDK=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0/macOS | |||
| mkdir build-arm64e && cd build-arm64e | |||
| cmake -DCMAKE_TOOLCHAIN_FILE=../toolchains/ios.toolchain.cmake -DPLATFORM=OS64 -DARCHS="arm64e" \ | |||
| -DDEPLOYMENT_TARGET=$IOS_DEPLOYMENT_TARGET -DENABLE_BITCODE=ON -DENABLE_ARC=$ENABLE_ARC -DENABLE_VISIBILITY=$ENABLE_VISIBILITY \ | |||
| -DOpenMP_C_FLAGS="-Xclang -fopenmp" -DOpenMP_CXX_FLAGS="-Xclang -fopenmp" \ | |||
| -DOpenMP_C_LIB_NAMES="libomp" -DOpenMP_CXX_LIB_NAMES="libomp" \ | |||
| -DOpenMP_libomp_LIBRARY="$DEVELOPER_DIR/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/lib/libomp.a" \ | |||
| -DVulkan_INCLUDE_DIR=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0/MoltenVK/include \ | |||
| -DVulkan_LIBRARY=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0/MoltenVK/iOS/dynamic/libMoltenVK.dylib \ | |||
| -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=install -DNCNN_VERSION_STRING="${{ needs.setup.outputs.VERSION }}" \ | |||
| -DNCNN_VULKAN=ON -DNCNN_BUILD_BENCHMARK=OFF .. | |||
| cmake --build . -j 3 | |||
| @@ -1158,38 +1122,26 @@ jobs: | |||
| run: | | |||
| sudo cp openmp-ios-simulator/include/* $DEVELOPER_DIR/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/include | |||
| sudo cp openmp-ios-simulator/lib/libomp.a $DEVELOPER_DIR/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/lib | |||
| - name: vulkansdk | |||
| run: | | |||
| wget https://sdk.lunarg.com/sdk/download/1.3.236.0/mac/vulkansdk-macos-1.3.236.0.dmg?Human=true -O vulkansdk-macos-1.3.236.0.dmg | |||
| hdiutil attach vulkansdk-macos-1.3.236.0.dmg | |||
| sudo /Volumes/vulkansdk-macos-1.3.236.0/InstallVulkan.app/Contents/MacOS/InstallVulkan --root $GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0 --accept-licenses --default-answer --confirm-command install | |||
| hdiutil detach /Volumes/vulkansdk-macos-1.3.236.0 | |||
| - name: build-x86_64 | |||
| run: | | |||
| export VULKAN_SDK=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0/macOS | |||
| mkdir build-x86_64 && cd build-x86_64 | |||
| cmake -DCMAKE_TOOLCHAIN_FILE=../toolchains/ios.toolchain.cmake -DPLATFORM=SIMULATOR64 -DARCHS="x86_64" \ | |||
| -DDEPLOYMENT_TARGET=$IOS_DEPLOYMENT_TARGET -DENABLE_BITCODE=$ENABLE_BITCODE -DENABLE_ARC=$ENABLE_ARC -DENABLE_VISIBILITY=$ENABLE_VISIBILITY \ | |||
| -DOpenMP_C_FLAGS="-Xclang -fopenmp" -DOpenMP_CXX_FLAGS="-Xclang -fopenmp" \ | |||
| -DOpenMP_C_LIB_NAMES="libomp" -DOpenMP_CXX_LIB_NAMES="libomp" \ | |||
| -DOpenMP_libomp_LIBRARY="$DEVELOPER_DIR/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/lib/libomp.a" \ | |||
| -DVulkan_INCLUDE_DIR=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0/MoltenVK/include \ | |||
| -DVulkan_LIBRARY=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0/MoltenVK/dylib/macOS/libMoltenVK.dylib \ | |||
| -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=install -DNCNN_VERSION_STRING="${{ needs.setup.outputs.VERSION }}" \ | |||
| -DNCNN_VULKAN=ON -DNCNN_BUILD_BENCHMARK=OFF .. | |||
| cmake --build . -j 3 | |||
| cmake --build . --target install/strip | |||
| - name: build-arm64 | |||
| run: | | |||
| export VULKAN_SDK=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0/macOS | |||
| mkdir build-arm64 && cd build-arm64 | |||
| cmake -DCMAKE_TOOLCHAIN_FILE=../toolchains/ios.toolchain.cmake -DPLATFORM=SIMULATORARM64 -DARCHS="arm64" \ | |||
| -DDEPLOYMENT_TARGET=$IOS_DEPLOYMENT_TARGET -DENABLE_BITCODE=$ENABLE_BITCODE -DENABLE_ARC=$ENABLE_ARC -DENABLE_VISIBILITY=$ENABLE_VISIBILITY \ | |||
| -DOpenMP_C_FLAGS="-Xclang -fopenmp" -DOpenMP_CXX_FLAGS="-Xclang -fopenmp" \ | |||
| -DOpenMP_C_LIB_NAMES="libomp" -DOpenMP_CXX_LIB_NAMES="libomp" \ | |||
| -DOpenMP_libomp_LIBRARY="$DEVELOPER_DIR/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/lib/libomp.a" \ | |||
| -DVulkan_INCLUDE_DIR=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0/MoltenVK/include \ | |||
| -DVulkan_LIBRARY=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0/MoltenVK/dylib/macOS/libMoltenVK.dylib \ | |||
| -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=install -DNCNN_VERSION_STRING="${{ needs.setup.outputs.VERSION }}" \ | |||
| -DNCNN_VULKAN=ON -DNCNN_BUILD_BENCHMARK=OFF .. | |||
| cmake --build . -j 3 | |||
| @@ -1440,38 +1392,26 @@ jobs: | |||
| run: | | |||
| sudo cp openmp-ios-simulator-bitcode/include/* $DEVELOPER_DIR/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/include | |||
| sudo cp openmp-ios-simulator-bitcode/lib/libomp.a $DEVELOPER_DIR/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/lib | |||
| - name: vulkansdk | |||
| run: | | |||
| wget https://sdk.lunarg.com/sdk/download/1.3.236.0/mac/vulkansdk-macos-1.3.236.0.dmg?Human=true -O vulkansdk-macos-1.3.236.0.dmg | |||
| hdiutil attach vulkansdk-macos-1.3.236.0.dmg | |||
| sudo /Volumes/vulkansdk-macos-1.3.236.0/InstallVulkan.app/Contents/MacOS/InstallVulkan --root $GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0 --accept-licenses --default-answer --confirm-command install | |||
| hdiutil detach /Volumes/vulkansdk-macos-1.3.236.0 | |||
| - name: build-x86_64 | |||
| run: | | |||
| export VULKAN_SDK=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0/macOS | |||
| mkdir build-x86_64 && cd build-x86_64 | |||
| cmake -DCMAKE_TOOLCHAIN_FILE=../toolchains/ios.toolchain.cmake -DPLATFORM=SIMULATOR64 -DARCHS="x86_64" \ | |||
| -DDEPLOYMENT_TARGET=$IOS_DEPLOYMENT_TARGET -DENABLE_BITCODE=ON -DENABLE_ARC=$ENABLE_ARC -DENABLE_VISIBILITY=$ENABLE_VISIBILITY \ | |||
| -DOpenMP_C_FLAGS="-Xclang -fopenmp" -DOpenMP_CXX_FLAGS="-Xclang -fopenmp" \ | |||
| -DOpenMP_C_LIB_NAMES="libomp" -DOpenMP_CXX_LIB_NAMES="libomp" \ | |||
| -DOpenMP_libomp_LIBRARY="$DEVELOPER_DIR/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/lib/libomp.a" \ | |||
| -DVulkan_INCLUDE_DIR=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0/MoltenVK/include \ | |||
| -DVulkan_LIBRARY=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0/MoltenVK/dylib/macOS/libMoltenVK.dylib \ | |||
| -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=install -DNCNN_VERSION_STRING="${{ needs.setup.outputs.VERSION }}" \ | |||
| -DNCNN_VULKAN=ON -DNCNN_BUILD_BENCHMARK=OFF .. | |||
| cmake --build . -j 3 | |||
| cmake --build . --target install/strip | |||
| - name: build-arm64 | |||
| run: | | |||
| export VULKAN_SDK=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0/macOS | |||
| mkdir build-arm64 && cd build-arm64 | |||
| cmake -DCMAKE_TOOLCHAIN_FILE=../toolchains/ios.toolchain.cmake -DPLATFORM=SIMULATORARM64 -DARCHS="arm64" \ | |||
| -DDEPLOYMENT_TARGET=$IOS_DEPLOYMENT_TARGET -DENABLE_BITCODE=ON -DENABLE_ARC=$ENABLE_ARC -DENABLE_VISIBILITY=$ENABLE_VISIBILITY \ | |||
| -DOpenMP_C_FLAGS="-Xclang -fopenmp" -DOpenMP_CXX_FLAGS="-Xclang -fopenmp" \ | |||
| -DOpenMP_C_LIB_NAMES="libomp" -DOpenMP_CXX_LIB_NAMES="libomp" \ | |||
| -DOpenMP_libomp_LIBRARY="$DEVELOPER_DIR/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/lib/libomp.a" \ | |||
| -DVulkan_INCLUDE_DIR=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0/MoltenVK/include \ | |||
| -DVulkan_LIBRARY=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0/MoltenVK/dylib/macOS/libMoltenVK.dylib \ | |||
| -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=install -DNCNN_VERSION_STRING="${{ needs.setup.outputs.VERSION }}" \ | |||
| -DNCNN_VULKAN=ON -DNCNN_BUILD_BENCHMARK=OFF .. | |||
| cmake --build . -j 3 | |||
| @@ -1696,38 +1636,26 @@ jobs: | |||
| run: | | |||
| sudo cp openmp-mac-catalyst/include/* $DEVELOPER_DIR/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include | |||
| sudo cp openmp-mac-catalyst/lib/libomp.a $DEVELOPER_DIR/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/lib | |||
| - name: vulkansdk | |||
| run: | | |||
| wget https://sdk.lunarg.com/sdk/download/1.3.236.0/mac/vulkansdk-macos-1.3.236.0.dmg?Human=true -O vulkansdk-macos-1.3.236.0.dmg | |||
| hdiutil attach vulkansdk-macos-1.3.236.0.dmg | |||
| sudo /Volumes/vulkansdk-macos-1.3.236.0/InstallVulkan.app/Contents/MacOS/InstallVulkan --root $GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0 --accept-licenses --default-answer --confirm-command install | |||
| hdiutil detach /Volumes/vulkansdk-macos-1.3.236.0 | |||
| - name: build-x86_64 | |||
| run: | | |||
| export VULKAN_SDK=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0/macOS | |||
| mkdir build-x86_64 && cd build-x86_64 | |||
| cmake -DCMAKE_TOOLCHAIN_FILE=../toolchains/ios.toolchain.cmake -DPLATFORM=MAC_CATALYST -DARCHS="x86_64" \ | |||
| -DDEPLOYMENT_TARGET=$MAC_CATALYST_DEPLOYMENT_TARGET -DENABLE_BITCODE=$ENABLE_BITCODE -DENABLE_ARC=$ENABLE_ARC -DENABLE_VISIBILITY=$ENABLE_VISIBILITY \ | |||
| -DOpenMP_C_FLAGS="-Xclang -fopenmp" -DOpenMP_CXX_FLAGS="-Xclang -fopenmp" \ | |||
| -DOpenMP_C_LIB_NAMES="libomp" -DOpenMP_CXX_LIB_NAMES="libomp" \ | |||
| -DOpenMP_libomp_LIBRARY="$DEVELOPER_DIR/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/lib/libomp.a" \ | |||
| -DVulkan_INCLUDE_DIR=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0/MoltenVK/include \ | |||
| -DVulkan_LIBRARY=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0/MoltenVK/dylib/macOS/libMoltenVK.dylib \ | |||
| -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=install -DNCNN_VERSION_STRING="${{ needs.setup.outputs.VERSION }}" \ | |||
| -DNCNN_VULKAN=ON -DNCNN_BUILD_BENCHMARK=OFF .. | |||
| cmake --build . -j 3 | |||
| cmake --build . --target install/strip | |||
| - name: build-arm64 | |||
| run: | | |||
| export VULKAN_SDK=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0/macOS | |||
| mkdir build-arm64 && cd build-arm64 | |||
| cmake -DCMAKE_TOOLCHAIN_FILE=../toolchains/ios.toolchain.cmake -DPLATFORM=MAC_CATALYST -DARCHS="arm64" \ | |||
| -DDEPLOYMENT_TARGET=$MAC_CATALYST_DEPLOYMENT_TARGET -DENABLE_BITCODE=$ENABLE_BITCODE -DENABLE_ARC=$ENABLE_ARC -DENABLE_VISIBILITY=$ENABLE_VISIBILITY \ | |||
| -DOpenMP_C_FLAGS="-Xclang -fopenmp" -DOpenMP_CXX_FLAGS="-Xclang -fopenmp" \ | |||
| -DOpenMP_C_LIB_NAMES="libomp" -DOpenMP_CXX_LIB_NAMES="libomp" \ | |||
| -DOpenMP_libomp_LIBRARY="$DEVELOPER_DIR/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/lib/libomp.a" \ | |||
| -DVulkan_INCLUDE_DIR=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0/MoltenVK/include \ | |||
| -DVulkan_LIBRARY=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0/MoltenVK/dylib/macOS/libMoltenVK.dylib \ | |||
| -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=install -DNCNN_VERSION_STRING="${{ needs.setup.outputs.VERSION }}" \ | |||
| -DNCNN_VULKAN=ON -DNCNN_BUILD_BENCHMARK=OFF .. | |||
| cmake --build . -j 3 | |||
| @@ -1952,38 +1880,26 @@ jobs: | |||
| run: | | |||
| sudo cp openmp-mac-catalyst-bitcode/include/* $DEVELOPER_DIR/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include | |||
| sudo cp openmp-mac-catalyst-bitcode/lib/libomp.a $DEVELOPER_DIR/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/lib | |||
| - name: vulkansdk | |||
| run: | | |||
| wget https://sdk.lunarg.com/sdk/download/1.3.236.0/mac/vulkansdk-macos-1.3.236.0.dmg?Human=true -O vulkansdk-macos-1.3.236.0.dmg | |||
| hdiutil attach vulkansdk-macos-1.3.236.0.dmg | |||
| sudo /Volumes/vulkansdk-macos-1.3.236.0/InstallVulkan.app/Contents/MacOS/InstallVulkan --root $GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0 --accept-licenses --default-answer --confirm-command install | |||
| hdiutil detach /Volumes/vulkansdk-macos-1.3.236.0 | |||
| - name: build-x86_64 | |||
| run: | | |||
| export VULKAN_SDK=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0/macOS | |||
| mkdir build-x86_64 && cd build-x86_64 | |||
| cmake -DCMAKE_TOOLCHAIN_FILE=../toolchains/ios.toolchain.cmake -DPLATFORM=MAC_CATALYST -DARCHS="x86_64" \ | |||
| -DDEPLOYMENT_TARGET=$MAC_CATALYST_DEPLOYMENT_TARGET -DENABLE_BITCODE=ON -DENABLE_ARC=$ENABLE_ARC -DENABLE_VISIBILITY=$ENABLE_VISIBILITY \ | |||
| -DOpenMP_C_FLAGS="-Xclang -fopenmp" -DOpenMP_CXX_FLAGS="-Xclang -fopenmp" \ | |||
| -DOpenMP_C_LIB_NAMES="libomp" -DOpenMP_CXX_LIB_NAMES="libomp" \ | |||
| -DOpenMP_libomp_LIBRARY="$DEVELOPER_DIR/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/lib/libomp.a" \ | |||
| -DVulkan_INCLUDE_DIR=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0/MoltenVK/include \ | |||
| -DVulkan_LIBRARY=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0/MoltenVK/dylib/macOS/libMoltenVK.dylib \ | |||
| -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=install -DNCNN_VERSION_STRING="${{ needs.setup.outputs.VERSION }}" \ | |||
| -DNCNN_VULKAN=ON -DNCNN_BUILD_BENCHMARK=OFF .. | |||
| cmake --build . -j 3 | |||
| cmake --build . --target install/strip | |||
| - name: build-arm64 | |||
| run: | | |||
| export VULKAN_SDK=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0/macOS | |||
| mkdir build-arm64 && cd build-arm64 | |||
| cmake -DCMAKE_TOOLCHAIN_FILE=../toolchains/ios.toolchain.cmake -DPLATFORM=MAC_CATALYST -DARCHS="arm64" \ | |||
| -DDEPLOYMENT_TARGET=$MAC_CATALYST_DEPLOYMENT_TARGET -DENABLE_BITCODE=ON -DENABLE_ARC=$ENABLE_ARC -DENABLE_VISIBILITY=$ENABLE_VISIBILITY \ | |||
| -DOpenMP_C_FLAGS="-Xclang -fopenmp" -DOpenMP_CXX_FLAGS="-Xclang -fopenmp" \ | |||
| -DOpenMP_C_LIB_NAMES="libomp" -DOpenMP_CXX_LIB_NAMES="libomp" \ | |||
| -DOpenMP_libomp_LIBRARY="$DEVELOPER_DIR/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/lib/libomp.a" \ | |||
| -DVulkan_INCLUDE_DIR=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0/MoltenVK/include \ | |||
| -DVulkan_LIBRARY=$GITHUB_WORKSPACE/vulkansdk-macos-1.3.236.0/MoltenVK/dylib/macOS/libMoltenVK.dylib \ | |||
| -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=install -DNCNN_VERSION_STRING="${{ needs.setup.outputs.VERSION }}" \ | |||
| -DNCNN_VULKAN=ON -DNCNN_BUILD_BENCHMARK=OFF .. | |||
| cmake --build . -j 3 | |||
| @@ -2377,54 +2293,37 @@ jobs: | |||
| - uses: actions/checkout@v4 | |||
| with: | |||
| submodules: true | |||
| - name: cache-vulkansdk | |||
| id: cache-vulkansdk | |||
| uses: actions/cache@v3 | |||
| with: | |||
| path: "1.3.236.0" | |||
| key: vulkansdk-linux-x86_64-1.3.236.0 | |||
| - name: vulkansdk | |||
| if: steps.cache-vulkansdk.outputs.cache-hit != 'true' | |||
| run: | | |||
| wget https://sdk.lunarg.com/sdk/download/1.3.236.0/linux/vulkansdk-linux-x86_64-1.3.236.0.tar.gz?Human=true -O vulkansdk-linux-x86_64-1.3.236.0.tar.gz | |||
| tar -xf vulkansdk-linux-x86_64-1.3.236.0.tar.gz | |||
| rm -rf 1.3.236.0/source 1.3.236.0/samples | |||
| find 1.3.236.0 -type f | grep -v -E 'vulkan|glslang' | xargs rm | |||
| - name: ndk-fix-debug | |||
| run: sed -i -e '/^ -g$/d' $ANDROID_NDK_LATEST_HOME/build/cmake/android-legacy.toolchain.cmake | |||
| - name: build-armv7 | |||
| run: | | |||
| export PATH=`pwd`/1.3.236.0/x86_64/bin:$PATH | |||
| mkdir build-armv7 && cd build-armv7 | |||
| cmake -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_LATEST_HOME/build/cmake/android.toolchain.cmake -DANDROID_USE_LEGACY_TOOLCHAIN_FILE=False -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=install -DNCNN_VERSION_STRING="${{ needs.setup.outputs.VERSION }}" \ | |||
| -DANDROID_ABI="armeabi-v7a" -DANDROID_ARM_NEON=ON -DANDROID_PLATFORM=android-24 \ | |||
| -DANDROID_ABI="armeabi-v7a" -DANDROID_ARM_NEON=ON -DANDROID_PLATFORM=android-21 \ | |||
| -DNCNN_VULKAN=ON -DNCNN_BUILD_BENCHMARK=OFF .. | |||
| cmake --build . -j 2 | |||
| cmake --build . --target install/strip | |||
| - name: build-aarch64 | |||
| run: | | |||
| export PATH=`pwd`/1.3.236.0/x86_64/bin:$PATH | |||
| mkdir build-aarch64 && cd build-aarch64 | |||
| cmake -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_LATEST_HOME/build/cmake/android.toolchain.cmake -DANDROID_USE_LEGACY_TOOLCHAIN_FILE=False -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=install -DNCNN_VERSION_STRING="${{ needs.setup.outputs.VERSION }}" \ | |||
| -DANDROID_ABI="arm64-v8a" -DANDROID_PLATFORM=android-24 \ | |||
| -DANDROID_ABI="arm64-v8a" -DANDROID_PLATFORM=android-21 \ | |||
| -DNCNN_VULKAN=ON -DNCNN_BUILD_BENCHMARK=OFF .. | |||
| cmake --build . -j 2 | |||
| cmake --build . --target install/strip | |||
| - name: build-x86 | |||
| run: | | |||
| export PATH=`pwd`/1.3.236.0/x86_64/bin:$PATH | |||
| mkdir build-x86 && cd build-x86 | |||
| cmake -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_LATEST_HOME/build/cmake/android.toolchain.cmake -DANDROID_USE_LEGACY_TOOLCHAIN_FILE=False -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=install -DNCNN_VERSION_STRING="${{ needs.setup.outputs.VERSION }}" \ | |||
| -DANDROID_ABI="x86" -DANDROID_PLATFORM=android-24 \ | |||
| -DANDROID_ABI="x86" -DANDROID_PLATFORM=android-21 \ | |||
| -DNCNN_VULKAN=ON -DNCNN_BUILD_BENCHMARK=OFF .. | |||
| cmake --build . -j 2 | |||
| cmake --build . --target install/strip | |||
| - name: build-x86_64 | |||
| run: | | |||
| export PATH=`pwd`/1.3.236.0/x86_64/bin:$PATH | |||
| mkdir build-x86_64 && cd build-x86_64 | |||
| cmake -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_LATEST_HOME/build/cmake/android.toolchain.cmake -DANDROID_USE_LEGACY_TOOLCHAIN_FILE=False -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=install -DNCNN_VERSION_STRING="${{ needs.setup.outputs.VERSION }}" \ | |||
| -DANDROID_ABI="x86_64" -DANDROID_PLATFORM=android-24 \ | |||
| -DANDROID_ABI="x86_64" -DANDROID_PLATFORM=android-21 \ | |||
| -DNCNN_VULKAN=ON -DNCNN_BUILD_BENCHMARK=OFF .. | |||
| cmake --build . -j 2 | |||
| cmake --build . --target install/strip | |||
| @@ -2453,54 +2352,37 @@ jobs: | |||
| - uses: actions/checkout@v4 | |||
| with: | |||
| submodules: true | |||
| - name: cache-vulkansdk | |||
| id: cache-vulkansdk | |||
| uses: actions/cache@v3 | |||
| with: | |||
| path: "1.3.236.0" | |||
| key: vulkansdk-linux-x86_64-1.3.236.0 | |||
| - name: vulkansdk | |||
| if: steps.cache-vulkansdk.outputs.cache-hit != 'true' | |||
| run: | | |||
| wget https://sdk.lunarg.com/sdk/download/1.3.236.0/linux/vulkansdk-linux-x86_64-1.3.236.0.tar.gz?Human=true -O vulkansdk-linux-x86_64-1.3.236.0.tar.gz | |||
| tar -xf vulkansdk-linux-x86_64-1.3.236.0.tar.gz | |||
| rm -rf 1.3.236.0/source 1.3.236.0/samples | |||
| find 1.3.236.0 -type f | grep -v -E 'vulkan|glslang' | xargs rm | |||
| - name: ndk-fix-debug | |||
| run: sed -i -e '/^ -g$/d' $ANDROID_NDK_LATEST_HOME/build/cmake/android-legacy.toolchain.cmake | |||
| - name: build-armv7 | |||
| run: | | |||
| export PATH=`pwd`/1.3.236.0/x86_64/bin:$PATH | |||
| mkdir build-armv7 && cd build-armv7 | |||
| cmake -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_LATEST_HOME/build/cmake/android.toolchain.cmake -DANDROID_USE_LEGACY_TOOLCHAIN_FILE=False -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=install -DNCNN_VERSION_STRING="${{ needs.setup.outputs.VERSION }}" \ | |||
| -DANDROID_ABI="armeabi-v7a" -DANDROID_ARM_NEON=ON -DANDROID_PLATFORM=android-24 \ | |||
| -DANDROID_ABI="armeabi-v7a" -DANDROID_ARM_NEON=ON -DANDROID_PLATFORM=android-21 \ | |||
| -DNCNN_VULKAN=ON -DNCNN_BUILD_BENCHMARK=OFF -DNCNN_SHARED_LIB=ON .. | |||
| cmake --build . -j 2 | |||
| cmake --build . --target install/strip | |||
| - name: build-aarch64 | |||
| run: | | |||
| export PATH=`pwd`/1.3.236.0/x86_64/bin:$PATH | |||
| mkdir build-aarch64 && cd build-aarch64 | |||
| cmake -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_LATEST_HOME/build/cmake/android.toolchain.cmake -DANDROID_USE_LEGACY_TOOLCHAIN_FILE=False -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=install -DNCNN_VERSION_STRING="${{ needs.setup.outputs.VERSION }}" \ | |||
| -DANDROID_ABI="arm64-v8a" -DANDROID_PLATFORM=android-24 \ | |||
| -DANDROID_ABI="arm64-v8a" -DANDROID_PLATFORM=android-21 \ | |||
| -DNCNN_VULKAN=ON -DNCNN_BUILD_BENCHMARK=OFF -DNCNN_SHARED_LIB=ON .. | |||
| cmake --build . -j 2 | |||
| cmake --build . --target install/strip | |||
| - name: build-x86 | |||
| run: | | |||
| export PATH=`pwd`/1.3.236.0/x86_64/bin:$PATH | |||
| mkdir build-x86 && cd build-x86 | |||
| cmake -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_LATEST_HOME/build/cmake/android.toolchain.cmake -DANDROID_USE_LEGACY_TOOLCHAIN_FILE=False -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=install -DNCNN_VERSION_STRING="${{ needs.setup.outputs.VERSION }}" \ | |||
| -DANDROID_ABI="x86" -DANDROID_PLATFORM=android-24 \ | |||
| -DANDROID_ABI="x86" -DANDROID_PLATFORM=android-21 \ | |||
| -DNCNN_VULKAN=ON -DNCNN_BUILD_BENCHMARK=OFF -DNCNN_SHARED_LIB=ON .. | |||
| cmake --build . -j 2 | |||
| cmake --build . --target install/strip | |||
| - name: build-x86_64 | |||
| run: | | |||
| export PATH=`pwd`/1.3.236.0/x86_64/bin:$PATH | |||
| mkdir build-x86_64 && cd build-x86_64 | |||
| cmake -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_LATEST_HOME/build/cmake/android.toolchain.cmake -DANDROID_USE_LEGACY_TOOLCHAIN_FILE=False -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=install -DNCNN_VERSION_STRING="${{ needs.setup.outputs.VERSION }}" \ | |||
| -DANDROID_ABI="x86_64" -DANDROID_PLATFORM=android-24 \ | |||
| -DANDROID_ABI="x86_64" -DANDROID_PLATFORM=android-21 \ | |||
| -DNCNN_VULKAN=ON -DNCNN_BUILD_BENCHMARK=OFF -DNCNN_SHARED_LIB=ON .. | |||
| cmake --build . -j 2 | |||
| cmake --build . --target install/strip | |||
| @@ -2616,22 +2498,14 @@ jobs: | |||
| cmake -T v140,host=x64 -A x64 -DCMAKE_INSTALL_PREFIX="$env:GITHUB_WORKSPACE\protobuf-install\x64" -Dprotobuf_BUILD_TESTS=OFF -Dprotobuf_MSVC_STATIC_RUNTIME=OFF ../cmake | |||
| cmake --build . --config Release -j 2 | |||
| cmake --build . --config Release --target install | |||
| - name: vulkansdk | |||
| run: | | |||
| Invoke-WebRequest -Uri https://sdk.lunarg.com/sdk/download/1.3.236.0/windows/VulkanSDK-1.3.236.0-Installer.exe?Human=true -OutFile VulkanSDK.exe | |||
| .\VulkanSDK.exe --accept-licenses --default-answer --confirm-command install com.lunarg.vulkan.32bit | |||
| - name: build-x86 | |||
| run: | | |||
| $env:VULKAN_SDK="C:/VulkanSDK/1.3.236.0" | |||
| $env:Path+=";C:/VulkanSDK/1.3.236.0/Bin" | |||
| mkdir build-x86; cd build-x86 | |||
| cmake -T v140,host=x64 -A Win32 -DCMAKE_INSTALL_PREFIX=install -DNCNN_VERSION_STRING="${{ needs.setup.outputs.VERSION }}" -Dprotobuf_DIR="$env:GITHUB_WORKSPACE\protobuf-install\x86\cmake" -DNCNN_VULKAN=ON -DNCNN_BUILD_EXAMPLES=OFF -DNCNN_BUILD_TOOLS=ON -DNCNN_BUILD_BENCHMARK=OFF .. | |||
| cmake --build . --config Release -j 2 | |||
| cmake --build . --config Release --target install | |||
| - name: build-x64 | |||
| run: | | |||
| $env:VULKAN_SDK="C:/VulkanSDK/1.3.236.0" | |||
| $env:Path+=";C:/VulkanSDK/1.3.236.0/Bin" | |||
| mkdir build-x64; cd build-x64 | |||
| cmake -T v140,host=x64 -A x64 -DCMAKE_INSTALL_PREFIX=install -DNCNN_VERSION_STRING="${{ needs.setup.outputs.VERSION }}" -Dprotobuf_DIR="$env:GITHUB_WORKSPACE\protobuf-install\x64\cmake" -DNCNN_VULKAN=ON -DNCNN_BUILD_EXAMPLES=OFF -DNCNN_BUILD_TOOLS=ON -DNCNN_BUILD_BENCHMARK=OFF .. | |||
| cmake --build . --config Release -j 2 | |||
| @@ -2681,22 +2555,14 @@ jobs: | |||
| cmake -T v140,host=x64 -A x64 -DCMAKE_INSTALL_PREFIX="$env:GITHUB_WORKSPACE\protobuf-install\x64" -Dprotobuf_BUILD_TESTS=OFF -Dprotobuf_MSVC_STATIC_RUNTIME=OFF ../cmake | |||
| cmake --build . --config Release -j 2 | |||
| cmake --build . --config Release --target install | |||
| - name: vulkansdk | |||
| run: | | |||
| Invoke-WebRequest -Uri https://sdk.lunarg.com/sdk/download/1.3.236.0/windows/VulkanSDK-1.3.236.0-Installer.exe?Human=true -OutFile VulkanSDK.exe | |||
| .\VulkanSDK.exe --accept-licenses --default-answer --confirm-command install com.lunarg.vulkan.32bit | |||
| - name: build-x86 | |||
| run: | | |||
| $env:VULKAN_SDK="C:/VulkanSDK/1.3.236.0" | |||
| $env:Path+=";C:/VulkanSDK/1.3.236.0/Bin" | |||
| mkdir build-x86; cd build-x86 | |||
| cmake -T v140,host=x64 -A Win32 -DCMAKE_INSTALL_PREFIX=install -DNCNN_VERSION_STRING="${{ needs.setup.outputs.VERSION }}" -Dprotobuf_DIR="$env:GITHUB_WORKSPACE\protobuf-install\x86\cmake" -DNCNN_VULKAN=ON -DNCNN_BUILD_EXAMPLES=OFF -DNCNN_BUILD_TOOLS=ON -DNCNN_BUILD_BENCHMARK=OFF -DNCNN_SHARED_LIB=ON .. | |||
| cmake --build . --config Release -j 2 | |||
| cmake --build . --config Release --target install | |||
| - name: build-x64 | |||
| run: | | |||
| $env:VULKAN_SDK="C:/VulkanSDK/1.3.236.0" | |||
| $env:Path+=";C:/VulkanSDK/1.3.236.0/Bin" | |||
| mkdir build-x64; cd build-x64 | |||
| cmake -T v140,host=x64 -A x64 -DCMAKE_INSTALL_PREFIX=install -DNCNN_VERSION_STRING="${{ needs.setup.outputs.VERSION }}" -Dprotobuf_DIR="$env:GITHUB_WORKSPACE\protobuf-install\x64\cmake" -DNCNN_VULKAN=ON -DNCNN_BUILD_EXAMPLES=OFF -DNCNN_BUILD_TOOLS=ON -DNCNN_BUILD_BENCHMARK=OFF -DNCNN_SHARED_LIB=ON .. | |||
| cmake --build . --config Release -j 2 | |||
| @@ -2746,22 +2612,14 @@ jobs: | |||
| cmake -T v141,host=x64 -A x64 -DCMAKE_INSTALL_PREFIX="$env:GITHUB_WORKSPACE\protobuf-install\x64" -Dprotobuf_BUILD_TESTS=OFF -Dprotobuf_MSVC_STATIC_RUNTIME=OFF ../cmake | |||
| cmake --build . --config Release -j 2 | |||
| cmake --build . --config Release --target install | |||
| - name: vulkansdk | |||
| run: | | |||
| Invoke-WebRequest -Uri https://sdk.lunarg.com/sdk/download/1.3.236.0/windows/VulkanSDK-1.3.236.0-Installer.exe?Human=true -OutFile VulkanSDK.exe | |||
| .\VulkanSDK.exe --accept-licenses --default-answer --confirm-command install com.lunarg.vulkan.32bit | |||
| - name: build-x86 | |||
| run: | | |||
| $env:VULKAN_SDK="C:/VulkanSDK/1.3.236.0" | |||
| $env:Path+=";C:/VulkanSDK/1.3.236.0/Bin" | |||
| mkdir build-x86; cd build-x86 | |||
| cmake -T v141,host=x64 -A Win32 -DCMAKE_INSTALL_PREFIX=install -DNCNN_VERSION_STRING="${{ needs.setup.outputs.VERSION }}" -Dprotobuf_DIR="$env:GITHUB_WORKSPACE\protobuf-install\x86\cmake" -DNCNN_VULKAN=ON -DNCNN_BUILD_EXAMPLES=OFF -DNCNN_BUILD_TOOLS=ON -DNCNN_BUILD_BENCHMARK=OFF .. | |||
| cmake --build . --config Release -j 2 | |||
| cmake --build . --config Release --target install | |||
| - name: build-x64 | |||
| run: | | |||
| $env:VULKAN_SDK="C:/VulkanSDK/1.3.236.0" | |||
| $env:Path+=";C:/VulkanSDK/1.3.236.0/Bin" | |||
| mkdir build-x64; cd build-x64 | |||
| cmake -T v141,host=x64 -A x64 -DCMAKE_INSTALL_PREFIX=install -DNCNN_VERSION_STRING="${{ needs.setup.outputs.VERSION }}" -Dprotobuf_DIR="$env:GITHUB_WORKSPACE\protobuf-install\x64\cmake" -DNCNN_VULKAN=ON -DNCNN_BUILD_EXAMPLES=OFF -DNCNN_BUILD_TOOLS=ON -DNCNN_BUILD_BENCHMARK=OFF .. | |||
| cmake --build . --config Release -j 2 | |||
| @@ -2811,22 +2669,14 @@ jobs: | |||
| cmake -T v141,host=x64 -A x64 -DCMAKE_INSTALL_PREFIX="$env:GITHUB_WORKSPACE\protobuf-install\x64" -Dprotobuf_BUILD_TESTS=OFF -Dprotobuf_MSVC_STATIC_RUNTIME=OFF ../cmake | |||
| cmake --build . --config Release -j 2 | |||
| cmake --build . --config Release --target install | |||
| - name: vulkansdk | |||
| run: | | |||
| Invoke-WebRequest -Uri https://sdk.lunarg.com/sdk/download/1.3.236.0/windows/VulkanSDK-1.3.236.0-Installer.exe?Human=true -OutFile VulkanSDK.exe | |||
| .\VulkanSDK.exe --accept-licenses --default-answer --confirm-command install com.lunarg.vulkan.32bit | |||
| - name: build-x86 | |||
| run: | | |||
| $env:VULKAN_SDK="C:/VulkanSDK/1.3.236.0" | |||
| $env:Path+=";C:/VulkanSDK/1.3.236.0/Bin" | |||
| mkdir build-x86; cd build-x86 | |||
| cmake -T v141,host=x64 -A Win32 -DCMAKE_INSTALL_PREFIX=install -DNCNN_VERSION_STRING="${{ needs.setup.outputs.VERSION }}" -Dprotobuf_DIR="$env:GITHUB_WORKSPACE\protobuf-install\x86\cmake" -DNCNN_VULKAN=ON -DNCNN_BUILD_EXAMPLES=OFF -DNCNN_BUILD_TOOLS=ON -DNCNN_BUILD_BENCHMARK=OFF -DNCNN_SHARED_LIB=ON .. | |||
| cmake --build . --config Release -j 2 | |||
| cmake --build . --config Release --target install | |||
| - name: build-x64 | |||
| run: | | |||
| $env:VULKAN_SDK="C:/VulkanSDK/1.3.236.0" | |||
| $env:Path+=";C:/VulkanSDK/1.3.236.0/Bin" | |||
| mkdir build-x64; cd build-x64 | |||
| cmake -T v141,host=x64 -A x64 -DCMAKE_INSTALL_PREFIX=install -DNCNN_VERSION_STRING="${{ needs.setup.outputs.VERSION }}" -Dprotobuf_DIR="$env:GITHUB_WORKSPACE\protobuf-install\x64\cmake" -DNCNN_VULKAN=ON -DNCNN_BUILD_EXAMPLES=OFF -DNCNN_BUILD_TOOLS=ON -DNCNN_BUILD_BENCHMARK=OFF -DNCNN_SHARED_LIB=ON .. | |||
| cmake --build . --config Release -j 2 | |||
| @@ -2876,22 +2726,14 @@ jobs: | |||
| cmake -DCMAKE_INSTALL_PREFIX="$env:GITHUB_WORKSPACE\protobuf-install\x64" -Dprotobuf_BUILD_TESTS=OFF -Dprotobuf_MSVC_STATIC_RUNTIME=OFF ../cmake | |||
| cmake --build . --config Release -j 2 | |||
| cmake --build . --config Release --target install | |||
| - name: vulkansdk | |||
| run: | | |||
| Invoke-WebRequest -Uri https://sdk.lunarg.com/sdk/download/1.3.236.0/windows/VulkanSDK-1.3.236.0-Installer.exe?Human=true -OutFile VulkanSDK.exe | |||
| .\VulkanSDK.exe --accept-licenses --default-answer --confirm-command install com.lunarg.vulkan.32bit | |||
| - name: build-x86 | |||
| run: | | |||
| $env:VULKAN_SDK="C:/VulkanSDK/1.3.236.0" | |||
| $env:Path+=";C:/VulkanSDK/1.3.236.0/Bin" | |||
| mkdir build-x86; cd build-x86 | |||
| cmake -T v142,host=x64 -A Win32 -DCMAKE_INSTALL_PREFIX=install -DNCNN_VERSION_STRING="${{ needs.setup.outputs.VERSION }}" -Dprotobuf_DIR="$env:GITHUB_WORKSPACE\protobuf-install\x86\cmake" -DNCNN_VULKAN=ON -DNCNN_BUILD_EXAMPLES=OFF -DNCNN_BUILD_TOOLS=ON -DNCNN_BUILD_BENCHMARK=OFF .. | |||
| cmake --build . --config Release -j 2 | |||
| cmake --build . --config Release --target install | |||
| - name: build-x64 | |||
| run: | | |||
| $env:VULKAN_SDK="C:/VulkanSDK/1.3.236.0" | |||
| $env:Path+=";C:/VulkanSDK/1.3.236.0/Bin" | |||
| mkdir build-x64; cd build-x64 | |||
| cmake -DCMAKE_INSTALL_PREFIX=install -DNCNN_VERSION_STRING="${{ needs.setup.outputs.VERSION }}" -Dprotobuf_DIR="$env:GITHUB_WORKSPACE\protobuf-install\x64\cmake" -DNCNN_VULKAN=ON -DNCNN_BUILD_EXAMPLES=OFF -DNCNN_BUILD_TOOLS=ON -DNCNN_BUILD_BENCHMARK=OFF .. | |||
| cmake --build . --config Release -j 2 | |||
| @@ -2899,13 +2741,13 @@ jobs: | |||
| - name: build-arm | |||
| run: | | |||
| mkdir build-arm; cd build-arm | |||
| cmake -T v142,host=x64 -A arm -DCMAKE_INSTALL_PREFIX=install -DNCNN_VERSION_STRING="${{ needs.setup.outputs.VERSION }}" -DNCNN_BUILD_EXAMPLES=OFF -DNCNN_BUILD_TOOLS=ON -DNCNN_BUILD_BENCHMARK=OFF .. | |||
| cmake -T v142,host=x64 -A arm -DCMAKE_INSTALL_PREFIX=install -DNCNN_VERSION_STRING="${{ needs.setup.outputs.VERSION }}" -DNCNN_VULKAN=ON -DNCNN_BUILD_EXAMPLES=OFF -DNCNN_BUILD_TOOLS=ON -DNCNN_BUILD_BENCHMARK=OFF .. | |||
| cmake --build . --config Release -j 2 | |||
| cmake --build . --config Release --target install | |||
| - name: build-arm64 | |||
| run: | | |||
| mkdir build-arm64; cd build-arm64 | |||
| cmake -T v142,host=x64 -A arm64 -DCMAKE_INSTALL_PREFIX=install -DNCNN_VERSION_STRING="${{ needs.setup.outputs.VERSION }}" -DNCNN_BUILD_EXAMPLES=OFF -DNCNN_BUILD_TOOLS=ON -DNCNN_BUILD_BENCHMARK=OFF .. | |||
| cmake -T v142,host=x64 -A arm64 -DCMAKE_INSTALL_PREFIX=install -DNCNN_VERSION_STRING="${{ needs.setup.outputs.VERSION }}" -DNCNN_VULKAN=ON -DNCNN_BUILD_EXAMPLES=OFF -DNCNN_BUILD_TOOLS=ON -DNCNN_BUILD_BENCHMARK=OFF .. | |||
| cmake --build . --config Release -j 2 | |||
| cmake --build . --config Release --target install | |||
| - name: package | |||
| @@ -2957,22 +2799,14 @@ jobs: | |||
| cmake -DCMAKE_INSTALL_PREFIX="$env:GITHUB_WORKSPACE\protobuf-install\x64" -Dprotobuf_BUILD_TESTS=OFF -Dprotobuf_MSVC_STATIC_RUNTIME=OFF ../cmake | |||
| cmake --build . --config Release -j 2 | |||
| cmake --build . --config Release --target install | |||
| - name: vulkansdk | |||
| run: | | |||
| Invoke-WebRequest -Uri https://sdk.lunarg.com/sdk/download/1.3.236.0/windows/VulkanSDK-1.3.236.0-Installer.exe?Human=true -OutFile VulkanSDK.exe | |||
| .\VulkanSDK.exe --accept-licenses --default-answer --confirm-command install com.lunarg.vulkan.32bit | |||
| - name: build-x86 | |||
| run: | | |||
| $env:VULKAN_SDK="C:/VulkanSDK/1.3.236.0" | |||
| $env:Path+=";C:/VulkanSDK/1.3.236.0/Bin" | |||
| mkdir build-x86; cd build-x86 | |||
| cmake -T v142,host=x64 -A Win32 -DCMAKE_INSTALL_PREFIX=install -DNCNN_VERSION_STRING="${{ needs.setup.outputs.VERSION }}" -Dprotobuf_DIR="$env:GITHUB_WORKSPACE\protobuf-install\x86\cmake" -DNCNN_VULKAN=ON -DNCNN_BUILD_EXAMPLES=OFF -DNCNN_BUILD_TOOLS=ON -DNCNN_BUILD_BENCHMARK=OFF -DNCNN_SHARED_LIB=ON .. | |||
| cmake --build . --config Release -j 2 | |||
| cmake --build . --config Release --target install | |||
| - name: build-x64 | |||
| run: | | |||
| $env:VULKAN_SDK="C:/VulkanSDK/1.3.236.0" | |||
| $env:Path+=";C:/VulkanSDK/1.3.236.0/Bin" | |||
| mkdir build-x64; cd build-x64 | |||
| cmake -DCMAKE_INSTALL_PREFIX=install -DNCNN_VERSION_STRING="${{ needs.setup.outputs.VERSION }}" -Dprotobuf_DIR="$env:GITHUB_WORKSPACE\protobuf-install\x64\cmake" -DNCNN_VULKAN=ON -DNCNN_BUILD_EXAMPLES=OFF -DNCNN_BUILD_TOOLS=ON -DNCNN_BUILD_BENCHMARK=OFF -DNCNN_SHARED_LIB=ON .. | |||
| cmake --build . --config Release -j 2 | |||
| @@ -2980,13 +2814,13 @@ jobs: | |||
| - name: build-arm | |||
| run: | | |||
| mkdir build-arm; cd build-arm | |||
| cmake -T v142,host=x64 -A arm -DCMAKE_INSTALL_PREFIX=install -DNCNN_VERSION_STRING="${{ needs.setup.outputs.VERSION }}" -DNCNN_BUILD_EXAMPLES=OFF -DNCNN_BUILD_TOOLS=ON -DNCNN_BUILD_BENCHMARK=OFF -DNCNN_SHARED_LIB=ON .. | |||
| cmake -T v142,host=x64 -A arm -DCMAKE_INSTALL_PREFIX=install -DNCNN_VERSION_STRING="${{ needs.setup.outputs.VERSION }}" -DNCNN_VULKAN=ON -DNCNN_BUILD_EXAMPLES=OFF -DNCNN_BUILD_TOOLS=ON -DNCNN_BUILD_BENCHMARK=OFF -DNCNN_SHARED_LIB=ON .. | |||
| cmake --build . --config Release -j 2 | |||
| cmake --build . --config Release --target install | |||
| - name: build-arm64 | |||
| run: | | |||
| mkdir build-arm64; cd build-arm64 | |||
| cmake -T v142,host=x64 -A arm64 -DCMAKE_INSTALL_PREFIX=install -DNCNN_VERSION_STRING="${{ needs.setup.outputs.VERSION }}" -DNCNN_BUILD_EXAMPLES=OFF -DNCNN_BUILD_TOOLS=ON -DNCNN_BUILD_BENCHMARK=OFF -DNCNN_SHARED_LIB=ON .. | |||
| cmake -T v142,host=x64 -A arm64 -DCMAKE_INSTALL_PREFIX=install -DNCNN_VERSION_STRING="${{ needs.setup.outputs.VERSION }}" -DNCNN_VULKAN=ON -DNCNN_BUILD_EXAMPLES=OFF -DNCNN_BUILD_TOOLS=ON -DNCNN_BUILD_BENCHMARK=OFF -DNCNN_SHARED_LIB=ON .. | |||
| cmake --build . --config Release -j 2 | |||
| cmake --build . --config Release --target install | |||
| - name: package | |||
| @@ -3038,22 +2872,14 @@ jobs: | |||
| cmake -DCMAKE_INSTALL_PREFIX="$env:GITHUB_WORKSPACE\protobuf-install\x64" -Dprotobuf_BUILD_TESTS=OFF -Dprotobuf_MSVC_STATIC_RUNTIME=OFF ../cmake | |||
| cmake --build . --config Release -j 2 | |||
| cmake --build . --config Release --target install | |||
| - name: vulkansdk | |||
| run: | | |||
| Invoke-WebRequest -Uri https://sdk.lunarg.com/sdk/download/1.3.236.0/windows/VulkanSDK-1.3.236.0-Installer.exe?Human=true -OutFile VulkanSDK.exe | |||
| .\VulkanSDK.exe --accept-licenses --default-answer --confirm-command install com.lunarg.vulkan.32bit | |||
| - name: build-x86 | |||
| run: | | |||
| $env:VULKAN_SDK="C:/VulkanSDK/1.3.236.0" | |||
| $env:Path+=";C:/VulkanSDK/1.3.236.0/Bin" | |||
| mkdir build-x86; cd build-x86 | |||
| cmake -T v143,host=x64 -A Win32 -DCMAKE_INSTALL_PREFIX=install -DNCNN_VERSION_STRING="${{ needs.setup.outputs.VERSION }}" -Dprotobuf_DIR="$env:GITHUB_WORKSPACE\protobuf-install\x86\cmake" -DNCNN_VULKAN=ON -DNCNN_BUILD_EXAMPLES=OFF -DNCNN_BUILD_TOOLS=ON -DNCNN_BUILD_BENCHMARK=OFF .. | |||
| cmake --build . --config Release -j 2 | |||
| cmake --build . --config Release --target install | |||
| - name: build-x64 | |||
| run: | | |||
| $env:VULKAN_SDK="C:/VulkanSDK/1.3.236.0" | |||
| $env:Path+=";C:/VulkanSDK/1.3.236.0/Bin" | |||
| mkdir build-x64; cd build-x64 | |||
| cmake -DCMAKE_INSTALL_PREFIX=install -DNCNN_VERSION_STRING="${{ needs.setup.outputs.VERSION }}" -Dprotobuf_DIR="$env:GITHUB_WORKSPACE\protobuf-install\x64\cmake" -DNCNN_VULKAN=ON -DNCNN_BUILD_EXAMPLES=OFF -DNCNN_BUILD_TOOLS=ON -DNCNN_BUILD_BENCHMARK=OFF .. | |||
| cmake --build . --config Release -j 2 | |||
| @@ -3061,13 +2887,13 @@ jobs: | |||
| - name: build-arm | |||
| run: | | |||
| mkdir build-arm; cd build-arm | |||
| cmake -T v143,host=x64 -A arm -DCMAKE_INSTALL_PREFIX=install -DNCNN_VERSION_STRING="${{ needs.setup.outputs.VERSION }}" -DNCNN_BUILD_EXAMPLES=OFF -DNCNN_BUILD_TOOLS=ON -DNCNN_BUILD_BENCHMARK=OFF .. | |||
| cmake -T v143,host=x64 -A arm -DCMAKE_INSTALL_PREFIX=install -DNCNN_VERSION_STRING="${{ needs.setup.outputs.VERSION }}" -DNCNN_VULKAN=ON -DNCNN_BUILD_EXAMPLES=OFF -DNCNN_BUILD_TOOLS=ON -DNCNN_BUILD_BENCHMARK=OFF .. | |||
| cmake --build . --config Release -j 2 | |||
| cmake --build . --config Release --target install | |||
| - name: build-arm64 | |||
| run: | | |||
| mkdir build-arm64; cd build-arm64 | |||
| cmake -T v143,host=x64 -A arm64 -DCMAKE_INSTALL_PREFIX=install -DNCNN_VERSION_STRING="${{ needs.setup.outputs.VERSION }}" -DNCNN_BUILD_EXAMPLES=OFF -DNCNN_BUILD_TOOLS=ON -DNCNN_BUILD_BENCHMARK=OFF .. | |||
| cmake -T v143,host=x64 -A arm64 -DCMAKE_INSTALL_PREFIX=install -DNCNN_VERSION_STRING="${{ needs.setup.outputs.VERSION }}" -DNCNN_VULKAN=ON -DNCNN_BUILD_EXAMPLES=OFF -DNCNN_BUILD_TOOLS=ON -DNCNN_BUILD_BENCHMARK=OFF .. | |||
| cmake --build . --config Release -j 2 | |||
| cmake --build . --config Release --target install | |||
| - name: package | |||
| @@ -3119,22 +2945,14 @@ jobs: | |||
| cmake -DCMAKE_INSTALL_PREFIX="$env:GITHUB_WORKSPACE\protobuf-install\x64" -Dprotobuf_BUILD_TESTS=OFF -Dprotobuf_MSVC_STATIC_RUNTIME=OFF ../cmake | |||
| cmake --build . --config Release -j 2 | |||
| cmake --build . --config Release --target install | |||
| - name: vulkansdk | |||
| run: | | |||
| Invoke-WebRequest -Uri https://sdk.lunarg.com/sdk/download/1.3.236.0/windows/VulkanSDK-1.3.236.0-Installer.exe?Human=true -OutFile VulkanSDK.exe | |||
| .\VulkanSDK.exe --accept-licenses --default-answer --confirm-command install com.lunarg.vulkan.32bit | |||
| - name: build-x86 | |||
| run: | | |||
| $env:VULKAN_SDK="C:/VulkanSDK/1.3.236.0" | |||
| $env:Path+=";C:/VulkanSDK/1.3.236.0/Bin" | |||
| mkdir build-x86; cd build-x86 | |||
| cmake -T v143,host=x64 -A Win32 -DCMAKE_INSTALL_PREFIX=install -DNCNN_VERSION_STRING="${{ needs.setup.outputs.VERSION }}" -Dprotobuf_DIR="$env:GITHUB_WORKSPACE\protobuf-install\x86\cmake" -DNCNN_VULKAN=ON -DNCNN_BUILD_EXAMPLES=OFF -DNCNN_BUILD_TOOLS=ON -DNCNN_BUILD_BENCHMARK=OFF -DNCNN_SHARED_LIB=ON .. | |||
| cmake --build . --config Release -j 2 | |||
| cmake --build . --config Release --target install | |||
| - name: build-x64 | |||
| run: | | |||
| $env:VULKAN_SDK="C:/VulkanSDK/1.3.236.0" | |||
| $env:Path+=";C:/VulkanSDK/1.3.236.0/Bin" | |||
| mkdir build-x64; cd build-x64 | |||
| cmake -DCMAKE_INSTALL_PREFIX=install -DNCNN_VERSION_STRING="${{ needs.setup.outputs.VERSION }}" -Dprotobuf_DIR="$env:GITHUB_WORKSPACE\protobuf-install\x64\cmake" -DNCNN_VULKAN=ON -DNCNN_BUILD_EXAMPLES=OFF -DNCNN_BUILD_TOOLS=ON -DNCNN_BUILD_BENCHMARK=OFF -DNCNN_SHARED_LIB=ON .. | |||
| cmake --build . --config Release -j 2 | |||
| @@ -3142,13 +2960,13 @@ jobs: | |||
| - name: build-arm | |||
| run: | | |||
| mkdir build-arm; cd build-arm | |||
| cmake -T v143,host=x64 -A arm -DCMAKE_INSTALL_PREFIX=install -DNCNN_VERSION_STRING="${{ needs.setup.outputs.VERSION }}" -DNCNN_BUILD_EXAMPLES=OFF -DNCNN_BUILD_TOOLS=ON -DNCNN_BUILD_BENCHMARK=OFF -DNCNN_SHARED_LIB=ON .. | |||
| cmake -T v143,host=x64 -A arm -DCMAKE_INSTALL_PREFIX=install -DNCNN_VERSION_STRING="${{ needs.setup.outputs.VERSION }}" -DNCNN_VULKAN=ON -DNCNN_BUILD_EXAMPLES=OFF -DNCNN_BUILD_TOOLS=ON -DNCNN_BUILD_BENCHMARK=OFF -DNCNN_SHARED_LIB=ON .. | |||
| cmake --build . --config Release -j 2 | |||
| cmake --build . --config Release --target install | |||
| - name: build-arm64 | |||
| run: | | |||
| mkdir build-arm64; cd build-arm64 | |||
| cmake -T v143,host=x64 -A arm64 -DCMAKE_INSTALL_PREFIX=install -DNCNN_VERSION_STRING="${{ needs.setup.outputs.VERSION }}" -DNCNN_BUILD_EXAMPLES=OFF -DNCNN_BUILD_TOOLS=ON -DNCNN_BUILD_BENCHMARK=OFF -DNCNN_SHARED_LIB=ON .. | |||
| cmake -T v143,host=x64 -A arm64 -DCMAKE_INSTALL_PREFIX=install -DNCNN_VERSION_STRING="${{ needs.setup.outputs.VERSION }}" -DNCNN_VULKAN=ON -DNCNN_BUILD_EXAMPLES=OFF -DNCNN_BUILD_TOOLS=ON -DNCNN_BUILD_BENCHMARK=OFF -DNCNN_SHARED_LIB=ON .. | |||
| cmake --build . --config Release -j 2 | |||
| cmake --build . --config Release --target install | |||
| - name: package | |||
| @@ -37,7 +37,6 @@ jobs: | |||
| CXX: g++ | |||
| LD_LIBRARY_PATH: /data/action/install/lib64 | |||
| run: | | |||
| export VULKAN_SDK=/data/action/osd/1.2.189.0/x86_64 | |||
| mkdir build && cd build | |||
| cmake -DCMAKE_BUILD_TYPE=debug -DNCNN_VULKAN=ON -DNCNN_COVERAGE=ON -DNCNN_RUNTIME_CPU=OFF -DNCNN_AVX2=ON -DNCNN_XOP=OFF -DNCNN_AVXVNNI=OFF -DNCNN_AVX512=ON -DNCNN_AVX512VNNI=ON -DNCNN_OPENMP=OFF -DNCNN_BUILD_TOOLS=OFF -DNCNN_BUILD_EXAMPLES=OFF -DNCNN_BUILD_TESTS=ON .. | |||
| cmake --build . -j 4 | |||
| @@ -48,7 +48,7 @@ jobs: | |||
| - name: build | |||
| run: | | |||
| mkdir build; cd build | |||
| cmake -T ${{ matrix.toolset-version }},host=x64 -A arm -DNCNN_BUILD_TESTS=ON -DNCNN_BUILD_TOOLS=OFF -DNCNN_BUILD_EXAMPLES=OFF .. | |||
| cmake -T ${{ matrix.toolset-version }},host=x64 -A arm -DNCNN_BUILD_TESTS=OFF -DNCNN_BUILD_TOOLS=OFF -DNCNN_BUILD_EXAMPLES=OFF .. | |||
| cmake --build . --config Release -j 2 | |||
| - name: build-shared | |||
| run: | | |||
| @@ -0,0 +1,59 @@ | |||
| name: windows-arm-gpu | |||
| on: | |||
| push: | |||
| branches: [master] | |||
| paths: | |||
| - '.github/workflows/windows-arm-gpu.yml' | |||
| - 'CMakeLists.txt' | |||
| - 'cmake/**' | |||
| - 'src/*' | |||
| - 'src/layer/*' | |||
| - 'src/layer/arm/**' | |||
| - 'src/layer/vulkan/**' | |||
| pull_request: | |||
| branches: [master] | |||
| paths: | |||
| - '.github/workflows/windows-arm-gpu.yml' | |||
| - 'CMakeLists.txt' | |||
| - 'cmake/**' | |||
| - 'src/*' | |||
| - 'src/layer/*' | |||
| - 'src/layer/arm/**' | |||
| - 'src/layer/vulkan/**' | |||
| concurrency: | |||
| group: windows-arm-gpu-${{ github.ref }} | |||
| cancel-in-progress: true | |||
| permissions: | |||
| contents: read | |||
| jobs: | |||
| windows: | |||
| name: ${{ matrix.vs-version }} | |||
| runs-on: ${{ matrix.os }} | |||
| strategy: | |||
| matrix: | |||
| include: | |||
| - vs-version: vs2019 | |||
| toolset-version: v142 | |||
| os: windows-2022 | |||
| - vs-version: vs2022 | |||
| toolset-version: v143 | |||
| os: windows-2022 | |||
| env: | |||
| UseMultiToolTask: true | |||
| steps: | |||
| - uses: actions/checkout@v4 | |||
| with: | |||
| submodules: true | |||
| - name: build | |||
| run: | | |||
| mkdir build; cd build | |||
| cmake -T ${{ matrix.toolset-version }},host=x64 -A arm -DNCNN_VULKAN=ON -DNCNN_BUILD_TESTS=OFF -DNCNN_BUILD_TOOLS=OFF -DNCNN_BUILD_EXAMPLES=OFF .. | |||
| cmake --build . --config Release -j 2 | |||
| - name: build-shared | |||
| run: | | |||
| mkdir build-shared; cd build-shared | |||
| cmake -T ${{ matrix.toolset-version }},host=x64 -A arm -DNCNN_VULKAN=ON -DNCNN_BUILD_TOOLS=OFF -DNCNN_BUILD_EXAMPLES=OFF -DNCNN_SHARED_LIB=ON .. | |||
| cmake --build . --config Release -j 2 | |||
| @@ -48,7 +48,7 @@ jobs: | |||
| - name: build | |||
| run: | | |||
| mkdir build; cd build | |||
| cmake -T ${{ matrix.toolset-version }},host=x64 -A arm64 -DNCNN_BUILD_TESTS=ON -DNCNN_BUILD_TOOLS=OFF -DNCNN_BUILD_EXAMPLES=OFF .. | |||
| cmake -T ${{ matrix.toolset-version }},host=x64 -A arm64 -DNCNN_BUILD_TESTS=OFF -DNCNN_BUILD_TOOLS=OFF -DNCNN_BUILD_EXAMPLES=OFF .. | |||
| cmake --build . --config Release -j 2 | |||
| - name: build-shared | |||
| run: | | |||
| @@ -0,0 +1,59 @@ | |||
| name: windows-arm64-gpu | |||
| on: | |||
| push: | |||
| branches: [master] | |||
| paths: | |||
| - '.github/workflows/windows-arm64-gpu.yml' | |||
| - 'CMakeLists.txt' | |||
| - 'cmake/**' | |||
| - 'src/*' | |||
| - 'src/layer/*' | |||
| - 'src/layer/arm/**' | |||
| - 'src/layer/vulkan/**' | |||
| pull_request: | |||
| branches: [master] | |||
| paths: | |||
| - '.github/workflows/windows-arm64-gpu.yml' | |||
| - 'CMakeLists.txt' | |||
| - 'cmake/**' | |||
| - 'src/*' | |||
| - 'src/layer/*' | |||
| - 'src/layer/arm/**' | |||
| - 'src/layer/vulkan/**' | |||
| concurrency: | |||
| group: windows-arm64-gpu-${{ github.ref }} | |||
| cancel-in-progress: true | |||
| permissions: | |||
| contents: read | |||
| jobs: | |||
| windows: | |||
| name: ${{ matrix.vs-version }} | |||
| runs-on: ${{ matrix.os }} | |||
| strategy: | |||
| matrix: | |||
| include: | |||
| - vs-version: vs2019 | |||
| toolset-version: v142 | |||
| os: windows-2022 | |||
| - vs-version: vs2022 | |||
| toolset-version: v143 | |||
| os: windows-2022 | |||
| env: | |||
| UseMultiToolTask: true | |||
| steps: | |||
| - uses: actions/checkout@v4 | |||
| with: | |||
| submodules: true | |||
| - name: build | |||
| run: | | |||
| mkdir build; cd build | |||
| cmake -T ${{ matrix.toolset-version }},host=x64 -A arm64 -DNCNN_VULKAN=ON -DNCNN_BUILD_TESTS=OFF -DNCNN_BUILD_TOOLS=OFF -DNCNN_BUILD_EXAMPLES=OFF .. | |||
| cmake --build . --config Release -j 2 | |||
| - name: build-shared | |||
| run: | | |||
| mkdir build-shared; cd build-shared | |||
| cmake -T ${{ matrix.toolset-version }},host=x64 -A arm64 -DNCNN_VULKAN=ON -DNCNN_BUILD_TOOLS=OFF -DNCNN_BUILD_EXAMPLES=OFF -DNCNN_SHARED_LIB=ON .. | |||
| cmake --build . --config Release -j 2 | |||
| @@ -78,10 +78,6 @@ jobs: | |||
| mkdir build-${{ matrix.vs-version }}; cd build-${{ matrix.vs-version }}; cmake -T ${{ matrix.toolset-version }},host=x64 -A x64 -DCMAKE_INSTALL_PREFIX="$env:GITHUB_WORKSPACE\protobuf-install" -Dprotobuf_BUILD_TESTS=OFF -Dprotobuf_MSVC_STATIC_RUNTIME=OFF -DNCNN_BUILD_TESTS=ON ../cmake | |||
| cmake --build . --config Release -j 2 | |||
| cmake --build . --config Release --target install | |||
| - name: vulkansdk | |||
| run: | | |||
| Invoke-WebRequest -Uri https://sdk.lunarg.com/sdk/download/1.3.236.0/windows/VulkanSDK-1.3.236.0-Installer.exe?Human=true -OutFile VulkanSDK.exe | |||
| .\VulkanSDK.exe --accept-licenses --default-answer --confirm-command install | |||
| - name: cache-swiftshader | |||
| if: matrix.vs-version != 'vs2015' | |||
| id: cache-swiftshader | |||
| @@ -112,8 +108,6 @@ jobs: | |||
| Copy-Item -Path "Windows\*" -Destination "$env:GITHUB_WORKSPACE\swiftshader-install" | |||
| - name: build | |||
| run: | | |||
| $env:VULKAN_SDK="C:/VulkanSDK/1.3.236.0" | |||
| $env:Path+=";C:/VulkanSDK/1.3.236.0/Bin" | |||
| mkdir build; cd build | |||
| cmake -T ${{ matrix.toolset-version }},host=x64 -A x64 -Dprotobuf_DIR="$env:GITHUB_WORKSPACE\protobuf-install\cmake" -DNCNN_VULKAN=ON -DNCNN_BUILD_TESTS=ON .. | |||
| cmake --build . --config Release -j 2 | |||
| @@ -122,12 +116,9 @@ jobs: | |||
| run: | | |||
| echo "[Processor]`nThreadCount=1`n" > build/tests/Release/SwiftShader.ini | |||
| Copy-Item -Path "$env:GITHUB_WORKSPACE\swiftshader-install\vulkan-1.dll" -Destination 'build\tests' | |||
| $env:Path+=";C:/VulkanSDK/1.3.236.0/Bin" | |||
| cd build; ctest -C Release --output-on-failure -j 2 | |||
| - name: build-shared | |||
| run: | | |||
| $env:VULKAN_SDK="C:/VulkanSDK/1.3.236.0" | |||
| $env:Path+=";C:/VulkanSDK/1.3.236.0/Bin" | |||
| mkdir build-shared; cd build-shared | |||
| cmake -T ${{ matrix.toolset-version }},host=x64 -A x64 -Dprotobuf_DIR="$env:GITHUB_WORKSPACE\protobuf-install\cmake" -DNCNN_VULKAN=ON -DNCNN_SHARED_LIB=ON .. | |||
| cmake --build . --config Release -j 2 | |||
| @@ -0,0 +1,67 @@ | |||
| name: windows-x86-gpu | |||
| on: | |||
| push: | |||
| branches: [master] | |||
| paths: | |||
| - '.github/workflows/windows-x86-gpu.yml' | |||
| - 'CMakeLists.txt' | |||
| - 'cmake/**' | |||
| - 'src/*' | |||
| - 'src/layer/*' | |||
| - 'src/layer/x86/**' | |||
| - 'src/layer/vulkan/**' | |||
| pull_request: | |||
| branches: [master] | |||
| paths: | |||
| - '.github/workflows/windows-x86-gpu.yml' | |||
| - 'CMakeLists.txt' | |||
| - 'cmake/**' | |||
| - 'src/*' | |||
| - 'src/layer/*' | |||
| - 'src/layer/x86/**' | |||
| - 'src/layer/vulkan/**' | |||
| concurrency: | |||
| group: windows-x86-gpu-${{ github.ref }} | |||
| cancel-in-progress: true | |||
| permissions: | |||
| contents: read | |||
| jobs: | |||
| windows-x86: | |||
| name: ${{ matrix.vs-version }} | |||
| runs-on: ${{ matrix.os }} | |||
| strategy: | |||
| matrix: | |||
| include: | |||
| - vs-version: vs2015 | |||
| toolset-version: v140 | |||
| os: windows-2019 | |||
| - vs-version: vs2017 | |||
| toolset-version: v141 | |||
| os: windows-2019 | |||
| - vs-version: vs2019 | |||
| toolset-version: v142 | |||
| os: windows-2022 | |||
| - vs-version: vs2022 | |||
| toolset-version: v143 | |||
| os: windows-2022 | |||
| env: | |||
| UseMultiToolTask: true | |||
| steps: | |||
| - uses: actions/checkout@v4 | |||
| with: | |||
| submodules: true | |||
| - name: build | |||
| run: | | |||
| mkdir build; cd build | |||
| cmake -T ${{ matrix.toolset-version }},host=x64 -A Win32 -DNCNN_VULKAN=ON -DNCNN_BUILD_TESTS=OFF -DNCNN_BUILD_TOOLS=OFF -DNCNN_BUILD_EXAMPLES=OFF .. | |||
| cmake --build . --config Release -j 2 | |||
| - name: build-shared | |||
| run: | | |||
| mkdir build-shared; cd build-shared | |||
| cmake -T ${{ matrix.toolset-version }},host=x64 -A Win32 -DNCNN_VULKAN=ON -DNCNN_BUILD_TOOLS=OFF -DNCNN_BUILD_EXAMPLES=OFF -DNCNN_SHARED_LIB=ON .. | |||
| cmake --build . --config Release -j 2 | |||
| @@ -67,6 +67,7 @@ option(NCNN_PIXEL_AFFINE "warp affine image pixel" ON) | |||
| option(NCNN_PIXEL_DRAWING "draw basic figure and text" ON) | |||
| option(NCNN_CMAKE_VERBOSE "print verbose cmake messages" OFF) | |||
| option(NCNN_VULKAN "vulkan compute support" OFF) | |||
| option(NCNN_SIMPLEVK "minimal in-house vulkan loader" ON) | |||
| option(NCNN_SYSTEM_GLSLANG "use system glslang library" OFF) | |||
| option(NCNN_RUNTIME_CPU "runtime dispatch cpu routines" ON) | |||
| option(NCNN_DISABLE_PIC "disable position-independent code" OFF) | |||
| @@ -3,6 +3,7 @@ set(NCNN_THREADS @NCNN_THREADS@) | |||
| set(NCNN_VULKAN @NCNN_VULKAN@) | |||
| set(NCNN_SHARED_LIB @NCNN_SHARED_LIB@) | |||
| set(NCNN_SYSTEM_GLSLANG @NCNN_SYSTEM_GLSLANG@) | |||
| set(NCNN_SIMPLEVK @NCNN_SIMPLEVK@) | |||
| if(NCNN_OPENMP) | |||
| find_package(OpenMP) | |||
| @@ -15,7 +16,9 @@ if(NCNN_THREADS) | |||
| endif() | |||
| if(NCNN_VULKAN) | |||
| find_package(Vulkan REQUIRED) | |||
| if(NOT NCNN_SIMPLEVK) | |||
| find_package(Vulkan REQUIRED) | |||
| endif() | |||
| if(NOT NCNN_SHARED_LIB) | |||
| if(NCNN_SYSTEM_GLSLANG) | |||
| @@ -35,7 +38,6 @@ if(NCNN_VULKAN) | |||
| set(glslang_DIR "${CMAKE_CURRENT_LIST_DIR}/../../../@CMAKE_INSTALL_LIBDIR@/cmake/glslang") | |||
| find_package(glslang QUIET) | |||
| endif() | |||
| endif() | |||
| endif() | |||
| @@ -12,6 +12,9 @@ endif() | |||
| # remove whitespace | |||
| string(REGEX REPLACE "\n +" "\n" comp_data "${comp_data}") | |||
| # remove empty line | |||
| string(REGEX REPLACE "\n\n" "\n" comp_data "${comp_data}") | |||
| get_filename_component(SHADER_SRC_NAME_WE ${SHADER_SRC} NAME_WE) | |||
| # text to hex | |||
| @@ -0,0 +1,133 @@ | |||
| # ncnn vulkan driver loader | |||
| ncnn turns on the ```NCNN_SIMPLEVK``` cmake option by default, when ```NCNN_VULKAN``` is enabled | |||
| simplevk is ncnn's built-in vulkan loader. It provides vulkan function declarations and function entries that meet ncnn's needs. It allows the use and compilation of vulkan-related codes without relying on vulkan-sdk. It can dynamically load the vulkan runtime library at runtime or directly load the graphics card driver. vulkan driver. When distributing ncnn applications, it is not required that the target system has a vulkan driver. | |||
| Usually you don't need to care about how simplevk loads the vulkan driver, because ncnn will automatically load and initialize when using vulkan related functions. It is sufficient to set the `Option` switch before loading the model. | |||
| Typical code | |||
| ```cpp | |||
| ncnn::Net net; | |||
| net.opt.use_vulkan_compute = true; | |||
| net.load_param("model.param"); | |||
| net.load_param("model.bin"); | |||
| ``` | |||
| Using the in-house vulkan loader instead of the standard libvulkan has the following benefits | |||
| - Can compile ncnn vulkan code without installing vulkan-sdk | |||
| - Can deploy and distribute applications without libvulkan linkage | |||
| - Can load external vulkan driver instead of system driver | |||
| - Can directly load android hal module | |||
| - Can directly load graphics card driver files via NCNN_VULKAN_DRIVER env | |||
| - Able to actively search for graphics card driver files in the system and load them | |||
| - Can compile android libraries supporting vulkan under the platform of android-api<24 | |||
| ## Create and manage gpu context | |||
| ```cpp | |||
| int create_gpu_instance(const char* driver_path = 0); | |||
| void destroy_gpu_instance(); | |||
| VkInstance get_gpu_instance(); | |||
| ``` | |||
| ## Loading order | |||
| ``` | |||
| If driver_path == 0 | |||
| 1a from env ```VK_ICD_FILENAMES``` | |||
| 1b from env ```NCNN_VULKAN_DRIVER``` | |||
| If driver_path != 0 | |||
| 1 from specified driver_path | |||
| 2 from vulkan-1.dll / libvulkan.so / libvulkan.dylib in system | |||
| 3 search driver by name nvoglv64.dll / amdvlk64.dll / libGLX_nvidia.so.0 .... and load it | |||
| ``` | |||
| ## Load from system vulkan library or graphics driver | |||
| This is the default behavior and it should work on most systems | |||
| sample usage | |||
| ```cpp | |||
| int ret = create_gpu_instance(); | |||
| ``` | |||
| Load from system-installed libvulkan | |||
| #### Windows | |||
| vulkan-1.dll | |||
| #### Linux Android | |||
| libvulkan.so | |||
| #### macOS iOS and other APPLE platforms | |||
| Requires static meltvk driver linking and should always succeed | |||
| If failed, it will try to find graphics driver object and load it | |||
| #### Windows | |||
| search ```C:\Windows\System32\DriverStore\FileRepository``` for | |||
| - nvoglv64.dll | |||
| - amdvlk64.dll | |||
| - igvk64.dll | |||
| for 32bit applications | |||
| - nvoglv32.dll | |||
| - amdvlk32.dll | |||
| - igvk32.dll | |||
| #### Linux | |||
| `dlopen()` search for | |||
| - libGLX_nvidia.so.0 | |||
| - libvulkan_radeon.so | |||
| - libvulkan_intel.so | |||
| - libMaliVulkan.so.1 | |||
| - libVK_IMG.so | |||
| #### Android | |||
| for 64bit applications | |||
| - /vendor/lib64/hw/vulkan.adreno.so | |||
| - /vendor/lib64/egl/libGLES_mali.so | |||
| for 32bit applications | |||
| - /vendor/lib/hw/vulkan.adreno.so | |||
| - /vendor/lib/egl/libGLES_mali.so | |||
| ## Load from driver_path | |||
| for advanced developer | |||
| sample usage | |||
| ```cpp | |||
| int ret = create_gpu_instance("libvulkan.so"); | |||
| int ret = create_gpu_instance("/usr/lib64/libvulkan_radeon.so"); | |||
| int ret = create_gpu_instance("/vendor/lib64/hw/vulkan.adreno.so"); | |||
| int ret = create_gpu_instance("/data/local/tmp/vulkan.ad07XX.so"); | |||
| ``` | |||
| ## Load from env VK_ICD_FILENAMES | |||
| for debug purpose | |||
| sample usage | |||
| ```sh | |||
| export VK_ICD_FILENAMES=./vk_swiftshader_icd.json | |||
| export VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/lvp_icd.x86_64.json | |||
| export VK_ICD_FILENAMES=/etc/vulkan/icd.d/nvidia_icd.json | |||
| ``` | |||
| ## Load from env NCNN_VULKAN_DRIVER | |||
| for debug purpose | |||
| sample usage | |||
| ```sh | |||
| export NCNN_VULKAN_DRIVER=/data/local/tmp/vulkan.ad07XX.so | |||
| ``` | |||
| @@ -1211,7 +1211,7 @@ PYBIND11_MODULE(ncnn, m) | |||
| #endif //NCNN_STRING | |||
| #if NCNN_VULKAN | |||
| m.def("create_gpu_instance", &create_gpu_instance); | |||
| m.def("create_gpu_instance", &create_gpu_instance, py::arg("driver_path") = ((const char*)0)); | |||
| m.def("destroy_gpu_instance", &destroy_gpu_instance); | |||
| m.def("get_gpu_count", &get_gpu_count); | |||
| m.def("get_default_gpu_index", &get_default_gpu_index); | |||
| @@ -40,6 +40,7 @@ set(ncnn_SRCS | |||
| simpleomp.cpp | |||
| simplestl.cpp | |||
| simplemath.cpp | |||
| simplevk.cpp | |||
| ) | |||
| if(ANDROID) | |||
| @@ -267,30 +268,43 @@ if(NCNN_THREADS) | |||
| endif() | |||
| if(NCNN_VULKAN) | |||
| find_package(Vulkan QUIET) | |||
| if(NOT Vulkan_FOUND) | |||
| if(DEFINED ENV{VULKAN_SDK}) | |||
| if(CMAKE_SYSTEM_NAME MATCHES "Linux") | |||
| list(APPEND CMAKE_MODULE_PATH "$ENV{VULKAN_SDK}/../source/VulkanTools/cmake") | |||
| elseif(CMAKE_SYSTEM_NAME MATCHES "Windows") | |||
| list(APPEND CMAKE_MODULE_PATH "$ENV{VULKAN_SDK}/Samples/cmake") | |||
| elseif(CMAKE_SYSTEM_NAME MATCHES "Darwin") | |||
| message(WARNING "Failed to find vulkan since cmake is too old\n" | |||
| "cmake >= 3.7 required. Consider `brew upgrade cmake`") | |||
| if(NCNN_SIMPLEVK) | |||
| if(APPLE) | |||
| # simplevk always use static vulkan linkage on apple platform | |||
| if(NOT DEFINED Vulkan_LIBRARY) | |||
| message(WARNING "Vulkan_LIBRARY shall be defined for simplevk static linkage on APPLE platforms") | |||
| endif() | |||
| target_link_libraries(ncnn PUBLIC ${Vulkan_LIBRARY}) | |||
| else() | |||
| message(FATAL_ERROR "Error: CMake didn't find Vulkan. Please set VULKAN_SDK env var, e.g.:\n" | |||
| "Linux: export VULKAN_SDK=~/soft/vulkansdk/1.2.148.0/x86_64\n" | |||
| "Windows: set VULKAN_SDK=E:/lib/VulkanSDK/1.2.148.0\n" | |||
| "MacOS: export VULKAN_SDK=~/soft/vulkansdk/1.2.148.0/macOS\n" | |||
| ) | |||
| target_link_libraries(ncnn PRIVATE ${CMAKE_DL_LIBS}) | |||
| endif() | |||
| find_package(Vulkan REQUIRED) | |||
| else() | |||
| find_package(Vulkan QUIET) | |||
| if(NOT Vulkan_FOUND) | |||
| if(DEFINED ENV{VULKAN_SDK}) | |||
| if(CMAKE_SYSTEM_NAME MATCHES "Linux") | |||
| list(APPEND CMAKE_MODULE_PATH "$ENV{VULKAN_SDK}/../source/VulkanTools/cmake") | |||
| elseif(CMAKE_SYSTEM_NAME MATCHES "Windows") | |||
| list(APPEND CMAKE_MODULE_PATH "$ENV{VULKAN_SDK}/Samples/cmake") | |||
| elseif(CMAKE_SYSTEM_NAME MATCHES "Darwin") | |||
| message(WARNING "Failed to find vulkan since cmake is too old\n" | |||
| "cmake >= 3.7 required. Consider `brew upgrade cmake`") | |||
| endif() | |||
| else() | |||
| message(FATAL_ERROR "Error: CMake didn't find Vulkan. Please set VULKAN_SDK env var, e.g.:\n" | |||
| "Linux: export VULKAN_SDK=~/soft/vulkansdk/1.2.148.0/x86_64\n" | |||
| "Windows: set VULKAN_SDK=E:/lib/VulkanSDK/1.2.148.0\n" | |||
| "MacOS: export VULKAN_SDK=~/soft/vulkansdk/1.2.148.0/macOS\n" | |||
| ) | |||
| endif() | |||
| find_package(Vulkan REQUIRED) | |||
| endif() | |||
| target_link_libraries(ncnn PUBLIC Vulkan::Vulkan) | |||
| endif() | |||
| target_link_libraries(ncnn PUBLIC Vulkan::Vulkan) | |||
| # Support mac platform static library compilation | |||
| if(NOT NCNN_SHARED_LIB AND CMAKE_HOST_SYSTEM_NAME STREQUAL "Darwin" AND NOT CMAKE_SYSTEM_NAME STREQUAL "iOS") | |||
| if(NOT NCNN_SHARED_LIB AND APPLE AND NOT CMAKE_SYSTEM_NAME STREQUAL "iOS") | |||
| find_library(CoreFoundation NAMES CoreFoundation) | |||
| find_library(Foundation NAMES Foundation) | |||
| find_library(QuartzCore NAMES QuartzCore) | |||
| @@ -311,6 +325,8 @@ if(NCNN_VULKAN) | |||
| ) | |||
| target_link_libraries(ncnn PRIVATE ${vulkan_dependent_LINK_LIBRARIES}) | |||
| endif() | |||
| # link in-house glslang | |||
| target_include_directories(ncnn PRIVATE $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../>) | |||
| target_link_libraries(ncnn PRIVATE glslang SPIRV) | |||
| endif() | |||
| @@ -581,6 +597,7 @@ if(NCNN_INSTALL_SDK) | |||
| simpleomp.h | |||
| simplestl.h | |||
| simplemath.h | |||
| simplevk.h | |||
| vulkan_header_fix.h | |||
| ${CMAKE_CURRENT_BINARY_DIR}/ncnn_export.h | |||
| ${CMAKE_CURRENT_BINARY_DIR}/layer_shader_type_enum.h | |||
| @@ -599,4 +616,4 @@ endif() | |||
| # add ncnn and generate-spirv to a virtual project group | |||
| set_property(GLOBAL PROPERTY USE_FOLDERS ON) | |||
| set_property(TARGET ncnn PROPERTY FOLDER "libncnn") | |||
| set_property(TARGET ncnn-generate-spirv PROPERTY FOLDER "libncnn") | |||
| set_property(TARGET ncnn-generate-spirv PROPERTY FOLDER "libncnn") | |||
| @@ -24,10 +24,6 @@ | |||
| #include <stdlib.h> | |||
| #if NCNN_VULKAN | |||
| #include <vulkan/vulkan.h> | |||
| #endif // NCNN_VULKAN | |||
| #if NCNN_PLATFORM_API | |||
| #if __ANDROID_API__ >= 26 | |||
| #include <android/hardware_buffer.h> | |||
| @@ -21,8 +21,6 @@ | |||
| #include "mat.h" | |||
| #include <vulkan/vulkan.h> | |||
| namespace ncnn { | |||
| class Pipeline; | |||
| @@ -17,7 +17,6 @@ | |||
| #if NCNN_VULKAN | |||
| #include <string.h> | |||
| #include <vulkan/vulkan.h> | |||
| #include "glslang/SPIRV/GlslangToSpv.h" | |||
| #if NCNN_SYSTEM_GLSLANG | |||
| @@ -50,6 +49,15 @@ public: | |||
| __ncnn_vulkan_instance_holder() | |||
| { | |||
| instance = 0; | |||
| created = 0; | |||
| #if NCNN_VULKAN_LOADER | |||
| libvulkan = 0; | |||
| #if defined __ANDROID__ | |||
| hvkdi = 0; | |||
| #endif | |||
| #endif // NCNN_VULKAN_LOADER | |||
| #if ENABLE_VALIDATION_LAYER | |||
| callback = 0; | |||
| #endif | |||
| @@ -66,6 +74,8 @@ public: | |||
| } | |||
| VkInstance instance; | |||
| int created; | |||
| #if ENABLE_VALIDATION_LAYER | |||
| VkDebugUtilsMessengerEXT callback; | |||
| #endif | |||
| @@ -97,6 +107,103 @@ static const layer_shader_registry_entry layer_shader_registry[] = { | |||
| static const int layer_shader_registry_entry_count = sizeof(layer_shader_registry) / sizeof(layer_shader_registry_entry); | |||
| // vulkan core | |||
| PFN_vkAllocateCommandBuffers vkAllocateCommandBuffers = 0; | |||
| PFN_vkAllocateDescriptorSets vkAllocateDescriptorSets = 0; | |||
| PFN_vkAllocateMemory vkAllocateMemory = 0; | |||
| PFN_vkBeginCommandBuffer vkBeginCommandBuffer = 0; | |||
| PFN_vkBindBufferMemory vkBindBufferMemory = 0; | |||
| PFN_vkBindImageMemory vkBindImageMemory = 0; | |||
| PFN_vkCmdBeginQuery vkCmdBeginQuery = 0; | |||
| PFN_vkCmdBindDescriptorSets vkCmdBindDescriptorSets = 0; | |||
| PFN_vkCmdBindIndexBuffer vkCmdBindIndexBuffer = 0; | |||
| PFN_vkCmdBindPipeline vkCmdBindPipeline = 0; | |||
| PFN_vkCmdCopyBuffer vkCmdCopyBuffer = 0; | |||
| PFN_vkCmdCopyBufferToImage vkCmdCopyBufferToImage = 0; | |||
| PFN_vkCmdCopyImage vkCmdCopyImage = 0; | |||
| PFN_vkCmdCopyImageToBuffer vkCmdCopyImageToBuffer = 0; | |||
| PFN_vkCmdCopyQueryPoolResults vkCmdCopyQueryPoolResults = 0; | |||
| PFN_vkCmdDispatch vkCmdDispatch = 0; | |||
| PFN_vkCmdDispatchIndirect vkCmdDispatchIndirect = 0; | |||
| PFN_vkCmdEndQuery vkCmdEndQuery = 0; | |||
| PFN_vkCmdExecuteCommands vkCmdExecuteCommands = 0; | |||
| PFN_vkCmdFillBuffer vkCmdFillBuffer = 0; | |||
| PFN_vkCmdPipelineBarrier vkCmdPipelineBarrier = 0; | |||
| PFN_vkCmdPushConstants vkCmdPushConstants = 0; | |||
| PFN_vkCmdResetQueryPool vkCmdResetQueryPool = 0; | |||
| PFN_vkCmdResolveImage vkCmdResolveImage = 0; | |||
| PFN_vkCmdUpdateBuffer vkCmdUpdateBuffer = 0; | |||
| PFN_vkCmdWriteTimestamp vkCmdWriteTimestamp = 0; | |||
| PFN_vkCreateBuffer vkCreateBuffer = 0; | |||
| PFN_vkCreateBufferView vkCreateBufferView = 0; | |||
| PFN_vkCreateCommandPool vkCreateCommandPool = 0; | |||
| PFN_vkCreateComputePipelines vkCreateComputePipelines = 0; | |||
| PFN_vkCreateDescriptorPool vkCreateDescriptorPool = 0; | |||
| PFN_vkCreateDescriptorSetLayout vkCreateDescriptorSetLayout = 0; | |||
| PFN_vkCreateDevice vkCreateDevice = 0; | |||
| PFN_vkCreateFence vkCreateFence = 0; | |||
| PFN_vkCreateImage vkCreateImage = 0; | |||
| PFN_vkCreateImageView vkCreateImageView = 0; | |||
| PFN_vkCreatePipelineCache vkCreatePipelineCache = 0; | |||
| PFN_vkCreatePipelineLayout vkCreatePipelineLayout = 0; | |||
| PFN_vkCreateQueryPool vkCreateQueryPool = 0; | |||
| PFN_vkCreateSampler vkCreateSampler = 0; | |||
| PFN_vkCreateSemaphore vkCreateSemaphore = 0; | |||
| PFN_vkCreateShaderModule vkCreateShaderModule = 0; | |||
| PFN_vkDestroyBuffer vkDestroyBuffer = 0; | |||
| PFN_vkDestroyBufferView vkDestroyBufferView = 0; | |||
| PFN_vkDestroyCommandPool vkDestroyCommandPool = 0; | |||
| PFN_vkDestroyDescriptorPool vkDestroyDescriptorPool = 0; | |||
| PFN_vkDestroyDescriptorSetLayout vkDestroyDescriptorSetLayout = 0; | |||
| PFN_vkDestroyDevice vkDestroyDevice = 0; | |||
| PFN_vkDestroyFence vkDestroyFence = 0; | |||
| PFN_vkDestroyImage vkDestroyImage = 0; | |||
| PFN_vkDestroyImageView vkDestroyImageView = 0; | |||
| PFN_vkDestroyInstance vkDestroyInstance = 0; | |||
| PFN_vkDestroyPipeline vkDestroyPipeline = 0; | |||
| PFN_vkDestroyPipelineCache vkDestroyPipelineCache = 0; | |||
| PFN_vkDestroyPipelineLayout vkDestroyPipelineLayout = 0; | |||
| PFN_vkDestroyQueryPool vkDestroyQueryPool = 0; | |||
| PFN_vkDestroySampler vkDestroySampler = 0; | |||
| PFN_vkDestroySemaphore vkDestroySemaphore = 0; | |||
| PFN_vkDestroyShaderModule vkDestroyShaderModule = 0; | |||
| PFN_vkDeviceWaitIdle vkDeviceWaitIdle = 0; | |||
| PFN_vkEndCommandBuffer vkEndCommandBuffer = 0; | |||
| PFN_vkEnumerateDeviceExtensionProperties vkEnumerateDeviceExtensionProperties = 0; | |||
| PFN_vkEnumerateDeviceLayerProperties vkEnumerateDeviceLayerProperties = 0; | |||
| PFN_vkEnumeratePhysicalDevices vkEnumeratePhysicalDevices = 0; | |||
| PFN_vkFlushMappedMemoryRanges vkFlushMappedMemoryRanges = 0; | |||
| PFN_vkFreeCommandBuffers vkFreeCommandBuffers = 0; | |||
| PFN_vkFreeDescriptorSets vkFreeDescriptorSets = 0; | |||
| PFN_vkFreeMemory vkFreeMemory = 0; | |||
| PFN_vkGetBufferMemoryRequirements vkGetBufferMemoryRequirements = 0; | |||
| PFN_vkGetDeviceMemoryCommitment vkGetDeviceMemoryCommitment = 0; | |||
| PFN_vkGetDeviceProcAddr vkGetDeviceProcAddr = 0; | |||
| PFN_vkGetDeviceQueue vkGetDeviceQueue = 0; | |||
| PFN_vkGetFenceStatus vkGetFenceStatus = 0; | |||
| PFN_vkGetImageMemoryRequirements vkGetImageMemoryRequirements = 0; | |||
| PFN_vkGetImageSubresourceLayout vkGetImageSubresourceLayout = 0; | |||
| PFN_vkGetPhysicalDeviceFeatures vkGetPhysicalDeviceFeatures = 0; | |||
| PFN_vkGetPhysicalDeviceFormatProperties vkGetPhysicalDeviceFormatProperties = 0; | |||
| PFN_vkGetPhysicalDeviceImageFormatProperties vkGetPhysicalDeviceImageFormatProperties = 0; | |||
| PFN_vkGetPhysicalDeviceMemoryProperties vkGetPhysicalDeviceMemoryProperties = 0; | |||
| PFN_vkGetPhysicalDeviceProperties vkGetPhysicalDeviceProperties = 0; | |||
| PFN_vkGetPhysicalDeviceQueueFamilyProperties vkGetPhysicalDeviceQueueFamilyProperties = 0; | |||
| PFN_vkGetPipelineCacheData vkGetPipelineCacheData = 0; | |||
| PFN_vkGetQueryPoolResults vkGetQueryPoolResults = 0; | |||
| PFN_vkInvalidateMappedMemoryRanges vkInvalidateMappedMemoryRanges = 0; | |||
| PFN_vkMapMemory vkMapMemory = 0; | |||
| PFN_vkMergePipelineCaches vkMergePipelineCaches = 0; | |||
| PFN_vkQueueSubmit vkQueueSubmit = 0; | |||
| PFN_vkQueueWaitIdle vkQueueWaitIdle = 0; | |||
| PFN_vkResetCommandBuffer vkResetCommandBuffer = 0; | |||
| PFN_vkResetCommandPool vkResetCommandPool = 0; | |||
| PFN_vkResetDescriptorPool vkResetDescriptorPool = 0; | |||
| PFN_vkResetFences vkResetFences = 0; | |||
| PFN_vkUnmapMemory vkUnmapMemory = 0; | |||
| PFN_vkUpdateDescriptorSets vkUpdateDescriptorSets = 0; | |||
| PFN_vkWaitForFences vkWaitForFences = 0; | |||
| int support_VK_KHR_external_memory_capabilities = 0; | |||
| int support_VK_KHR_get_physical_device_properties2 = 0; | |||
| int support_VK_KHR_get_surface_capabilities2 = 0; | |||
| @@ -122,7 +229,6 @@ PFN_vkGetPhysicalDeviceFormatProperties2KHR vkGetPhysicalDeviceFormatProperties2 | |||
| PFN_vkGetPhysicalDeviceImageFormatProperties2KHR vkGetPhysicalDeviceImageFormatProperties2KHR = 0; | |||
| PFN_vkGetPhysicalDeviceQueueFamilyProperties2KHR vkGetPhysicalDeviceQueueFamilyProperties2KHR = 0; | |||
| PFN_vkGetPhysicalDeviceMemoryProperties2KHR vkGetPhysicalDeviceMemoryProperties2KHR = 0; | |||
| PFN_vkGetPhysicalDeviceSparseImageFormatProperties2KHR vkGetPhysicalDeviceSparseImageFormatProperties2KHR = 0; | |||
| // VK_KHR_get_surface_capabilities2 | |||
| PFN_vkGetPhysicalDeviceSurfaceCapabilities2KHR vkGetPhysicalDeviceSurfaceCapabilities2KHR = 0; | |||
| @@ -689,6 +795,107 @@ int GpuInfo::support_VK_NV_cooperative_matrix() const | |||
| return d->support_VK_NV_cooperative_matrix; | |||
| } | |||
| static int init_instance_core() | |||
| { | |||
| vkAllocateCommandBuffers = (PFN_vkAllocateCommandBuffers)vkGetInstanceProcAddr(g_instance, "vkAllocateCommandBuffers"); | |||
| vkAllocateDescriptorSets = (PFN_vkAllocateDescriptorSets)vkGetInstanceProcAddr(g_instance, "vkAllocateDescriptorSets"); | |||
| vkAllocateMemory = (PFN_vkAllocateMemory)vkGetInstanceProcAddr(g_instance, "vkAllocateMemory"); | |||
| vkBeginCommandBuffer = (PFN_vkBeginCommandBuffer)vkGetInstanceProcAddr(g_instance, "vkBeginCommandBuffer"); | |||
| vkBindBufferMemory = (PFN_vkBindBufferMemory)vkGetInstanceProcAddr(g_instance, "vkBindBufferMemory"); | |||
| vkBindImageMemory = (PFN_vkBindImageMemory)vkGetInstanceProcAddr(g_instance, "vkBindImageMemory"); | |||
| vkCmdBeginQuery = (PFN_vkCmdBeginQuery)vkGetInstanceProcAddr(g_instance, "vkCmdBeginQuery"); | |||
| vkCmdBindDescriptorSets = (PFN_vkCmdBindDescriptorSets)vkGetInstanceProcAddr(g_instance, "vkCmdBindDescriptorSets"); | |||
| vkCmdBindIndexBuffer = (PFN_vkCmdBindIndexBuffer)vkGetInstanceProcAddr(g_instance, "vkCmdBindIndexBuffer"); | |||
| vkCmdBindPipeline = (PFN_vkCmdBindPipeline)vkGetInstanceProcAddr(g_instance, "vkCmdBindPipeline"); | |||
| vkCmdCopyBuffer = (PFN_vkCmdCopyBuffer)vkGetInstanceProcAddr(g_instance, "vkCmdCopyBuffer"); | |||
| vkCmdCopyBufferToImage = (PFN_vkCmdCopyBufferToImage)vkGetInstanceProcAddr(g_instance, "vkCmdCopyBufferToImage"); | |||
| vkCmdCopyImage = (PFN_vkCmdCopyImage)vkGetInstanceProcAddr(g_instance, "vkCmdCopyImage"); | |||
| vkCmdCopyImageToBuffer = (PFN_vkCmdCopyImageToBuffer)vkGetInstanceProcAddr(g_instance, "vkCmdCopyImageToBuffer"); | |||
| vkCmdCopyQueryPoolResults = (PFN_vkCmdCopyQueryPoolResults)vkGetInstanceProcAddr(g_instance, "vkCmdCopyQueryPoolResults"); | |||
| vkCmdDispatch = (PFN_vkCmdDispatch)vkGetInstanceProcAddr(g_instance, "vkCmdDispatch"); | |||
| vkCmdDispatchIndirect = (PFN_vkCmdDispatchIndirect)vkGetInstanceProcAddr(g_instance, "vkCmdDispatchIndirect"); | |||
| vkCmdEndQuery = (PFN_vkCmdEndQuery)vkGetInstanceProcAddr(g_instance, "vkCmdEndQuery"); | |||
| vkCmdExecuteCommands = (PFN_vkCmdExecuteCommands)vkGetInstanceProcAddr(g_instance, "vkCmdExecuteCommands"); | |||
| vkCmdFillBuffer = (PFN_vkCmdFillBuffer)vkGetInstanceProcAddr(g_instance, "vkCmdFillBuffer"); | |||
| vkCmdPipelineBarrier = (PFN_vkCmdPipelineBarrier)vkGetInstanceProcAddr(g_instance, "vkCmdPipelineBarrier"); | |||
| vkCmdPushConstants = (PFN_vkCmdPushConstants)vkGetInstanceProcAddr(g_instance, "vkCmdPushConstants"); | |||
| vkCmdResetQueryPool = (PFN_vkCmdResetQueryPool)vkGetInstanceProcAddr(g_instance, "vkCmdResetQueryPool"); | |||
| vkCmdResolveImage = (PFN_vkCmdResolveImage)vkGetInstanceProcAddr(g_instance, "vkCmdResolveImage"); | |||
| vkCmdUpdateBuffer = (PFN_vkCmdUpdateBuffer)vkGetInstanceProcAddr(g_instance, "vkCmdUpdateBuffer"); | |||
| vkCmdWriteTimestamp = (PFN_vkCmdWriteTimestamp)vkGetInstanceProcAddr(g_instance, "vkCmdWriteTimestamp"); | |||
| vkCreateBuffer = (PFN_vkCreateBuffer)vkGetInstanceProcAddr(g_instance, "vkCreateBuffer"); | |||
| vkCreateBufferView = (PFN_vkCreateBufferView)vkGetInstanceProcAddr(g_instance, "vkCreateBufferView"); | |||
| vkCreateCommandPool = (PFN_vkCreateCommandPool)vkGetInstanceProcAddr(g_instance, "vkCreateCommandPool"); | |||
| vkCreateComputePipelines = (PFN_vkCreateComputePipelines)vkGetInstanceProcAddr(g_instance, "vkCreateComputePipelines"); | |||
| vkCreateDescriptorPool = (PFN_vkCreateDescriptorPool)vkGetInstanceProcAddr(g_instance, "vkCreateDescriptorPool"); | |||
| vkCreateDescriptorSetLayout = (PFN_vkCreateDescriptorSetLayout)vkGetInstanceProcAddr(g_instance, "vkCreateDescriptorSetLayout"); | |||
| vkCreateDevice = (PFN_vkCreateDevice)vkGetInstanceProcAddr(g_instance, "vkCreateDevice"); | |||
| vkCreateFence = (PFN_vkCreateFence)vkGetInstanceProcAddr(g_instance, "vkCreateFence"); | |||
| vkCreateImage = (PFN_vkCreateImage)vkGetInstanceProcAddr(g_instance, "vkCreateImage"); | |||
| vkCreateImageView = (PFN_vkCreateImageView)vkGetInstanceProcAddr(g_instance, "vkCreateImageView"); | |||
| vkCreatePipelineCache = (PFN_vkCreatePipelineCache)vkGetInstanceProcAddr(g_instance, "vkCreatePipelineCache"); | |||
| vkCreatePipelineLayout = (PFN_vkCreatePipelineLayout)vkGetInstanceProcAddr(g_instance, "vkCreatePipelineLayout"); | |||
| vkCreateQueryPool = (PFN_vkCreateQueryPool)vkGetInstanceProcAddr(g_instance, "vkCreateQueryPool"); | |||
| vkCreateSampler = (PFN_vkCreateSampler)vkGetInstanceProcAddr(g_instance, "vkCreateSampler"); | |||
| vkCreateSemaphore = (PFN_vkCreateSemaphore)vkGetInstanceProcAddr(g_instance, "vkCreateSemaphore"); | |||
| vkCreateShaderModule = (PFN_vkCreateShaderModule)vkGetInstanceProcAddr(g_instance, "vkCreateShaderModule"); | |||
| vkDestroyBuffer = (PFN_vkDestroyBuffer)vkGetInstanceProcAddr(g_instance, "vkDestroyBuffer"); | |||
| vkDestroyBufferView = (PFN_vkDestroyBufferView)vkGetInstanceProcAddr(g_instance, "vkDestroyBufferView"); | |||
| vkDestroyCommandPool = (PFN_vkDestroyCommandPool)vkGetInstanceProcAddr(g_instance, "vkDestroyCommandPool"); | |||
| vkDestroyDescriptorPool = (PFN_vkDestroyDescriptorPool)vkGetInstanceProcAddr(g_instance, "vkDestroyDescriptorPool"); | |||
| vkDestroyDescriptorSetLayout = (PFN_vkDestroyDescriptorSetLayout)vkGetInstanceProcAddr(g_instance, "vkDestroyDescriptorSetLayout"); | |||
| vkDestroyDevice = (PFN_vkDestroyDevice)vkGetInstanceProcAddr(g_instance, "vkDestroyDevice"); | |||
| vkDestroyFence = (PFN_vkDestroyFence)vkGetInstanceProcAddr(g_instance, "vkDestroyFence"); | |||
| vkDestroyImage = (PFN_vkDestroyImage)vkGetInstanceProcAddr(g_instance, "vkDestroyImage"); | |||
| vkDestroyImageView = (PFN_vkDestroyImageView)vkGetInstanceProcAddr(g_instance, "vkDestroyImageView"); | |||
| vkDestroyInstance = (PFN_vkDestroyInstance)vkGetInstanceProcAddr(g_instance, "vkDestroyInstance"); | |||
| vkDestroyPipeline = (PFN_vkDestroyPipeline)vkGetInstanceProcAddr(g_instance, "vkDestroyPipeline"); | |||
| vkDestroyPipelineCache = (PFN_vkDestroyPipelineCache)vkGetInstanceProcAddr(g_instance, "vkDestroyPipelineCache"); | |||
| vkDestroyPipelineLayout = (PFN_vkDestroyPipelineLayout)vkGetInstanceProcAddr(g_instance, "vkDestroyPipelineLayout"); | |||
| vkDestroyQueryPool = (PFN_vkDestroyQueryPool)vkGetInstanceProcAddr(g_instance, "vkDestroyQueryPool"); | |||
| vkDestroySampler = (PFN_vkDestroySampler)vkGetInstanceProcAddr(g_instance, "vkDestroySampler"); | |||
| vkDestroySemaphore = (PFN_vkDestroySemaphore)vkGetInstanceProcAddr(g_instance, "vkDestroySemaphore"); | |||
| vkDestroyShaderModule = (PFN_vkDestroyShaderModule)vkGetInstanceProcAddr(g_instance, "vkDestroyShaderModule"); | |||
| vkDeviceWaitIdle = (PFN_vkDeviceWaitIdle)vkGetInstanceProcAddr(g_instance, "vkDeviceWaitIdle"); | |||
| vkEndCommandBuffer = (PFN_vkEndCommandBuffer)vkGetInstanceProcAddr(g_instance, "vkEndCommandBuffer"); | |||
| vkEnumerateDeviceExtensionProperties = (PFN_vkEnumerateDeviceExtensionProperties)vkGetInstanceProcAddr(g_instance, "vkEnumerateDeviceExtensionProperties"); | |||
| vkEnumerateDeviceLayerProperties = (PFN_vkEnumerateDeviceLayerProperties)vkGetInstanceProcAddr(g_instance, "vkEnumerateDeviceLayerProperties"); | |||
| vkEnumeratePhysicalDevices = (PFN_vkEnumeratePhysicalDevices)vkGetInstanceProcAddr(g_instance, "vkEnumeratePhysicalDevices"); | |||
| vkFlushMappedMemoryRanges = (PFN_vkFlushMappedMemoryRanges)vkGetInstanceProcAddr(g_instance, "vkFlushMappedMemoryRanges"); | |||
| vkFreeCommandBuffers = (PFN_vkFreeCommandBuffers)vkGetInstanceProcAddr(g_instance, "vkFreeCommandBuffers"); | |||
| vkFreeDescriptorSets = (PFN_vkFreeDescriptorSets)vkGetInstanceProcAddr(g_instance, "vkFreeDescriptorSets"); | |||
| vkFreeMemory = (PFN_vkFreeMemory)vkGetInstanceProcAddr(g_instance, "vkFreeMemory"); | |||
| vkGetBufferMemoryRequirements = (PFN_vkGetBufferMemoryRequirements)vkGetInstanceProcAddr(g_instance, "vkGetBufferMemoryRequirements"); | |||
| vkGetDeviceMemoryCommitment = (PFN_vkGetDeviceMemoryCommitment)vkGetInstanceProcAddr(g_instance, "vkGetDeviceMemoryCommitment"); | |||
| vkGetDeviceProcAddr = (PFN_vkGetDeviceProcAddr)vkGetInstanceProcAddr(g_instance, "vkGetDeviceProcAddr"); | |||
| vkGetDeviceQueue = (PFN_vkGetDeviceQueue)vkGetInstanceProcAddr(g_instance, "vkGetDeviceQueue"); | |||
| vkGetFenceStatus = (PFN_vkGetFenceStatus)vkGetInstanceProcAddr(g_instance, "vkGetFenceStatus"); | |||
| vkGetImageMemoryRequirements = (PFN_vkGetImageMemoryRequirements)vkGetInstanceProcAddr(g_instance, "vkGetImageMemoryRequirements"); | |||
| vkGetImageSubresourceLayout = (PFN_vkGetImageSubresourceLayout)vkGetInstanceProcAddr(g_instance, "vkGetImageSubresourceLayout"); | |||
| vkGetPhysicalDeviceFeatures = (PFN_vkGetPhysicalDeviceFeatures)vkGetInstanceProcAddr(g_instance, "vkGetPhysicalDeviceFeatures"); | |||
| vkGetPhysicalDeviceFormatProperties = (PFN_vkGetPhysicalDeviceFormatProperties)vkGetInstanceProcAddr(g_instance, "vkGetPhysicalDeviceFormatProperties"); | |||
| vkGetPhysicalDeviceImageFormatProperties = (PFN_vkGetPhysicalDeviceImageFormatProperties)vkGetInstanceProcAddr(g_instance, "vkGetPhysicalDeviceImageFormatProperties"); | |||
| vkGetPhysicalDeviceMemoryProperties = (PFN_vkGetPhysicalDeviceMemoryProperties)vkGetInstanceProcAddr(g_instance, "vkGetPhysicalDeviceMemoryProperties"); | |||
| vkGetPhysicalDeviceProperties = (PFN_vkGetPhysicalDeviceProperties)vkGetInstanceProcAddr(g_instance, "vkGetPhysicalDeviceProperties"); | |||
| vkGetPhysicalDeviceQueueFamilyProperties = (PFN_vkGetPhysicalDeviceQueueFamilyProperties)vkGetInstanceProcAddr(g_instance, "vkGetPhysicalDeviceQueueFamilyProperties"); | |||
| vkGetPipelineCacheData = (PFN_vkGetPipelineCacheData)vkGetInstanceProcAddr(g_instance, "vkGetPipelineCacheData"); | |||
| vkGetQueryPoolResults = (PFN_vkGetQueryPoolResults)vkGetInstanceProcAddr(g_instance, "vkGetQueryPoolResults"); | |||
| vkInvalidateMappedMemoryRanges = (PFN_vkInvalidateMappedMemoryRanges)vkGetInstanceProcAddr(g_instance, "vkInvalidateMappedMemoryRanges"); | |||
| vkMapMemory = (PFN_vkMapMemory)vkGetInstanceProcAddr(g_instance, "vkMapMemory"); | |||
| vkMergePipelineCaches = (PFN_vkMergePipelineCaches)vkGetInstanceProcAddr(g_instance, "vkMergePipelineCaches"); | |||
| vkQueueSubmit = (PFN_vkQueueSubmit)vkGetInstanceProcAddr(g_instance, "vkQueueSubmit"); | |||
| vkQueueWaitIdle = (PFN_vkQueueWaitIdle)vkGetInstanceProcAddr(g_instance, "vkQueueWaitIdle"); | |||
| vkResetCommandBuffer = (PFN_vkResetCommandBuffer)vkGetInstanceProcAddr(g_instance, "vkResetCommandBuffer"); | |||
| vkResetCommandPool = (PFN_vkResetCommandPool)vkGetInstanceProcAddr(g_instance, "vkResetCommandPool"); | |||
| vkResetDescriptorPool = (PFN_vkResetDescriptorPool)vkGetInstanceProcAddr(g_instance, "vkResetDescriptorPool"); | |||
| vkResetFences = (PFN_vkResetFences)vkGetInstanceProcAddr(g_instance, "vkResetFences"); | |||
| vkUnmapMemory = (PFN_vkUnmapMemory)vkGetInstanceProcAddr(g_instance, "vkUnmapMemory"); | |||
| vkUpdateDescriptorSets = (PFN_vkUpdateDescriptorSets)vkGetInstanceProcAddr(g_instance, "vkUpdateDescriptorSets"); | |||
| vkWaitForFences = (PFN_vkWaitForFences)vkGetInstanceProcAddr(g_instance, "vkWaitForFences"); | |||
| return 0; | |||
| } | |||
| static int init_instance_extension() | |||
| { | |||
| if (support_VK_KHR_external_memory_capabilities) | |||
| @@ -704,7 +911,6 @@ static int init_instance_extension() | |||
| vkGetPhysicalDeviceImageFormatProperties2KHR = (PFN_vkGetPhysicalDeviceImageFormatProperties2KHR)vkGetInstanceProcAddr(g_instance, "vkGetPhysicalDeviceImageFormatProperties2KHR"); | |||
| vkGetPhysicalDeviceQueueFamilyProperties2KHR = (PFN_vkGetPhysicalDeviceQueueFamilyProperties2KHR)vkGetInstanceProcAddr(g_instance, "vkGetPhysicalDeviceQueueFamilyProperties2KHR"); | |||
| vkGetPhysicalDeviceMemoryProperties2KHR = (PFN_vkGetPhysicalDeviceMemoryProperties2KHR)vkGetInstanceProcAddr(g_instance, "vkGetPhysicalDeviceMemoryProperties2KHR"); | |||
| vkGetPhysicalDeviceSparseImageFormatProperties2KHR = (PFN_vkGetPhysicalDeviceSparseImageFormatProperties2KHR)vkGetInstanceProcAddr(g_instance, "vkGetPhysicalDeviceSparseImageFormatProperties2KHR"); | |||
| } | |||
| if (support_VK_KHR_get_surface_capabilities2) | |||
| @@ -921,15 +1127,37 @@ static int find_default_vulkan_device_index() | |||
| return -1; | |||
| } | |||
| int create_gpu_instance() | |||
| int create_gpu_instance(const char* driver_path) | |||
| { | |||
| destroy_gpu_instance(); | |||
| MutexLockGuard lock(g_instance_lock); | |||
| if ((VkInstance)g_instance != 0) | |||
| return 0; | |||
| if (g_instance.created != 0) | |||
| return g_instance.instance ? 0 : -1; | |||
| g_instance.created = 1; | |||
| // NCNN_LOGE("create_gpu_instance"); | |||
| #if NCNN_SIMPLEVK | |||
| // load vulkan driver | |||
| { | |||
| int ret = load_vulkan_driver(driver_path); | |||
| if (ret != 0) | |||
| { | |||
| NCNN_LOGE("load vulkan driver failed"); | |||
| return -1; | |||
| } | |||
| } | |||
| #else | |||
| if (driver_path) | |||
| { | |||
| NCNN_LOGE("custom vulkan driver is not supported when NCNN_SIMPLEVK is off"); | |||
| NCNN_LOGE("will always use the system vulkan driver"); | |||
| } | |||
| #endif // NCNN_SIMPLEVK | |||
| VkResult ret; | |||
| std::vector<const char*> enabledLayers; | |||
| @@ -1136,6 +1364,8 @@ int create_gpu_instance() | |||
| g_instance.instance = instance; | |||
| init_instance_core(); | |||
| #if ENABLE_VALIDATION_LAYER | |||
| if (support_VK_EXT_debug_utils) | |||
| { | |||
| @@ -1807,7 +2037,7 @@ void destroy_gpu_instance() | |||
| { | |||
| MutexLockGuard lock(g_instance_lock); | |||
| if ((VkInstance)g_instance == 0) | |||
| if (g_instance.created == 0) | |||
| return; | |||
| // NCNN_LOGE("destroy_gpu_instance"); | |||
| @@ -1834,19 +2064,24 @@ void destroy_gpu_instance() | |||
| vkDestroyInstance(g_instance, 0); | |||
| g_instance.instance = 0; | |||
| } | |||
| static bool is_gpu_instance_ready() | |||
| { | |||
| MutexLockGuard lock(g_instance_lock); | |||
| #if NCNN_SIMPLEVK | |||
| unload_vulkan_driver(); | |||
| #endif | |||
| return (VkInstance)g_instance != 0; | |||
| g_instance.created = 0; | |||
| } | |||
| static void try_create_gpu_instance() | |||
| { | |||
| if (!is_gpu_instance_ready()) | |||
| create_gpu_instance(); | |||
| { | |||
| MutexLockGuard lock(g_instance_lock); | |||
| if (g_instance.created != 0) | |||
| return; | |||
| } | |||
| create_gpu_instance(); | |||
| } | |||
| int get_gpu_count() | |||
| @@ -3326,14 +3561,6 @@ int VulkanDevice::init_device_extension() | |||
| vkGetDeviceMemoryOpaqueCaptureAddressKHR = (PFN_vkGetDeviceMemoryOpaqueCaptureAddressKHR)vkGetDeviceProcAddr(d->device, "vkGetDeviceMemoryOpaqueCaptureAddressKHR"); | |||
| } | |||
| if (info.support_VK_KHR_create_renderpass2()) | |||
| { | |||
| vkCmdBeginRenderPass2KHR = (PFN_vkCmdBeginRenderPass2KHR)vkGetDeviceProcAddr(d->device, "vkCmdBeginRenderPass2KHR"); | |||
| vkCmdEndRenderPass2KHR = (PFN_vkCmdEndRenderPass2KHR)vkGetDeviceProcAddr(d->device, "vkCmdEndRenderPass2KHR"); | |||
| vkCmdNextSubpass2KHR = (PFN_vkCmdNextSubpass2KHR)vkGetDeviceProcAddr(d->device, "vkCmdNextSubpass2KHR"); | |||
| vkCreateRenderPass2KHR = (PFN_vkCreateRenderPass2KHR)vkGetDeviceProcAddr(d->device, "vkCreateRenderPass2KHR"); | |||
| } | |||
| if (info.support_VK_KHR_descriptor_update_template()) | |||
| { | |||
| vkCreateDescriptorUpdateTemplateKHR = (PFN_vkCreateDescriptorUpdateTemplateKHR)vkGetDeviceProcAddr(d->device, "vkCreateDescriptorUpdateTemplateKHR"); | |||
| @@ -3345,7 +3572,6 @@ int VulkanDevice::init_device_extension() | |||
| { | |||
| vkGetImageMemoryRequirements2KHR = (PFN_vkGetImageMemoryRequirements2KHR)vkGetDeviceProcAddr(d->device, "vkGetImageMemoryRequirements2KHR"); | |||
| vkGetBufferMemoryRequirements2KHR = (PFN_vkGetBufferMemoryRequirements2KHR)vkGetDeviceProcAddr(d->device, "vkGetBufferMemoryRequirements2KHR"); | |||
| vkGetImageSparseMemoryRequirements2KHR = (PFN_vkGetImageSparseMemoryRequirements2KHR)vkGetDeviceProcAddr(d->device, "vkGetImageSparseMemoryRequirements2KHR"); | |||
| } | |||
| if (info.support_VK_KHR_maintenance1()) | |||
| @@ -21,10 +21,6 @@ | |||
| #include "mat.h" | |||
| #include <vulkan/vulkan.h> | |||
| #include "vulkan_header_fix.h" | |||
| namespace ncnn { | |||
| // instance | |||
| @@ -33,7 +29,7 @@ namespace ncnn { | |||
| // Creates a VkInstance object, Checks the extended attributes supported by the Vulkan instance concerned, | |||
| // Initializes, and creates Vulkan validation layers (if ENABLE_VALIDATION_LAYER is enabled), | |||
| // Iterates over all supported physical devices, etc. | |||
| NCNN_EXPORT int create_gpu_instance(); | |||
| NCNN_EXPORT int create_gpu_instance(const char* driver_path = 0); | |||
| // Get global VkInstance variable | |||
| // Must be called after create_gpu_instance() and before destroy_gpu_instance() | |||
| @@ -43,6 +39,103 @@ NCNN_EXPORT VkInstance get_gpu_instance(); | |||
| // Usually called in the destructor of the main program exit | |||
| NCNN_EXPORT void destroy_gpu_instance(); | |||
| // vulkan core | |||
| extern PFN_vkAllocateCommandBuffers vkAllocateCommandBuffers; | |||
| extern PFN_vkAllocateDescriptorSets vkAllocateDescriptorSets; | |||
| extern PFN_vkAllocateMemory vkAllocateMemory; | |||
| extern PFN_vkBeginCommandBuffer vkBeginCommandBuffer; | |||
| extern PFN_vkBindBufferMemory vkBindBufferMemory; | |||
| extern PFN_vkBindImageMemory vkBindImageMemory; | |||
| extern PFN_vkCmdBeginQuery vkCmdBeginQuery; | |||
| extern PFN_vkCmdBindDescriptorSets vkCmdBindDescriptorSets; | |||
| extern PFN_vkCmdBindIndexBuffer vkCmdBindIndexBuffer; | |||
| extern PFN_vkCmdBindPipeline vkCmdBindPipeline; | |||
| extern PFN_vkCmdCopyBuffer vkCmdCopyBuffer; | |||
| extern PFN_vkCmdCopyBufferToImage vkCmdCopyBufferToImage; | |||
| extern PFN_vkCmdCopyImage vkCmdCopyImage; | |||
| extern PFN_vkCmdCopyImageToBuffer vkCmdCopyImageToBuffer; | |||
| extern PFN_vkCmdCopyQueryPoolResults vkCmdCopyQueryPoolResults; | |||
| extern PFN_vkCmdDispatch vkCmdDispatch; | |||
| extern PFN_vkCmdDispatchIndirect vkCmdDispatchIndirect; | |||
| extern PFN_vkCmdEndQuery vkCmdEndQuery; | |||
| extern PFN_vkCmdExecuteCommands vkCmdExecuteCommands; | |||
| extern PFN_vkCmdFillBuffer vkCmdFillBuffer; | |||
| extern PFN_vkCmdPipelineBarrier vkCmdPipelineBarrier; | |||
| extern PFN_vkCmdPushConstants vkCmdPushConstants; | |||
| extern PFN_vkCmdResetQueryPool vkCmdResetQueryPool; | |||
| extern PFN_vkCmdResolveImage vkCmdResolveImage; | |||
| extern PFN_vkCmdUpdateBuffer vkCmdUpdateBuffer; | |||
| extern PFN_vkCmdWriteTimestamp vkCmdWriteTimestamp; | |||
| extern PFN_vkCreateBuffer vkCreateBuffer; | |||
| extern PFN_vkCreateBufferView vkCreateBufferView; | |||
| extern PFN_vkCreateCommandPool vkCreateCommandPool; | |||
| extern PFN_vkCreateComputePipelines vkCreateComputePipelines; | |||
| extern PFN_vkCreateDescriptorPool vkCreateDescriptorPool; | |||
| extern PFN_vkCreateDescriptorSetLayout vkCreateDescriptorSetLayout; | |||
| extern PFN_vkCreateDevice vkCreateDevice; | |||
| extern PFN_vkCreateFence vkCreateFence; | |||
| extern PFN_vkCreateImage vkCreateImage; | |||
| extern PFN_vkCreateImageView vkCreateImageView; | |||
| extern PFN_vkCreatePipelineCache vkCreatePipelineCache; | |||
| extern PFN_vkCreatePipelineLayout vkCreatePipelineLayout; | |||
| extern PFN_vkCreateQueryPool vkCreateQueryPool; | |||
| extern PFN_vkCreateSampler vkCreateSampler; | |||
| extern PFN_vkCreateSemaphore vkCreateSemaphore; | |||
| extern PFN_vkCreateShaderModule vkCreateShaderModule; | |||
| extern PFN_vkDestroyBuffer vkDestroyBuffer; | |||
| extern PFN_vkDestroyBufferView vkDestroyBufferView; | |||
| extern PFN_vkDestroyCommandPool vkDestroyCommandPool; | |||
| extern PFN_vkDestroyDescriptorPool vkDestroyDescriptorPool; | |||
| extern PFN_vkDestroyDescriptorSetLayout vkDestroyDescriptorSetLayout; | |||
| extern PFN_vkDestroyDevice vkDestroyDevice; | |||
| extern PFN_vkDestroyFence vkDestroyFence; | |||
| extern PFN_vkDestroyImage vkDestroyImage; | |||
| extern PFN_vkDestroyImageView vkDestroyImageView; | |||
| extern PFN_vkDestroyInstance vkDestroyInstance; | |||
| extern PFN_vkDestroyPipeline vkDestroyPipeline; | |||
| extern PFN_vkDestroyPipelineCache vkDestroyPipelineCache; | |||
| extern PFN_vkDestroyPipelineLayout vkDestroyPipelineLayout; | |||
| extern PFN_vkDestroyQueryPool vkDestroyQueryPool; | |||
| extern PFN_vkDestroySampler vkDestroySampler; | |||
| extern PFN_vkDestroySemaphore vkDestroySemaphore; | |||
| extern PFN_vkDestroyShaderModule vkDestroyShaderModule; | |||
| extern PFN_vkDeviceWaitIdle vkDeviceWaitIdle; | |||
| extern PFN_vkEndCommandBuffer vkEndCommandBuffer; | |||
| extern PFN_vkEnumerateDeviceExtensionProperties vkEnumerateDeviceExtensionProperties; | |||
| extern PFN_vkEnumerateDeviceLayerProperties vkEnumerateDeviceLayerProperties; | |||
| extern PFN_vkEnumeratePhysicalDevices vkEnumeratePhysicalDevices; | |||
| extern PFN_vkFlushMappedMemoryRanges vkFlushMappedMemoryRanges; | |||
| extern PFN_vkFreeCommandBuffers vkFreeCommandBuffers; | |||
| extern PFN_vkFreeDescriptorSets vkFreeDescriptorSets; | |||
| extern PFN_vkFreeMemory vkFreeMemory; | |||
| extern PFN_vkGetBufferMemoryRequirements vkGetBufferMemoryRequirements; | |||
| extern PFN_vkGetDeviceMemoryCommitment vkGetDeviceMemoryCommitment; | |||
| extern PFN_vkGetDeviceProcAddr vkGetDeviceProcAddr; | |||
| extern PFN_vkGetDeviceQueue vkGetDeviceQueue; | |||
| extern PFN_vkGetFenceStatus vkGetFenceStatus; | |||
| extern PFN_vkGetImageMemoryRequirements vkGetImageMemoryRequirements; | |||
| extern PFN_vkGetImageSubresourceLayout vkGetImageSubresourceLayout; | |||
| extern PFN_vkGetPhysicalDeviceFeatures vkGetPhysicalDeviceFeatures; | |||
| extern PFN_vkGetPhysicalDeviceFormatProperties vkGetPhysicalDeviceFormatProperties; | |||
| extern PFN_vkGetPhysicalDeviceImageFormatProperties vkGetPhysicalDeviceImageFormatProperties; | |||
| extern PFN_vkGetPhysicalDeviceMemoryProperties vkGetPhysicalDeviceMemoryProperties; | |||
| extern PFN_vkGetPhysicalDeviceProperties vkGetPhysicalDeviceProperties; | |||
| extern PFN_vkGetPhysicalDeviceQueueFamilyProperties vkGetPhysicalDeviceQueueFamilyProperties; | |||
| extern PFN_vkGetPipelineCacheData vkGetPipelineCacheData; | |||
| extern PFN_vkGetQueryPoolResults vkGetQueryPoolResults; | |||
| extern PFN_vkInvalidateMappedMemoryRanges vkInvalidateMappedMemoryRanges; | |||
| extern PFN_vkMapMemory vkMapMemory; | |||
| extern PFN_vkMergePipelineCaches vkMergePipelineCaches; | |||
| extern PFN_vkQueueSubmit vkQueueSubmit; | |||
| extern PFN_vkQueueWaitIdle vkQueueWaitIdle; | |||
| extern PFN_vkResetCommandBuffer vkResetCommandBuffer; | |||
| extern PFN_vkResetCommandPool vkResetCommandPool; | |||
| extern PFN_vkResetDescriptorPool vkResetDescriptorPool; | |||
| extern PFN_vkResetFences vkResetFences; | |||
| extern PFN_vkUnmapMemory vkUnmapMemory; | |||
| extern PFN_vkUpdateDescriptorSets vkUpdateDescriptorSets; | |||
| extern PFN_vkWaitForFences vkWaitForFences; | |||
| // instance extension capability | |||
| extern int support_VK_KHR_external_memory_capabilities; | |||
| extern int support_VK_KHR_get_physical_device_properties2; | |||
| @@ -68,7 +161,6 @@ extern PFN_vkGetPhysicalDeviceFormatProperties2KHR vkGetPhysicalDeviceFormatProp | |||
| extern PFN_vkGetPhysicalDeviceImageFormatProperties2KHR vkGetPhysicalDeviceImageFormatProperties2KHR; | |||
| extern PFN_vkGetPhysicalDeviceQueueFamilyProperties2KHR vkGetPhysicalDeviceQueueFamilyProperties2KHR; | |||
| extern PFN_vkGetPhysicalDeviceMemoryProperties2KHR vkGetPhysicalDeviceMemoryProperties2KHR; | |||
| extern PFN_vkGetPhysicalDeviceSparseImageFormatProperties2KHR vkGetPhysicalDeviceSparseImageFormatProperties2KHR; | |||
| // VK_KHR_get_surface_capabilities2 | |||
| extern PFN_vkGetPhysicalDeviceSurfaceCapabilities2KHR vkGetPhysicalDeviceSurfaceCapabilities2KHR; | |||
| @@ -220,7 +312,7 @@ private: | |||
| GpuInfo& operator=(const GpuInfo&); | |||
| private: | |||
| friend int create_gpu_instance(); | |||
| friend int create_gpu_instance(const char* driver_path); | |||
| GpuInfoPrivate* const d; | |||
| }; | |||
| @@ -298,12 +390,6 @@ public: | |||
| PFN_vkGetBufferOpaqueCaptureAddressKHR vkGetBufferOpaqueCaptureAddressKHR; | |||
| PFN_vkGetDeviceMemoryOpaqueCaptureAddressKHR vkGetDeviceMemoryOpaqueCaptureAddressKHR; | |||
| // VK_KHR_create_renderpass2 | |||
| PFN_vkCmdBeginRenderPass2KHR vkCmdBeginRenderPass2KHR; | |||
| PFN_vkCmdEndRenderPass2KHR vkCmdEndRenderPass2KHR; | |||
| PFN_vkCmdNextSubpass2KHR vkCmdNextSubpass2KHR; | |||
| PFN_vkCreateRenderPass2KHR vkCreateRenderPass2KHR; | |||
| // VK_KHR_descriptor_update_template | |||
| PFN_vkCreateDescriptorUpdateTemplateKHR vkCreateDescriptorUpdateTemplateKHR; | |||
| PFN_vkDestroyDescriptorUpdateTemplateKHR vkDestroyDescriptorUpdateTemplateKHR; | |||
| @@ -312,7 +398,6 @@ public: | |||
| // VK_KHR_get_memory_requirements2 | |||
| PFN_vkGetImageMemoryRequirements2KHR vkGetImageMemoryRequirements2KHR; | |||
| PFN_vkGetBufferMemoryRequirements2KHR vkGetBufferMemoryRequirements2KHR; | |||
| PFN_vkGetImageSparseMemoryRequirements2KHR vkGetImageSparseMemoryRequirements2KHR; | |||
| // VK_KHR_maintenance1 | |||
| PFN_vkTrimCommandPoolKHR vkTrimCommandPoolKHR; | |||
| @@ -24,8 +24,6 @@ | |||
| #if NCNN_VULKAN | |||
| #include "command.h" | |||
| #include "pipeline.h" | |||
| #include <vulkan/vulkan.h> | |||
| #endif // NCNN_VULKAN | |||
| namespace ncnn { | |||
| @@ -41,10 +41,6 @@ | |||
| #include "option.h" | |||
| #include "platform.h" | |||
| #if NCNN_VULKAN | |||
| #include <vulkan/vulkan.h> | |||
| #endif // NCNN_VULKAN | |||
| #if NCNN_PIXEL | |||
| #if NCNN_PLATFORM_API | |||
| #if __ANDROID_API__ >= 9 | |||
| @@ -19,8 +19,6 @@ | |||
| #include "platform.h" | |||
| #if NCNN_VULKAN | |||
| #include "gpu.h" | |||
| #include <vulkan/vulkan.h> | |||
| #endif // NCNN_VULKAN | |||
| namespace ncnn { | |||
| @@ -17,10 +17,6 @@ | |||
| #include "platform.h" | |||
| #if NCNN_VULKAN | |||
| #include <vulkan/vulkan.h> | |||
| #endif // NCNN_VULKAN | |||
| #include "mat.h" | |||
| #include "gpu.h" | |||
| @@ -30,6 +30,7 @@ | |||
| #cmakedefine01 NCNN_PIXEL_AFFINE | |||
| #cmakedefine01 NCNN_PIXEL_DRAWING | |||
| #cmakedefine01 NCNN_VULKAN | |||
| #cmakedefine01 NCNN_SIMPLEVK | |||
| #cmakedefine01 NCNN_SYSTEM_GLSLANG | |||
| #cmakedefine01 NCNN_RUNTIME_CPU | |||
| #cmakedefine01 NCNN_GNU_INLINE_ASM | |||
| @@ -276,6 +277,15 @@ static inline void swap_endianness_32(void* x) | |||
| #include <fenv.h> | |||
| #endif | |||
| #if NCNN_VULKAN | |||
| #if NCNN_SIMPLEVK | |||
| #include "simplevk.h" | |||
| #else | |||
| #include <vulkan/vulkan.h> | |||
| #endif | |||
| #include "vulkan_header_fix.h" | |||
| #endif // NCNN_VULKAN | |||
| #endif // __cplusplus | |||
| #if NCNN_STDIO | |||
| @@ -0,0 +1,614 @@ | |||
| // Tencent is pleased to support the open source community by making ncnn available. | |||
| // | |||
| // Copyright (C) 2023 THL A29 Limited, a Tencent company. All rights reserved. | |||
| // | |||
| // Licensed under the BSD 3-Clause License (the "License"); you may not use this file except | |||
| // in compliance with the License. You may obtain a copy of the License at | |||
| // | |||
| // https://opensource.org/licenses/BSD-3-Clause | |||
| // | |||
| // Unless required by applicable law or agreed to in writing, software distributed | |||
| // under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR | |||
| // CONDITIONS OF ANY KIND, either express or implied. See the License for the | |||
| // specific language governing permissions and limitations under the License. | |||
| #include "platform.h" | |||
| #if NCNN_VULKAN | |||
| #if NCNN_SIMPLEVK | |||
| #include "simplevk.h" | |||
| #include <stdio.h> | |||
| #include <stdlib.h> | |||
| #include <string.h> | |||
| #if defined _WIN32 | |||
| #define WIN32_LEAN_AND_MEAN | |||
| #include <windows.h> | |||
| #else | |||
| #include <dlfcn.h> | |||
| #include <sys/types.h> | |||
| #include <unistd.h> | |||
| #if defined __ANDROID__ | |||
| #include <dirent.h> | |||
| #include <fcntl.h> | |||
| #include <sys/stat.h> | |||
| #endif | |||
| #endif | |||
| #if __APPLE__ | |||
| // always use static vulkan linkage on apple platform | |||
| extern "C" VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetInstanceProcAddr(VkInstance instance, const char* pName); | |||
| #endif | |||
| namespace ncnn { | |||
| // vulkan loader entrypoint | |||
| PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr = 0; | |||
| // vulkan global functions | |||
| PFN_vkEnumerateInstanceExtensionProperties vkEnumerateInstanceExtensionProperties = 0; | |||
| PFN_vkCreateInstance vkCreateInstance = 0; | |||
| PFN_vkEnumerateInstanceLayerProperties vkEnumerateInstanceLayerProperties = 0; | |||
| #if __APPLE__ | |||
| int load_vulkan_driver(const char* /*driver_path*/) | |||
| { | |||
| unload_vulkan_driver(); | |||
| vkGetInstanceProcAddr = ::vkGetInstanceProcAddr; | |||
| vkEnumerateInstanceExtensionProperties = (PFN_vkEnumerateInstanceExtensionProperties)vkGetInstanceProcAddr(NULL, "vkEnumerateInstanceExtensionProperties"); | |||
| vkCreateInstance = (PFN_vkCreateInstance)vkGetInstanceProcAddr(NULL, "vkCreateInstance"); | |||
| vkEnumerateInstanceLayerProperties = (PFN_vkEnumerateInstanceLayerProperties)vkGetInstanceProcAddr(NULL, "vkEnumerateInstanceLayerProperties"); | |||
| return 0; | |||
| } | |||
| void unload_vulkan_driver() | |||
| { | |||
| vkGetInstanceProcAddr = 0; | |||
| vkEnumerateInstanceExtensionProperties = 0; | |||
| vkCreateInstance = 0; | |||
| vkEnumerateInstanceLayerProperties = 0; | |||
| } | |||
| #else // __APPLE__ | |||
| #if defined _WIN32 | |||
| static HMODULE g_libvulkan = 0; | |||
| #else | |||
| static void* g_libvulkan = 0; | |||
| #if defined __ANDROID__ | |||
| struct hw_module_t; | |||
| struct hw_module_methods_t; | |||
| struct hw_device_t; | |||
| struct hw_module_methods_t | |||
| { | |||
| /** Open a specific device */ | |||
| int (*open)(const hw_module_t* mod, const char* id, hw_device_t** device); | |||
| }; | |||
| struct hw_device_t | |||
| { | |||
| /** tag must be initialized to HARDWARE_DEVICE_TAG */ | |||
| uint32_t tag; | |||
| uint32_t version; | |||
| /** reference to the module this device belongs to */ | |||
| hw_module_t* mod; | |||
| /** padding reserved for future use */ | |||
| #ifdef __LP64__ | |||
| uint64_t reserved[12]; | |||
| #else | |||
| uint32_t reserved[12]; | |||
| #endif | |||
| /** Close this device */ | |||
| int (*close)(hw_device_t* device); | |||
| }; | |||
| struct hw_module_t | |||
| { | |||
| /** tag must be initialized to HARDWARE_MODULE_TAG */ | |||
| uint32_t tag; | |||
| uint16_t module_api_version; | |||
| uint16_t hal_api_version; | |||
| const char* id; | |||
| const char* name; | |||
| const char* author; | |||
| hw_module_methods_t* methods; | |||
| void* dso; | |||
| #ifdef __LP64__ | |||
| uint64_t reserved[32 - 7]; | |||
| #else | |||
| /** padding to 128 bytes, reserved for future use */ | |||
| uint32_t reserved[32 - 7]; | |||
| #endif | |||
| }; | |||
| struct hwvulkan_module_t : public hw_module_t | |||
| { | |||
| }; | |||
| struct hwvulkan_device_t : public hw_device_t | |||
| { | |||
| PFN_vkEnumerateInstanceExtensionProperties EnumerateInstanceExtensionProperties; | |||
| PFN_vkCreateInstance CreateInstance; | |||
| PFN_vkGetInstanceProcAddr GetInstanceProcAddr; | |||
| }; | |||
| // android hal vulkan loader | |||
| static hwvulkan_device_t* g_hvkdi = 0; | |||
| #endif | |||
| #endif | |||
| static std::string get_driver_path_from_icd(const char* icd_path) | |||
| { | |||
| FILE* fp = fopen(icd_path, "rb"); | |||
| if (!fp) | |||
| return std::string(); | |||
| std::string driver_path; | |||
| char line[256]; | |||
| while (!feof(fp)) | |||
| { | |||
| char* s = fgets(line, 256, fp); | |||
| if (!s) | |||
| break; | |||
| // "library_path": "path to driver library", | |||
| char path[256]; | |||
| int nscan = sscanf(line, " \"library_path\" : \"%255[^\"]\"", path); | |||
| if (nscan == 1) | |||
| { | |||
| if (path[0] == '.' || (path[0] != '/' && !strchr(path, ':') && (strchr(path, '/') || strchr(path, '\\')))) | |||
| { | |||
| // relative to the icd file path | |||
| std::string icd_dir = icd_path; | |||
| size_t dirpos = icd_dir.find_last_of("/\\"); | |||
| if (dirpos != std::string::npos) | |||
| { | |||
| icd_dir = icd_dir.substr(0, dirpos + 1); | |||
| } | |||
| else | |||
| { | |||
| icd_dir = "./"; | |||
| } | |||
| driver_path = icd_dir + path; | |||
| } | |||
| else | |||
| { | |||
| // filename or absolute path | |||
| driver_path = path; | |||
| } | |||
| break; | |||
| } | |||
| } | |||
| fclose(fp); | |||
| return driver_path; | |||
| } | |||
| static std::string get_driver_path_from_icd_env() | |||
| { | |||
| const char* icd_path = getenv("VK_ICD_FILENAMES"); | |||
| if (!icd_path) | |||
| return std::string(); | |||
| return get_driver_path_from_icd(icd_path); | |||
| } | |||
| static std::string get_driver_path_from_ncnn_env() | |||
| { | |||
| const char* driver_path = getenv("NCNN_VULKAN_DRIVER"); | |||
| if (!driver_path) | |||
| return std::string(); | |||
| return std::string(driver_path); | |||
| } | |||
| #if defined _WIN32 | |||
| static std::string search_file(const std::string& dirpath, const std::string& needle) | |||
| { | |||
| WIN32_FIND_DATA file; | |||
| HANDLE handle = FindFirstFileA((dirpath + "\\*").c_str(), &file); | |||
| if (handle == INVALID_HANDLE_VALUE) | |||
| return std::string(); | |||
| int found = 0; | |||
| std::vector<std::string> subdirs; | |||
| do | |||
| { | |||
| std::string name = file.cFileName; | |||
| if (file.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) | |||
| { | |||
| if (name != "." && name != "..") | |||
| subdirs.push_back(name); | |||
| } | |||
| else if (name == needle) | |||
| { | |||
| found = 1; | |||
| break; | |||
| } | |||
| } while (FindNextFileA(handle, &file)); | |||
| FindClose(handle); | |||
| if (found) | |||
| return dirpath + "\\" + needle; | |||
| // recurse into subdirs | |||
| for (int i = 0; i < subdirs.size(); ++i) | |||
| { | |||
| std::string found_path = search_file(dirpath + "\\" + subdirs[i], needle); | |||
| if (!found_path.empty()) | |||
| return found_path; | |||
| } | |||
| return std::string(); | |||
| } | |||
| static int load_vulkan_windows(const char* driver_path) | |||
| { | |||
| const char* libpath = driver_path ? driver_path : "vulkan-1.dll"; | |||
| HMODULE libvulkan = LoadLibraryA(libpath); | |||
| if (!libvulkan) | |||
| { | |||
| NCNN_LOGE("LoadLibraryA %s failed %d", libpath, GetLastError()); | |||
| return -1; | |||
| } | |||
| PFN_vkGetInstanceProcAddr GetInstanceProcAddr = 0; | |||
| GetInstanceProcAddr = (PFN_vkGetInstanceProcAddr)GetProcAddress(libvulkan, "vk_icdGetInstanceProcAddr"); | |||
| if (GetInstanceProcAddr) | |||
| { | |||
| // load icd driver | |||
| typedef VkResult(VKAPI_PTR * PFN_icdNegotiateLoaderICDInterfaceVersion)(uint32_t * pSupportedVersion); | |||
| PFN_icdNegotiateLoaderICDInterfaceVersion icdNegotiateLoaderICDInterfaceVersion = (PFN_icdNegotiateLoaderICDInterfaceVersion)GetProcAddress(libvulkan, "vk_icdNegotiateLoaderICDInterfaceVersion"); | |||
| if (icdNegotiateLoaderICDInterfaceVersion) | |||
| { | |||
| uint32_t supported_version = 5; | |||
| VkResult ret = icdNegotiateLoaderICDInterfaceVersion(&supported_version); | |||
| if (ret != VK_SUCCESS) | |||
| { | |||
| NCNN_LOGE("icdNegotiateLoaderICDInterfaceVersion failed"); | |||
| FreeLibrary(libvulkan); | |||
| return -1; | |||
| } | |||
| } | |||
| } | |||
| else | |||
| { | |||
| GetInstanceProcAddr = (PFN_vkGetInstanceProcAddr)GetProcAddress(libvulkan, "vkGetInstanceProcAddr"); | |||
| if (!GetInstanceProcAddr) | |||
| { | |||
| NCNN_LOGE("GetProcAddress failed %d", GetLastError()); | |||
| FreeLibrary(libvulkan); | |||
| return -1; | |||
| } | |||
| } | |||
| g_libvulkan = libvulkan; | |||
| vkGetInstanceProcAddr = GetInstanceProcAddr; | |||
| vkEnumerateInstanceExtensionProperties = (PFN_vkEnumerateInstanceExtensionProperties)vkGetInstanceProcAddr(NULL, "vkEnumerateInstanceExtensionProperties"); | |||
| vkCreateInstance = (PFN_vkCreateInstance)vkGetInstanceProcAddr(NULL, "vkCreateInstance"); | |||
| vkEnumerateInstanceLayerProperties = (PFN_vkEnumerateInstanceLayerProperties)vkGetInstanceProcAddr(NULL, "vkEnumerateInstanceLayerProperties"); | |||
| return 0; | |||
| } | |||
| #else | |||
| static int load_vulkan_linux(const char* driver_path) | |||
| { | |||
| #if __APPLE__ | |||
| const char* libpath = driver_path ? driver_path : "libvulkan.dylib"; | |||
| #else | |||
| const char* libpath = driver_path ? driver_path : "libvulkan.so"; | |||
| #endif | |||
| void* libvulkan = dlopen(libpath, RTLD_LOCAL | RTLD_NOW); | |||
| if (!libvulkan) | |||
| { | |||
| NCNN_LOGE("dlopen failed %s", dlerror()); | |||
| return -1; | |||
| } | |||
| PFN_vkGetInstanceProcAddr GetInstanceProcAddr = 0; | |||
| GetInstanceProcAddr = (PFN_vkGetInstanceProcAddr)dlsym(libvulkan, "vk_icdGetInstanceProcAddr"); | |||
| if (GetInstanceProcAddr) | |||
| { | |||
| // load icd driver | |||
| typedef VkResult(VKAPI_PTR * PFN_icdNegotiateLoaderICDInterfaceVersion)(uint32_t * pSupportedVersion); | |||
| PFN_icdNegotiateLoaderICDInterfaceVersion icdNegotiateLoaderICDInterfaceVersion = (PFN_icdNegotiateLoaderICDInterfaceVersion)dlsym(libvulkan, "vk_icdNegotiateLoaderICDInterfaceVersion"); | |||
| if (icdNegotiateLoaderICDInterfaceVersion) | |||
| { | |||
| uint32_t supported_version = 5; | |||
| VkResult ret = icdNegotiateLoaderICDInterfaceVersion(&supported_version); | |||
| if (ret != VK_SUCCESS) | |||
| { | |||
| NCNN_LOGE("icdNegotiateLoaderICDInterfaceVersion failed"); | |||
| dlclose(libvulkan); | |||
| return -1; | |||
| } | |||
| } | |||
| } | |||
| else | |||
| { | |||
| GetInstanceProcAddr = (PFN_vkGetInstanceProcAddr)dlsym(libvulkan, "vkGetInstanceProcAddr"); | |||
| if (!GetInstanceProcAddr) | |||
| { | |||
| NCNN_LOGE("dlsym failed %s", dlerror()); | |||
| dlclose(libvulkan); | |||
| return -1; | |||
| } | |||
| } | |||
| g_libvulkan = libvulkan; | |||
| vkGetInstanceProcAddr = GetInstanceProcAddr; | |||
| vkEnumerateInstanceExtensionProperties = (PFN_vkEnumerateInstanceExtensionProperties)vkGetInstanceProcAddr(NULL, "vkEnumerateInstanceExtensionProperties"); | |||
| vkCreateInstance = (PFN_vkCreateInstance)vkGetInstanceProcAddr(NULL, "vkCreateInstance"); | |||
| vkEnumerateInstanceLayerProperties = (PFN_vkEnumerateInstanceLayerProperties)vkGetInstanceProcAddr(NULL, "vkEnumerateInstanceLayerProperties"); | |||
| return 0; | |||
| } | |||
| #if defined __ANDROID__ | |||
| static int load_vulkan_android(const char* driver_path) | |||
| { | |||
| char hal_driver_path[256]; | |||
| if (!driver_path) | |||
| { | |||
| // https://source.android.com/docs/core/graphics/implement-vulkan#driver_emun | |||
| // /vendor/lib/hw/vulkan.<ro.hardware.vulkan>.so | |||
| // /vendor/lib/hw/vulkan.<ro.product.platform>.so | |||
| // /vendor/lib64/hw/vulkan.<ro.hardware.vulkan>.so | |||
| // /vendor/lib64/hw/vulkan.<ro.product.platform>.so | |||
| #ifdef __LP64__ | |||
| DIR* d = opendir("/vendor/lib64/hw"); | |||
| #else | |||
| DIR* d = opendir("/vendor/lib/hw"); | |||
| #endif | |||
| if (!d) | |||
| return -1; | |||
| int hal_driver_found = 0; | |||
| struct dirent* dir; | |||
| while ((dir = readdir(d)) != NULL) | |||
| { | |||
| char platform[256]; | |||
| int nscan = sscanf(dir->d_name, "vulkan.%255s.so", platform); | |||
| if (nscan == 1) | |||
| { | |||
| #ifdef __LP64__ | |||
| snprintf(hal_driver_path, 256, "/vendor/lib64/hw/%s", dir->d_name); | |||
| #else | |||
| snprintf(hal_driver_path, 256, "/vendor/lib/hw/%s", dir->d_name); | |||
| #endif | |||
| hal_driver_found = 1; | |||
| break; | |||
| } | |||
| } | |||
| closedir(d); | |||
| if (!hal_driver_found) | |||
| { | |||
| NCNN_LOGE("no hal driver found"); | |||
| return -1; | |||
| } | |||
| NCNN_LOGE("hal_driver_path = %s", hal_driver_path); | |||
| } | |||
| const char* libpath = driver_path ? driver_path : hal_driver_path; | |||
| void* libvulkan = dlopen(libpath, RTLD_LOCAL | RTLD_NOW); | |||
| if (!libvulkan) | |||
| { | |||
| NCNN_LOGE("dlopen failed %s", dlerror()); | |||
| return -1; | |||
| } | |||
| // resolve entrypoint from android hal module | |||
| hw_module_t* hmi = 0; | |||
| hmi = (hw_module_t*)dlsym(libvulkan, "HMI"); | |||
| if (!hmi) | |||
| { | |||
| NCNN_LOGE("dlsym failed %s", dlerror()); | |||
| dlclose(libvulkan); | |||
| return -1; | |||
| } | |||
| if (strcmp(hmi->id, "vulkan") != 0) | |||
| { | |||
| NCNN_LOGE("hmi->id != vulkan"); | |||
| dlclose(libvulkan); | |||
| return -1; | |||
| } | |||
| hwvulkan_module_t* hvkmi = (hwvulkan_module_t*)hmi; | |||
| // NCNN_LOGE("hvkmi name = %s", hvkmi->name); | |||
| // NCNN_LOGE("hvkmi author = %s", hvkmi->author); | |||
| hwvulkan_device_t* hvkdi = 0; | |||
| int result = hvkmi->methods->open(hvkmi, "vk0", (hw_device_t**)&hvkdi); | |||
| if (result != 0) | |||
| { | |||
| NCNN_LOGE("hmi->open failed %d", result); | |||
| dlclose(libvulkan); | |||
| return -1; | |||
| } | |||
| g_libvulkan = libvulkan; | |||
| g_hvkdi = hvkdi; | |||
| vkGetInstanceProcAddr = hvkdi->GetInstanceProcAddr; | |||
| vkEnumerateInstanceExtensionProperties = hvkdi->EnumerateInstanceExtensionProperties; | |||
| vkCreateInstance = hvkdi->CreateInstance; | |||
| vkEnumerateInstanceLayerProperties = (PFN_vkEnumerateInstanceLayerProperties)vkGetInstanceProcAddr(NULL, "vkEnumerateInstanceLayerProperties"); | |||
| return 0; | |||
| } | |||
| #endif // __ANDROID__ | |||
| #endif // _WIN32 | |||
| int load_vulkan_driver(const char* driver_path) | |||
| { | |||
| unload_vulkan_driver(); | |||
| int ret = 0; | |||
| std::string driver_path_from_icd_env; | |||
| std::string driver_path_from_ncnn_env; | |||
| if (driver_path == 0) | |||
| { | |||
| driver_path_from_icd_env = get_driver_path_from_icd_env(); | |||
| if (!driver_path_from_icd_env.empty()) | |||
| { | |||
| driver_path = driver_path_from_icd_env.c_str(); | |||
| } | |||
| else | |||
| { | |||
| driver_path_from_ncnn_env = get_driver_path_from_ncnn_env(); | |||
| if (!driver_path_from_ncnn_env.empty()) | |||
| { | |||
| driver_path = driver_path_from_ncnn_env.c_str(); | |||
| } | |||
| } | |||
| } | |||
| // first try, load from driver_path | |||
| #if defined _WIN32 | |||
| ret = load_vulkan_windows(driver_path); | |||
| #else | |||
| ret = load_vulkan_linux(driver_path); | |||
| #if defined __ANDROID__ | |||
| if (ret != 0) | |||
| { | |||
| // second try, load from android hal module | |||
| ret = load_vulkan_android(driver_path); | |||
| } | |||
| #endif // __ANDROID__ | |||
| #endif // _WIN32 | |||
| if (driver_path != 0 && ret != 0) | |||
| { | |||
| // third try, load from system vulkan | |||
| #if defined _WIN32 | |||
| ret = load_vulkan_windows(0); | |||
| #else | |||
| ret = load_vulkan_linux(0); | |||
| #if defined __ANDROID__ | |||
| if (ret != 0) | |||
| { | |||
| // fourth try, load from any android hal module found | |||
| ret = load_vulkan_android(0); | |||
| } | |||
| #endif // __ANDROID__ | |||
| #endif // _WIN32 | |||
| } | |||
| if (ret != 0) | |||
| { | |||
| // fifth try, load from well-known path | |||
| #if defined _WIN32 | |||
| const char* well_known_path[] = { | |||
| #if defined(__x86_64__) || defined(_M_X64) | |||
| "nvoglv64.dll", | |||
| "amdvlk64.dll", | |||
| "igvk64.dll" | |||
| #else | |||
| "nvoglv32.dll", | |||
| "amdvlk32.dll", | |||
| "igvk32.dll" | |||
| #endif | |||
| }; | |||
| #elif defined __ANDROID__ | |||
| const char* well_known_path[] = { | |||
| #ifdef __LP64__ | |||
| "/vendor/lib64/hw/vulkan.adreno.so", | |||
| "/vendor/lib64/egl/libGLES_mali.so" | |||
| #else | |||
| "/vendor/lib/hw/vulkan.adreno.so", | |||
| "/vendor/lib/egl/libGLES_mali.so" | |||
| #endif | |||
| }; | |||
| #else | |||
| const char* well_known_path[] = { | |||
| "libGLX_nvidia.so.0", | |||
| "libvulkan_radeon.so", | |||
| "libvulkan_intel.so", | |||
| "libMaliVulkan.so.1", | |||
| "libVK_IMG.so" | |||
| }; | |||
| #endif | |||
| const int well_known_path_count = sizeof(well_known_path) / sizeof(const char*); | |||
| for (int i = 0; i < well_known_path_count; i++) | |||
| { | |||
| #if defined _WIN32 | |||
| // find driver dll in C:\\Windows\\System32\\DriverStore\\FileRepository | |||
| std::string dllpath = search_file("C:\\Windows\\System32\\DriverStore\\FileRepository", well_known_path[i]); | |||
| if (dllpath.empty()) | |||
| continue; | |||
| ret = load_vulkan_windows(well_known_path[i]); | |||
| #elif defined __ANDROID__ | |||
| ret = load_vulkan_android(well_known_path[i]); | |||
| #else | |||
| ret = load_vulkan_linux(well_known_path[i]); | |||
| #endif | |||
| if (ret == 0) | |||
| break; | |||
| } | |||
| } | |||
| return ret; | |||
| } | |||
| void unload_vulkan_driver() | |||
| { | |||
| vkGetInstanceProcAddr = 0; | |||
| vkEnumerateInstanceExtensionProperties = 0; | |||
| vkCreateInstance = 0; | |||
| vkEnumerateInstanceLayerProperties = 0; | |||
| #if defined _WIN32 | |||
| if (g_libvulkan) | |||
| { | |||
| FreeLibrary(g_libvulkan); | |||
| g_libvulkan = 0; | |||
| } | |||
| #else | |||
| #if defined __ANDROID__ | |||
| if (g_hvkdi) | |||
| { | |||
| if (g_hvkdi->close) | |||
| { | |||
| g_hvkdi->close(g_hvkdi); | |||
| } | |||
| g_hvkdi = 0; | |||
| } | |||
| #endif // __ANDROID__ | |||
| if (g_libvulkan) | |||
| { | |||
| dlclose(g_libvulkan); | |||
| g_libvulkan = 0; | |||
| } | |||
| #endif // _WIN32 | |||
| } | |||
| #endif // __APPLE__ | |||
| } // namespace ncnn | |||
| #endif // NCNN_SIMPLEVK | |||
| #endif // NCNN_VULKAN | |||