3333
3434jobs :
3535 Build :
36- runs-on : windows-2025
36+ runs-on : ${{ matrix.runs-on }}
3737 strategy :
3838 fail-fast : false
3939 matrix :
4040 python-version : ['3.13']
4141 platform : [x64]
42+ cuda-version : ['12', '13']
43+ include :
44+ # CUDA 12: Supports Maxwell (5.0) through Blackwell (10.0)
45+ # Uses windows-2025 runner
46+ - cuda-version : ' 12'
47+ runs-on : ' windows-2025'
48+ cuda-installer : ' cuda_12.9.1_windows_network.exe'
49+ cuda-path-version : ' v12.9'
50+ cudnn-archive : ' cudnn-windows-x86_64-9.18.1.3_cuda12-archive.zip'
51+ cudnn-folder : ' cudnn-windows-x86_64-9.18.1.3_cuda12-archive'
52+ cuda-arch-bin : ' 5.0;5.2;6.0;6.1;7.0;7.5;8.0;8.6;8.9;9.0;10.0'
53+ cuda-arch-ptx : ' 10.0'
54+ cache-key : ' nvidia-deps-cuda-12.9.1-cudnn-9.18.1.3'
55+ # CUDA 13: Supports Turing (7.5) through Blackwell (12.0)
56+ # Uses windows-2022 runner for MSVC 193x compatibility
57+ - cuda-version : ' 13'
58+ runs-on : ' windows-2022'
59+ cuda-installer : ' cuda_13.1.1_windows_network.exe'
60+ cuda-path-version : ' v13.1'
61+ cudnn-archive : ' cudnn-windows-x86_64-9.18.1.3_cuda13-archive.zip'
62+ cudnn-folder : ' cudnn-windows-x86_64-9.18.1.3_cuda13-archive'
63+ cuda-arch-bin : ' 7.5;8.0;8.6;8.9;9.0;10.0;12.0'
64+ cuda-arch-ptx : ' 12.0'
65+ cache-key : ' nvidia-deps-cuda-13.1.1-cudnn-9.18.1.3'
4266 env :
4367 ACTIONS_ALLOW_UNSECURE_COMMANDS : true
4468 SDIST : 0
4569 ENABLE_HEADLESS : 0
4670 ENABLE_CONTRIB : 1
4771 ENABLE_ROLLING : ${{ inputs.rolling_build && 1 || 0 }}
4872 OPENCV_TEST_DATA_PATH : ${{ github.workspace }}\opencv_extra\testdata
73+ CUDA_ARCH_BIN : ${{ matrix.cuda-arch-bin }}
74+ CUDA_ARCH_PTX : ${{ matrix.cuda-arch-ptx }}
4975 steps :
5076 - name : Cleanup
5177 shell : bash
7298 uses : actions/cache@v3
7399 with :
74100 path : .deps/Nvidia
75- key : nvidia-deps-cuda-12.4.0-cudnn-8.9.7.29
101+ key : ${{ matrix.cache-key }}
76102 - name : Clone NVIDIA dependencies
77103 if : steps.cache-nvidia-deps.outputs.cache-hit != 'true'
78104 env :
@@ -85,27 +111,26 @@ jobs:
85111 shell : bash
86112 - name : 🔧 Install NVIDIA CUDA Toolkit
87113 run : |
88- $installer_path = ".deps/Nvidia/cuda_12.4.0_windows_network.exe "
114+ $installer_path = ".deps/Nvidia/${{ matrix.cuda-installer }} "
89115 if (-not (Test-Path $installer_path)) {
90116 throw "CUDA Toolkit installer not found at $installer_path"
91117 }
92- echo "Installing CUDA Toolkit silently..."
93- $arguments = "-s nvcc_12.4 cudart_12.4 cublas_12.4 cublas_dev_12.4 cufft_12.4 cufft_dev_12.4 npp_12.4 npp_dev_12.4"
94- Start-Process -FilePath $installer_path -ArgumentList $arguments -Wait -NoNewWindow
118+ echo "Installing CUDA ${{ matrix.cuda-version }} Toolkit silently..."
119+ Start-Process -FilePath $installer_path -ArgumentList "-s" -Wait -NoNewWindow
95120 echo "Adding CUDA to PATH..."
96- $CUDA_PATH = "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.4 "
121+ $CUDA_PATH = "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\${{ matrix.cuda-path-version }} "
97122 echo "CUDA_PATH=$CUDA_PATH" | Out-File -FilePath $env:GITHUB_ENV -Append
98123 Copy-Item -Path "$CUDA_PATH/bin/*" -Destination . -Include "*.dll"
99124 shell : pwsh
100125 - name : 🔧 Install NVIDIA CuDNN
101126 run : |
102- $cudnn_path = ".deps/Nvidia/cudnn-windows-x86_64-8.9.7.29_cuda12- archive.zip "
127+ $cudnn_path = ".deps/Nvidia/${{ matrix. cudnn-archive }} "
103128 if (-not (Test-Path $cudnn_path)) {
104129 throw "CuDNN archive not found at $cudnn_path"
105130 }
106- echo "Installing CuDNN..."
131+ echo "Installing CuDNN for CUDA ${{ matrix.cuda-version }} ..."
107132 7z x $cudnn_path
108- $CUDNN_PATH = "D:/a/opencv-python-cuda/opencv-python-cuda/cudnn-windows-x86_64-8.9.7.29_cuda12-archive "
133+ $CUDNN_PATH = "D:/a/opencv-python-cuda/opencv-python-cuda/${{ matrix. cudnn-folder }} "
109134 echo "CUDNN_LIBRARY=$CUDNN_PATH/lib/x64/cudnn.lib" | Out-File -FilePath $env:GITHUB_ENV -Append
110135 echo "CUDNN_INCLUDE_DIR=$CUDNN_PATH/include" | Out-File -FilePath $env:GITHUB_ENV -Append
111136 Copy-Item -Path "$CUDNN_PATH/bin/*" -Destination . -Include "*.dll"
@@ -116,9 +141,9 @@ jobs:
116141 if : ${{ inputs.restore_build_cache && !inputs.rolling_build }}
117142 with :
118143 path : _skbuild
119- key : ${{ runner.os }}-${{ matrix.python-version }}-${{ hashFiles('**/CMakeLists.txt') }}
144+ key : ${{ runner.os }}-${{ matrix.python-version }}-cuda${{ matrix.cuda-version }}- ${{ hashFiles('**/CMakeLists.txt') }}
120145 restore-keys : |
121- ${{ runner.os }}-${{ matrix.python-version }}-
146+ ${{ runner.os }}-${{ matrix.python-version }}-cuda${{ matrix.cuda-version }}-
122147
123148 - name : Build a package
124149 # CMake 3.25 regression fix. See https://stackoverflow.com/questions/74162633/problem-compiling-from-source-opencv-with-mvsc2019-in-64-bit-version
@@ -140,11 +165,11 @@ jobs:
140165 if : ${{ inputs.save_build_cache && !inputs.rolling_build }}
141166 with :
142167 path : _skbuild
143- key : ${{ runner.os }}-${{ matrix.python-version }}-${{ hashFiles('**/CMakeLists.txt') }}
168+ key : ${{ runner.os }}-${{ matrix.python-version }}-cuda${{ matrix.cuda-version }}- ${{ hashFiles('**/CMakeLists.txt') }}
144169 - name : Saving all wheels
145170 uses : actions/upload-artifact@v4
146171 with :
147- name : wheel-cuda-${{ matrix.platform }}
172+ name : wheel-cuda${{ matrix.cuda-version }} -${{ matrix.platform }}
148173 path : wheelhouse/opencv*
149174
150175 Test :
@@ -158,6 +183,7 @@ jobs:
158183 matrix :
159184 python-version : ['3.12']
160185 platform : [x64]
186+ cuda-version : ['12', '13']
161187 env :
162188 ACTIONS_ALLOW_UNSECURE_COMMANDS : true
163189 OPENCV_TEST_DATA_PATH : ${{ github.workspace }}\opencv_extra\testdata
@@ -182,7 +208,7 @@ jobs:
182208 - name : Download a wheel accordingly to matrix
183209 uses : actions/download-artifact@v4
184210 with :
185- name : wheel-cuda-${{ matrix.platform }}
211+ name : wheel-cuda${{ matrix.cuda-version }} -${{ matrix.platform }}
186212 path : wheelhouse/
187213 - name : Package installation
188214 run : |
0 commit comments