How to Update RenoDX to the Latest Version: A Step-by-Step Guide
Pull the latest commits, update submodules, run setup-dev-env.ps1 -Update, and rebuild with CMake to update RenoDX to the latest version.
Updating RenoDX requires synchronizing three layers: the source code from the Git repository, external dependencies via submodules, and managed build toolchains. This guide walks through the complete update process based on the official repository structure at clshortfuse/renodx.
Understanding the Update Layers
RenoDX is a DirectX-modding engine that depends on multiple moving parts. Breaking the update into layers prevents version mismatches and build failures.
| Layer | Contents | Update Method |
|---|---|---|
| Source code | C++ core, HLSL shaders, ReShade add-on projects | git pull and submodule refresh |
| Managed toolchain | DXC, glslang, Slang binaries in ./bin |
setup-dev-env.ps1 -Update |
| Build artifacts | Compiled add-ons (*.addon64, devkit, MCP bridge) |
CMake rebuild |
Each layer must be updated in sequence. Skipping the toolchain refresh causes CMake to detect stale compilers; skipping the submodule update leaves external libraries out of sync with the main branch.
Step 1: Pull the Latest Repository State
Start by fetching the newest commits from the upstream repository. The main branch contains the stable release line.
git pull --rebase origin main
This command fast-forwards your local branch to match origin/main without merge commits. If you have local changes, stash them first or resolve rebase conflicts as prompted.
Step 2: Update Git Submodules
RenoDX stores external dependencies under external/ as Git submodules. These libraries must be synchronized separately.
git submodule update --init --recursive
The --recursive flag ensures nested submodules refresh at all depths. This step is documented in docs/CONTRIBUTING.md as a required step after pulling.
Step 3: Refresh the Managed Toolchain
The scripts/setup-dev-env.ps1 PowerShell script automates tool management. It reads version requirements from cmake/tool-versions.cmake and downloads matching binaries.
# From the repository root
powershell -ExecutionPolicy Bypass -File .\scripts\setup-dev-env.ps1 -Update
The -Update flag triggers version checks against the matrix defined in cmake/tool-versions.cmake. When newer releases of DXC, glslang, or Slang are available, the script downloads them to ./bin without removing existing installations.
Key implementation details from the source:
- Version matrix lives in
cmake/tool-versions.cmake(line 1-30) - Downloaded tools are cached in
./binto avoid redundant network requests - The script never downgrades—existing binaries newer than the matrix minimum are preserved
Step 4: Reconfigure CMake
After updating tools, regenerate the build system so CMake detects new compiler paths.
cmake --preset clang-x64
Replace clang-x64 with your preferred preset from CMakePresets.json. Available presets include:
clang-x64— LLVM/Clang toolchain (recommended)ninja-x64— Ninja generator with MSVCvs-x64— Visual Studio 2022 generator
Reconfiguration is necessary because CMake caches absolute paths to tools like DXC. Without this step, the build may reference stale binaries.
Step 5: Rebuild Core and Add-ons
Compile the updated source with your active preset. For release binaries:
cmake --build --preset clang-x64-release
For development tools that support live inspection:
cmake --build --preset clang-x64-debug --target devkit mcp_bridge
Build outputs include:
renodx.addon64— Core ReShade add-onrenodx-devkit.addon64— Runtime shader inspection toolmcp_bridge.exe— Model-context-protocol bridge for external editors
Step 6: Validate with Tests (Optional)
Run the integrated test suite to verify toolchain compatibility:
ctest --preset clang-x64-release
Tests under test/ validate swap-chain upgrades, shader injection, and API wrapping. Failures here typically indicate version mismatches between the source and toolchain.
Step 7: Refresh Distribution Artifacts
If you maintain a local release folder or GitHub Pages deployment, copy the newly built binaries:
cp out/build/clang-x64-release/src/reshadefx/*.addon64 ./dist/
This ensures your distribution matches the updated codebase.
Common Update Patterns
Quick Daily Update
For active development, combine the essential steps:
git pull --rebase origin main
git submodule update --init --recursive
powershell -ExecutionPolicy Bypass -File .\scripts\setup-dev-env.ps1 -Update
cmake --preset clang-x64
cmake --build --preset clang-x64-release
Clean Slate After Long Gaps
If your local copy is significantly behind upstream, use a fresh build directory to avoid stale cache issues:
git pull --rebase origin main
git submodule update --init --recursive
rms -Recurse -Force out/ # Remove old build artifacts
powershell -ExecutionPolicy Bypass -File .\scripts\setup-dev-env.ps1 -Update
cmake --preset clang-x64
cmake --build --preset clang-x64-release
Summary
- Pull source:
git pull --rebase origin mainsynchronizes the repository - Update dependencies:
git submodule update --init --recursiverefreshes external libraries - Refresh tools:
setup-dev-env.ps1 -Updatedownloads new DXC, glslang, and Slang releases - Rebuild: CMake reconfiguration and build presets regenerate all artifacts
- Validate:
ctestconfirms the update works correctly
Following this layered approach ensures your RenoDX installation stays current with upstream changes, security patches, and performance improvements.
Frequently Asked Questions
How often should I update RenoDX?
Update when you need new features, bug fixes, or shader improvements. The repository sees active development; checking origin/main weekly or before starting new mod projects keeps your toolchain current. Critical compiler updates in cmake/tool-versions.cmake are announced in commit messages.
What happens if I skip the setup-dev-env.ps1 -Update step?
CMake may fail to detect required tools or use outdated compiler versions. This produces shader compilation errors, particularly with HLSL 2021 features or Slang syntax that newer tool releases support. The build logs will show "DXC not found" or version mismatch warnings before failing.
Can I use a different compiler preset after updating?
Yes. Switch presets by running cmake --preset <new-name> from a clean state. The tool versions in cmake/tool-versions.cmake are preset-agnostic—DXC and glslang work across Clang, MSVC, and Ninja generators. Delete your out/ directory when switching to prevent generator conflicts.
Where are the managed tools stored after running the update script?
All downloaded binaries live in ./bin relative to the repository root. Each tool has a subfolder (e.g., ./bin/dxc/, ./bin/glslang/) with version-tagged directories. The script adds these paths to your environment during CMake configuration via cmake/toolchain/*.cmake files.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →