network natively on HIP with Vulkan->HIP shared memory, extend K kernels to
gfx11 (RDNA3), and add dependency/packaging/test tooling around them.
Windows: FSR RR backend, native HIP K runner, gfx11 K kernels, tooling
FSR Ray Regeneration (experimental)
- Add fsr_rr_backend.{h,cpp}, fsr_rr_passes.h and the fsr_rr/ prepare and
compose compute shaders. They run AMD's FidelityFX denoiser
(amd_fidelityfx_denoiser_dx12.dll, SDK 2.3, not bundled) on a private
vkd3d-proton device.
- Add the amdxc64 shim (tools/windows/amdxc64_shim) and two vkd3d-proton
patches for libcxx includes. AMD's amdxc64.dll is never loaded.
- d4r_nvngx_windows: RrFeature now selects between the native DLSS RR
backend and the FSR backend (D4R_RR_BACKEND=fsr). After the denoiser it
runs an internal Super Sampling stage (feature 1) to upscale. If SR is
unavailable and output != render size, the frame fails; it is never
returned noisy.
- d4r.ini / player_config: new [RayReconstruction] FsrDenoiser,
FsrStabilityBias (auto or >= 0) and FsrDetail (0-1), with validation, and
matching D4R_FSR_* environment variables.
- Add the FSR RR fixture, output-check and ngx test scripts, and a shader
compile script.
Native HIP K runner (Windows)
- CMake: add d4r_engine_k_hip (d4r-k-hip) plus separate volk/engine copies,
because VK_USE_PLATFORM_WIN32_KHR changes volk's entry points.
- Share Vulkan memory with HIP via Win32 opaque handles on Windows
(VK_KHR_external_memory_win32) and via fds on Linux. Handle types are now
intptr_t, and the platform choice is in D4R_EXT_MEMORY_* macros.
- HipNetwork: add debugRepeatHashes and debugNodeMicros, exposed as
D4R_HIP_REPEAT_CHECK, D4R_HIP_REPEAT_ALL and D4R_HIP_NODE_PROFILE in
replay.cpp.
- replay.cpp: display-resolution-motion frames (FrameFlagDisplayMotion) no
longer require near2rnd == out2rnd. Both values must still be in (0, 1].
K kernels on gfx11
- Allow position-token and enc1 tiling on __GFX11__ as well as gfx12.
- Add an opt-in ds_bpermute cross-half exchange
(D4R_WINDOWS_GFX11_DS_EXCHANGE, enabled for K on Windows gfx11). M keeps
its LDS path.
- Fix a block-barrier race in the position layer. Without POS_VSHARE a fast
wave could overwrite its hb rows while a slower wave still read them for a
later head, giving rare wrong results on gfx1101 (enc0 outputs differing
between identical launches).
Packaging and install
- install.bat, d4r.ini, WINDOWS_README: FSR option, and
install_dependencies.py to install pinned NVIDIA dependencies with staged,
hash-verified replacement and rollback.
- Update the release package, local package refresh and test scripts.
- Add the InteropBatchInputCopies option (default false). Batching is faster
on some synthetic runs, but player temporal exactness is unresolved.
Tooling and tests
- K model: capture_k_weights, build_k_model, compare_k_outputs,
benchmark_k_hip, build_capture_runtime, test_k_model and the
zluda-k-output-capture patch. Captured weights and models are private
local assets and must not enter release archives.
- Synthetic probes: test_m_ngx, test_sr_dynamic,
prepare_rr_dynamic_fixture and the d3d12/rr_ngx probe updates.
- Add tests/windows/test_install_dependencies.py.
Docs
- Update the windows-fsr-rr, k-performance, local-package, rr-interop and
rr-model-cache docs. Add windows-parity-handoff.md and
windows-parity-continuation-prompt.md.
17 KiB
Local gfx1101 drop-in package
Current local development package: v14 (2026-10-17)
build/d4r-windows-gfx1101-local-v14.zip, 133,240,107 bytes, SHA256
2f88dec3b4086371efefa8fbfa316c3f7b86fb7858ca1c1bdee63146056f7edf.
Every manifest hash and the exact ZIP entry set verify. It adds strict DS lane exchange in all eleven K objects
and FSR-only RGBA32F output with temporal format switching. The original FSR denoiser payload is unchanged;
compiler/subgroup/rounding trials produced no reliable gain. v13 and older packages remain preserved.
Actual fresh extraction, architecture loader and player INI: K control/candidate/candidate/control passes 64 exact frames per size. Warmed CPU interop medians are 3.900 -> 3.3915 ms at 1080p and 5.4015 -> 4.820 ms at 1440p, about 13%/11% faster. These include CPU synchronization/copies/NGX and are separate from standalone HIP GPU timestamps (1.812/2.885 ms). The HIP runner/private model is not in the ZIP.
FSR-only test through the fresh loader passes 24 moving-camera frames with alternating float guides and half/float
output, typeless D32S8 and preserved stencil. Every output component equals the same-frame composed half result,
widened independently where needed. FSR+SR dynamic regression passes another 24 frames, retained resources and
minimum-bound rejections. Native RR passes six exact camera/reset frames with contracts and enhanced/inherited
states. Evidence: build/k-ds-local-v14-{1080,1440}-v1/, build/fsr-local-v14-format-switch-v1/,
build/fsr-local-v14-dynamic-sr-v1/, build/rr-native-local-v14-regression-v1/.
All execution is synthetic on gfx1101. Full install.bat was not rerun, and no game, driver/security/GPU setting, commit, branch, PR or publication was involved. Linux targets, FSR denoiser speed, broader encodings/alpha/reference quality and the original remaining parity gaps are not declared complete. This ends the user's narrowed pass.
Preserved v13 package evidence
build/d4r-windows-gfx1101-local-v13.zip, 133,239,594 bytes, SHA256
b2ff1157e27b9353afcf287fa8df011c7efa119ac4e26ab7746166ff87b05b34.
Every manifest hash verifies. This is v12 plus FSR/SR dynamic render-size support within the loaded SR library's
queried bounds. Below-minimum sizes reject before command recording. The three fixed K objects remain included;
the HIP standalone K engine/model is still outside the package. All older packages remain preserved.
Fresh-extracted architecture loader/INI passes 24 moving-camera dynamic FSR+SR frames, including both below-minimum
axis rejections, retained input resources and all SR submissions (build/fsr-rr-local-v13-dynamic-bounds-v1/).
Native RR regression passes six exact camera/reset frames with contracts and enhanced/inherited states
(build/rr-native-local-v13-dynamic-regression-v1/). These are synthetic tests with separately staged dependencies.
Full install.bat was not rerun: the NGX core is absent from the download cache and would require the 945 MiB
driver archive. No driver runs, game interaction, commit or publication occurred. See windows-fsr-rr.md and the
newest checklist entry for exact synthetic coverage and remaining limits. Real-game/reference-quality and Linux
performance parity remain unverified.
Preserved v8 package evidence
build/d4r-windows-gfx1101-local-v8.zip is 130,975,742 bytes; SHA256
962530d1a914268cc6f9d2ec908185f8e4d9e5baafca6800d77ebc3281a647fe.
It adds GPU RGBA32F RR output conversion and temporal RGBA16F/RGBA32F output
switching to v7 coverage. Packaged loader/INI E passes 12 exact evaluations
across two live features, inverted D32S8 and unchanged stencil. Float32 results
match widened standalone half output; this is synthetic engine consistency,
not NVIDIA reference quality or game/timing parity.
Installer still installs pinned SR, RR DLL and NGX core through bundled Python,
with optional D/E model generation/deployment. No NVIDIA DLL, private K override
or generated model is bundled. Every ZIP manifest hash verifies. Evidence:
build/d4r-windows-gfx1101-local-v8.validation.json and
build/rr-ngx-local-v8-output-switch-e-v1/summary.json. Other output encodings,
external exposure, FSR execution, K timing parity and original engine gaps remain.
Preserved v7 package evidence
build/d4r-windows-gfx1101-local-v7.zip is 130,973,094 bytes; SHA256
b7c68e6f6148c648b6e8e6f47362e0d5f0f6c6796d651d1e762a80d8f07e8d54.
It retains the v6 native Python installer/clean portable tools and adds native
RR dynamic render-size handling. NVIDIA SR/RR/core DLLs still download locally;
no NVIDIA binary, private K override or RR model is bundled. All final manifest
hashes verify. Older ZIPs are preserved.
Native RR supports per-frame render dimensions from 64 pixels through creation
size, with fixed output size and implicit history reset on dimension changes.
Model weights/pipelines and the shared packet/fence remain loaded. Packaged
loader/INI E tests pass 16 exact evaluations across two live features and changing
sizes, both with resized input textures and retained creation-sized textures.
Six static D depth/format-switch frames also pass. These are synthetic engine
consistency checks, not NVIDIA reference quality, real-game RR or timing parity.
See windows-rr-interop.md for coverage and limitations. Evidence:
build/d4r-windows-gfx1101-local-v7.validation.json and
build/rr-ngx-local-v7-dynamic-two-e-v1/,
build/rr-ngx-local-v7-max-dynamic-two-e-v1/, and
build/rr-ngx-local-v7-static-regression-v2/.
Preserved v6 package evidence
build/d4r-windows-gfx1101-local-v6.zip is 130,970,436 bytes; SHA256
a144185823af334483543d4989584d65cfa0418049e56fb8e58410b91ae8700b.
It adds the pristine portable-tools v2 inputs and native Python dependency
installer to the verified runtime. Every ZIP manifest hash verifies. No NVIDIA
DLL, private K override or generated RR model is bundled. All earlier ZIPs,
including intermediate v5, remain preserved. V5 lacks the final README update;
use v6 for the documented installer flow.
Extract beside the game executable and run install.bat. The batch wrapper
uses bundled isolated Python, without PowerShell, system Python or Git Bash.
It installs pinned SR 310.9.1 at d4r/dlss/nvngx_dlss.dll, RR 310.9.1 at
d4r/rr/nvngx_dlssd.dll, and 617.14 core at d4r/ngx/_nvngx.dll. Driver archive
is only extracted, never executed. The Python installer retains the exact
existing PowerShell installer URLs and SHA256 pins. Hash identity excludes old
596.36 core fixtures.
Choose N to retain existing RR settings. Optional D/E selection builds and enables a private exact gfx1101 model. Tool inputs copy by manifest into the external cache; generated products remain there and in a versioned private runtime model directory. Existing models remain intact. Configuration selection preserves comments/BOM/newlines and creates an exact external INI backup. Model failure leaves verified DLLs installed and does not select an incomplete model. Automatic RR building currently requires a gfx1101-only package.
DLL replacement first stages and verifies all changes and external original
backups. Replacement failure rolls back applied entries; concurrent edits are
preserved. Reruns skip matching DLLs and reuse only verified model products.
install.bat --yes --offline --cache-root PATH --backup-root PATH supports
preverified DLL caches. Add --rr-preset D or E and --enable-rr for model
generation/selection without the interactive prompts. Cache and backups must
stay outside the game directory.
Validation uses ignored mock game folders only:
- Eight CPU tests cover preservation, rollback including newly created files, concurrent edits, cache rejection, pin parity and manifest-only tool copying.
- Actual v5 batch wrapper builds/deploys D in 48 steps, verifies 66 model products, exact DLL/INI backups, unrelated-file preservation and an unchanged repeat. E also completes its actual 48-step installer path.
- Actual v6 ZIP interactive default installs all three pinned DLLs while declining model generation leaves INI unchanged. E cache reuse/deployment, repeat safety and tampered-tool rejection with unchanged runtime hashes pass.
- Native downloader fetches verified official 7-Zip, reuses the hash-verified 617.14 driver archive and extracts a core matching its exact pin. No driver runs.
- Installer-deployed E selected solely through INI passes six exact synthetic NGX hardware-depth frames through the packaged architecture loader, with optional guides, enhanced/inherited access and stencil preservation. This is engine consistency, not NVIDIA quality reference or real-game RR evidence.
Evidence: build/native-installer-v1/validation.json,
build/native-installer-v2/validation.json,
build/native-installer-download-v1/validation.json,
build/rr-ngx-native-installer-e-v1/summary.json, and
build/d4r-windows-gfx1101-local-v6.validation.json. The final v6 fixture also
passes the same six exact E frames:
build/rr-ngx-local-v6-installer-e-v1/summary.json. Modified PowerShell release
packager passed static parser validation; its fixture suite was not rerun under
the recorded script policy. No policy bypass, game access, commit, publication
or system setting change occurred. FSR execution, broad game/quality validation,
K timing parity and remaining original engine requirements remain open.
Preserved v4 package evidence
build/d4r-windows-gfx1101-local-v4.zip is 90,720,715 bytes; SHA256
74fbb4c78dba3e616b9bbba7dc1fe4cddf0a17855968b174f8ea69968d873dfc.
It refreshes the verified v3 package with the current native-RR shim, player INI,
README, checker and installer sources. Every manifest file hash verifies against
the final ZIP. Exact local modified-build provenance and base ZIP hash are
recorded; no clean source commit is asserted. Existing ZIPs remain unchanged.
The package contains no NVIDIA binaries, private optimized kernels, or RR
models. RR defaults off. A locally generated D/E model can be selected through
[RayReconstruction] Backend = native and ModelDir in d4r.ini. Auto selects
d4r/engine/rr-d; relative paths resolve beside d4r.ini. The installer does not
generate that model yet, and FSR RR remains unavailable. This is a gfx1101-only
development package with synthetic RR coverage, not verified game RR support.
The refreshed target shim passed six exact RR hardware-depth frames through the
packaged architecture loader using player INI selection without launcher path
overrides. The staged test supplied the pinned SR/core dependencies separately
and used a separate local RR model. It covered capability/negative contracts,
optional guides, enhanced/inherited state, inverted D32S8, unchanged stencil and
Release-before-submit. Evidence: build/rr-ngx-local-v4-loader-v1/summary.json.
ZIP verification: build/d4r-windows-gfx1101-local-v4.validation.json.
The installer itself was not rerun for v4 under the current script policy; no
policy bypass or system change was used. No game was touched or release published.
The refresh helper is tools/windows/refresh_local_package.py. It accepts only
the pinned verified v3 base and fresh destinations under ignored build/, verifies
every base/output manifest hash, and marks output as local modified provenance.
Preserved v3 package evidence
Local development ZIP: build/d4r-windows-gfx1101-local-v3.zip (92,158,725 bytes).
This package targets gfx1101, including this machine's RX 7700 XT. It is not a
multi-GPU public release, and it does not implement Windows game RR or FSR RR.
Extract its contents beside the game's main executable, then run install.bat
and accept the dependency download prompt. Start the game normally afterward.
The ZIP contains the shim, architecture loader, OptiScaler, native K/M objects,
HIP/ZLUDA runtime, configuration, installer and licenses. NVIDIA binaries are
excluded; the installer fetches pinned official SR/RR/core DLLs locally. It does
not install the NVIDIA driver. See the ZIP's WINDOWS_README.txt for placement
and existing-install handling.
Validation completed without touching a game:
- Every ZIP entry listed in the manifest matches its recorded SHA256.
- No NVIDIA SR, RR or core binary is bundled;
d4r/_nvngx.dllis d4r's loader. - Extracted the real ZIP into an ignored mock game folder and ran its installer with the verified local download cache. All three installed DLL hashes match the current pins. The installed checker passed on RX 7700 XT.
- The packaged architecture loader and target shim passed 32 synthetic K Quality frames at 1280x720 to 1920x1080. Outputs were finite, nonuniform and identical between control/batched-input runs. This is synthetic execution, not a game or image-quality claim.
- V3 adds
NativeDirconfiguration for locally generated complete native directories. The exact new target shim passed eight additional synthetic player-mode frames through the architecture loader at 256x144 to 512x288. Its log confirms selection of the generated private K output override. Checker fixtures pass 20/20; release package fixtures pass 6/6.
The input package is explicitly marked as a local modified build. Its clean binary source commit is not asserted; exact file hashes are authoritative. The dependency commits are inherited from the earlier package's provenance. No source commit or public upload was created.
Evidence: build/windows-drop-in-v3-validation.json and
build/player-private-native-output/validation.json. Earlier package validation
remains in build/windows-drop-in-validation.json.
ZIP SHA256:
e93be288f4013616cc2229be0132b40395d5031d8733bfa63886ba75ce1389ca.
Optional private K output optimization
Generate a complete private directory in this source workspace:
./scripts/windows/prepare-k-native-cache.ps1 `
-DlssDll build/got-k-test/isolated-sr/sr/nvngx_dlss.dll `
-NativeDirectory build/got-k-test/work/package-gfx1101-current/d4r/native `
-OutputDirectory build/my-private-k-cache
This uses the locally built emitter and TheRock compiler. It verifies the input
target and pinned DLL, builds the selected output variant, combines the baseline
K/M objects, regenerates the native manifest and records hashes. It never edits
a game or configuration. Select the complete native subfolder with [Paths] NativeDirin the new shim'sd4r.iniafter validation. Relative paths resolve besided4r.ini; auto` uses packaged kernels. Missing or wrong-target private
objects are rejected. The default variant currently optimized is LDR, regular
depth and high-resolution motion vectors; other variants retain the normal path.
The workflow output under build/k-native-cache-workflow/native is byte-identical
to the previously validated 17-object candidate. The new player-mode smoke loaded
that directory. These NVIDIA-derived objects stay local and are absent from V3.
Local v9: experimental FSR RR payload (2026-10-17)
build/d4r-windows-gfx1101-local-v9.zip, 133,200,126 bytes, SHA256
332719443a9b050e6a5b479816a81fb4d3e482a8956e2c20f2596904f7f6152d. Built by tools/windows/refresh_local_package.py
from the verified v8 ZIP (--fsr-payload build/fsr-payload-v1); all manifest hashes verified; v2-v8 preserved.
Added over v8: the shim with the FSR RR backend and its Super Sampling stage (d4r/_nvngx_gfx1101.dll);
d4r/fsr/d4r_vkd3d_core.dll (vkd3d-proton built by tools/windows/build_fsr_payload.py, LGPL-2.1, source offer
and patches in d4r/fsr/SOURCE.txt and d4r/fsr/patches/) and d4r/fsr/amdxc64.dll (d4r's capability shim, not AMD
software); vkd3d-proton, dxil-spirv and dxbc-spirv licence texts in d4r/licenses/; install.bat with an [F]SR
choice and install-dependencies.py --enable-fsr / --install-fsr (AMD's denoiser, SHA256 48f1e588..., is
downloaded hash-verified, backed up and rolled back like the NVIDIA DLLs, and Backend = fsr is written to
d4r.ini with an external backup); d4r.ini key [RayReconstruction] FsrDenoiser; README text.
Still not bundled: NVIDIA DLLs, any RR/K model, AMD's denoiser. FSR RR is off by default.
Verification (synthetic only, no game): ZIP extracted fresh and test_fsr_rr_ngx.py run against the extracted files
(build/fsr-rr-ngx-upscale-v9-v1: PASS, SR used, RMSE 0.289 vs 0.581 noisy input); release-package test PASS
cases=7 including FSR payload accept/reject cases (build/release-package-fsr-v1); installer unit tests 12 OK;
player-config test PASS cases=2; installer FSR path run for real on the extracted copy (AMD DLL downloaded,
hash matched, installed, single Backend line changed, backup equals original, second run changes nothing).
A full install.bat run was not repeated: the NGX core is not in the local download cache and would pull the
945 MiB driver archive. The new K work (HIP network, authentic K model) is NOT in v9.
Local v11: v9 plus FSR tuning, GPU timing and dynamic-size refusal (2026-10-17)
build/d4r-windows-gfx1101-local-v11.zip, 133,236,207 bytes, SHA256
ba91dd6cc178865244c9903a461f213cdcacf38bcf6905e919ba5e8ee652b228; built the same way as v9 (verified v8 base,
--fsr-payload build/fsr-payload-v1), all hashes verified. v9 and an intermediate v10 are preserved but superseded.
Differences from v9: d4r.ini keys FsrStabilityBias (default auto) and FsrDetail; the shim's GPU-timestamp log
(D4R_FSR_RR_LOG), motion/depth dump diagnostic, tuning keys, exposure handled by the SR stage, and a clean refusal
of render sizes below the creation size. Validated from a fresh extraction with test_fsr_rr_ngx.py: static
same-size 0.127 (noisy 0.485), moving 640x360 -> 1280x720 0.2135 (noisy 0.554), moving same-size 0.1069 (noisy 0.486);
all use SR. Synthetic only, no game. The HIP K network and authentic K model are NOT in this package.