Skip to content

Conversation

@Aero-Ex
Copy link

@Aero-Ex Aero-Ex commented Nov 14, 2025

No description provided.

Aero-Ex and others added 26 commits November 14, 2025 11:10
Updated Python version to 3.11 in workflow.
Updated the GitHub Actions workflow for building nvdiffrast on Windows. Changes include setting up Python 3.11, installing dependencies, and building the nvdiffrast wheel.
- Modified setup.py to support building binary wheels with pre-compiled CUDA extensions
- Updated ops.py to load pre-compiled extensions when available (falls back to JIT)
- Added GitHub Actions workflow for automated binary wheel building
- Includes support for Python 3.11, PyTorch 2.2.2, CUDA 11.8
- Binary wheels eliminate need for MSVC Build Tools at runtime
- Backwards compatible with original source wheel behavior
- Replace emoji characters with ASCII text in setup.py
- Replace emoji characters in ops.py logging
- Replace emoji characters in workflow Python commands
- Fixes UnicodeEncodeError in Windows CI environment (cp1252 encoding)
- All emojis replaced with [BUILD], [OK], [WARNING] tags
- Delete build-nvdiffrast-windows.yml which builds source wheels
- Keep only build_binary_wheel.yml which builds true binary wheels
- Prevents confusion about which artifact to download
- Change runner from windows-2019 to windows-2022
- Windows 2019 runners retired as of 2025-06-30
- Windows 2022 also has MSVC pre-installed
- Update cuda-toolkit action from v0.2.14 to v0.2.18
- Disable GitHub and local caching (use-github-cache: false)
- Fixes 'Got no files in tool cahce' error
- Avoids cache service issues
- MSVC is installed but not in PATH during verification
- Build tools will auto-detect and configure MSVC environment
- Changed verification to optional check with error handling
- Workflow will continue even if cl.exe not found in PATH
- Add explicit 'exit 0' at end of verification script
- Check LASTEXITCODE instead of try-catch for cl.exe
- Prevents PowerShell from propagating non-zero exit code
- Verification step will always succeed now
- Add 'continue-on-error: true' to verification step
- Suppress where.exe output with Out-Null
- Set ErrorActionPreference to Continue
- Workflow will proceed even if verification fails
- This is just an informational step, not critical
- CUDA 11.8 doesn't support latest VS 2022 versions (MSVC 14.44)
- Add -allow-unsupported-compiler flag to nvcc compiler arguments
- This allows compilation with newer MSVC versions
- Recommended by CUDA error message for compatibility
- Latest VS 2022 STL requires CUDA 12.4+, but we use CUDA 11.8
- Add _ALLOW_COMPILER_AND_STL_VERSION_MISMATCH define
- Bypasses STL1002 version check error
- Applied to both cxx and nvcc compiler flags
Compiler flag improvements:
- Add /bigobj flag for large object file support
- Add _SILENCE_ALL_CXX17_DEPRECATION_WARNINGS
- Add --expt-relaxed-constexpr for CUDA constexpr extensions
- Add --expt-extended-lambda for modern C++ lambda support
- Better organized flags with comments

Workflow improvements:
- Add MAX_JOBS=2 to prevent OOM during parallel compilation
- Add DISTUTILS_USE_SDK=1 for proper SDK detection
- Add build log capture with Tee-Object
- Add detailed error reporting (last 50 lines on failure)
- Add build environment variable display

These changes address:
1. CUDA 11.8 + VS 2022 compatibility
2. STL version mismatch
3. Memory constraints during compilation
4. Better debugging for build failures
- Buffer.cpp and other .cpp files use NVDR_CHECK_CUDA_ERROR macro
- This macro is only defined when NVDR_TORCH is set
- Added /DNVDR_TORCH to cxx_flags (was only in nvcc_flags)
- Fixes 'NVDR_CHECK_CUDA_ERROR': identifier not found error
- Add ErrorActionPreference = 'Continue' to prevent stopping on warnings
- Change from Tee-Object to direct redirection (> build.log 2>&1)
- Capture exit code immediately after build command
- Display full build output after completion
- Fixes issue where stderr warnings caused premature failure
- Use vswhere to find Visual Studio installation path
- Import and activate VS DevShell module
- Run Enter-VsDevShell to add cl.exe and MSVC tools to PATH
- Verify cl.exe is accessible before building
- Fixes 'Cannot find compiler cl.exe in PATH' error from nvcc
- Add cusparse (sparse matrix operations)
- Add cublas (linear algebra)
- Add thrust (parallel algorithms)
- Fixes 'cusparse.h': No such file or directory error
- PyTorch requires these libraries for compilation
- Remove sub-packages limitation
- Install complete CUDA 11.8 toolkit with all libraries
- Ensures cusparse.h, cublas.h, thrust headers are included
- Fixes persistent 'cusparse.h not found' error
Add -rdc=true flag to enable relocatable device code compilation.
This fixes the issue where RasterImpl.cpp/RasterImpl.cu and
texture.cpp/texture.cu were both compiling to the same .obj file
names, causing the linker to ignore one and resulting in unresolved
symbols.

Also add cudadevrt library which is required when using -rdc=true.
PyTorch's CUDAExtension skips compiling .cpp files when a .cu file
with the same base name exists. This caused RasterImpl.cpp and
texture.cpp to not be compiled, resulting in unresolved symbols.

Changes:
- Renamed RasterImpl.cpp -> RasterImpl_host.cpp
- Renamed texture.cpp -> texture_host.cpp
- Updated setup.py to reference renamed files
- Removed -rdc=true flag (was causing __cudaRegisterLinkedBinary errors)
- Removed cudadevrt library dependency

This ensures both CUDA kernel files (.cu) and host implementation
files (.cpp) are compiled into separate object files without conflicts.
Initialize p.strideX and p.strideY before using them in the
byteOffset calculation. Previously, p.strideX was used at line 327
before being initialized at line 331, causing C4700 compiler warning
and potential undefined behavior.

This fix moves the stride initialization to before the calculation
that uses it.
The nvdiffrast_plugin depends on PyTorch and CUDA DLLs which are not
in Windows' DLL search path by default. When torch is imported, it
adds its lib directory to the DLL search path, allowing the plugin
to find its dependencies.

Modified the verification test to import torch before importing the
plugin directly. This ensures the DLL search path is properly
configured.
Moved the wheel upload step to occur immediately after building,
before the test step. This ensures the wheel is preserved even if
tests fail, preventing loss of the built artifact.

The wheel will now be available for download from GitHub Actions
artifacts regardless of test outcome.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants