Players extract one ZIP into the game folder, copy their two NVIDIA DLLs, and start the game from Steam, Epic or a shortcut. No launcher script is needed; settings live in d4r\d4r.ini. - Shim player mode: when the launcher has not set D4R_HIP_ROOT and d4r.ini sits beside the shim, derive the backend environment from it. Codegen flags stay at the Windows-validated values. NVIDIA DLLs must match an exact SHA256 in dll-pins.txt, with "you have X, you need Y" errors. Rejects a vkd3d/Wine d3d12.dll and code objects built for another GPU. [DLSS] Model accepts K or M and is applied by rewriting the render preset hints. - d4r.ini exposes only options that exist on Windows: Model, AsyncInterop, ValidateOutput, Log, CacheDir. Invalid values fall back with a note in d4r_nvngx.log. - d4r_nvngx_loader: one _nvngx.dll for all GPUs. It matches the game's adapter by LUID and loads _nvngx_<arch>.dll from the same folder. - OptiScaler patch 0006: relative NvngxPath/NvngxDlssPath/ NvngxFeaturePath resolve against OptiScaler's folder. - package-windows-release.ps1 builds the release from the per-target game packages and refuses mixed targets or differing shared runtimes. - Tests: test-player-config.ps1 (ini and DLL-pin decisions, loader selection on the local GPU) and test-windows-release-package.ps1.
31 lines
1.7 KiB
Diff
31 lines
1.7 KiB
Diff
Subject: [PATCH] Resolve relative d4r library paths against the OptiScaler folder
|
|
|
|
Lets a drag-in d4r install ship OptiScaler.ini with NvngxPath=d4r instead of
|
|
an absolute path that only an installer could know. Absolute paths behave
|
|
exactly as before.
|
|
---
|
|
diff --git a/OptiScaler/Config.cpp b/OptiScaler/Config.cpp
|
|
--- a/OptiScaler/Config.cpp
|
|
+++ b/OptiScaler/Config.cpp
|
|
@@ -787,9 +787,17 @@
|
|
{
|
|
MainDllPath.set_from_config(readWString("Libraries", "OptiDllPath"));
|
|
|
|
- NvngxPath.set_from_config(readWString("Libraries", "NvngxPath"));
|
|
- NVNGX_DLSS_Library.set_from_config(readWString("Libraries", "NvngxDlssPath"));
|
|
- DLSSFeaturePath.set_from_config(readWString("Libraries", "NvngxFeaturePath"));
|
|
+ // A relative library folder (d4r drag-in installs use "d4r") is resolved
|
|
+ // against this DLL's folder, as LogFileName is. Absolute paths are unchanged.
|
|
+ auto libraryPath = [](std::optional<std::wstring> value) -> std::optional<std::wstring>
|
|
+ {
|
|
+ if (!value.has_value() || value->empty() || std::filesystem::path(*value).is_absolute())
|
|
+ return value;
|
|
+ return (Util::DllPath().parent_path() / *value).lexically_normal().wstring();
|
|
+ };
|
|
+ NvngxPath.set_from_config(libraryPath(readWString("Libraries", "NvngxPath")));
|
|
+ NVNGX_DLSS_Library.set_from_config(libraryPath(readWString("Libraries", "NvngxDlssPath")));
|
|
+ DLSSFeaturePath.set_from_config(libraryPath(readWString("Libraries", "NvngxFeaturePath")));
|
|
NvapiDllPath.set_from_config(readWString("Libraries", "NvapiPath"));
|
|
|
|
FfxDx12Path.set_from_config(readWString("Libraries", "FfxDx12Path"));
|