Commit Graph

  • 62cc3b1312 Add release 0.12.0, the handover of installed launchers to Triforce: the source of its window, its tests and its notes. main v0.12.0 chrg6 2026-11-14 23:52:26 -05:00
  • 1c3fa7df2a Give Streamline constants and null tags on a frame without inputs while frame generation is on. v0.11.0-rc4 preview-0.11.0 chrg6 2026-11-14 12:54:08 -05:00
  • 2dd363b86e Count the texture cache's short waits in seconds below 60 presents a second too. chrg6 2026-11-14 11:33:02 -05:00
  • 712568d4fb Make the release 0.11.0: the release prepared and previewed as 0.10.2 takes this number, with its notes. release-0.11.0 chrg6 2026-11-14 09:24:25 -05:00
  • 7432f7375c Ask for the C runtime heap's summary before play only. v0.10.2-rc4 preview-0.10.2 chrg6 2026-11-14 08:53:26 -05:00
  • 1e8045b36b Bring the tone mapped HDR picture's settings back to the menu, with defaults that give the look it had while it was fixed. v0.10.2-rc3 chrg6 2026-11-14 07:43:43 -05:00
  • 5eef43742d Compare textures up to 8 MiB by content before uploading them a second time, by default. chrg6 2026-11-14 08:33:06 -05:00
  • 87bb179c78 Keep released textures for one minute and up to a thirty-second of the video memory budget. chrg6 2026-11-14 08:33:01 -05:00
  • 7b33512e32 Add a flight of the free camera to the test script. chrg6 2026-11-14 08:32:45 -05:00
  • 1d0327acd1 Run a parallel group's pass hooks once, at its first chunk's first pass. chrg6 2026-11-14 06:44:38 -05:00
  • 7a8bbad47e Remove the low-end GPU mode from the settings. chrg6 2026-11-14 06:13:18 -05:00
  • 1610ab6e08 Write each word of a mesh fallback draw's record with exactly one command, and with fills and copies only. Tobim6 2026-11-14 06:00:43 -05:00
  • 6e57ef9619 Check three of this pass's decisions without a device: the automatic texture detail, the device made with DLSS Frame Generation on, and the mesh fallback's depth hold. v0.10.2-rc1 chrg6 2026-11-14 05:35:49 -05:00
  • bbeecce88c Never take the mesh emulation on an NVIDIA card, where it ended the game inside the driver. chrg6 2026-11-14 05:27:59 -05:00
  • 516bfa6fb0 Start the game when DLSS Frame Generation is on and the chosen graphics card is not an NVIDIA one. chrg6 2026-11-14 05:26:01 -05:00
  • fed7aca7fc Leave Helpers work ahead and Helpers take small jobs off by default, as in 0.10.1. chrg6 2026-11-14 05:18:15 -05:00
  • 6ababe8275 Let the automatic texture detail choose full from 12 GiB cards on, and never on an integrated GPU. chrg6 2026-11-14 05:12:10 -05:00
  • 787b7c73de Leave a patch of grass out whole while its colour draw waits for a pipeline on the mesh shader fallback. chrg6 2026-11-14 04:34:58 -05:00
  • 5f7395c14f Keep no spare block of video memory past a budget cap set for a test. chrg6 2026-11-14 04:30:25 -05:00
  • 190cdbb50f Say in the log what keeps the half-full blocks of video memory from going back to the driver. chrg6 2026-11-14 04:30:25 -05:00
  • f7a2d94813 Bring public main's video memory fix and 0.10.1's defaults into the 0.10.2 line. chrg6 2026-11-14 04:20:32 -05:00
  • 69ab33d1f1 Turn the Game tab's Testing settings on by default for 0.10.2, as the user asked: CPU helper threads Automatic (replay_workers = auto, which gives none on four cores or fewer and none on AMD's driver for RX 6000 and older), Helpers work ahead 4 (replay_pipe), Helpers take small jobs 16 (replay_small) and Start next frame early On (tail_early). A value a player set in the menu or nx2navi.ini stays; the notes say how to go back to 0.10.1's. chrg6 2026-11-14 03:20:37 -05:00
  • 87b4e2607e Say in the audit's section 14 that a clean dev build of the final merge compiled every runtime file and linked the exe. chrg6 2026-11-13 21:33:01 -05:00
  • 86d672ceea Make the release 0.10.2, with its notes: the stability and frame-pacing pass, the translator built from the release's own sources (the see-through ground of issues #569 and #824), the AMD device-loss fixes, and the items the user approved. chrg6 2026-11-13 21:32:45 -05:00
  • 4801688828 Write the stability pass for 0.10.2 into the audit: a ledger row for each of its findings with the commits that fixed it or why it stays open, the older rows and leads it fixed or changed, the new threads and lock orders, the pacing steps as they now run, what still waits for a play-test or the user's word, and a section on how the pass was done and checked. chrg6 2026-11-13 21:32:45 -05:00
  • 87777fea34 Name Reflex among the limiters that hold the frames while frame generation keeps RivaTuner out, in the two-limiters log line. chrg6 2026-11-13 20:14:10 -05:00
  • 5b5fa6e2be Store vk_dlaa.c's present count atomically, since presents_now reads it on the hook thread without a lock, and bring three comments up to date with where vk_dlaa_frame now runs: between replays under the submission lock, owed to the next submission when the present could not take it (vk_frame_owed.h). chrg6 2026-11-13 20:14:10 -05:00
  • 3def368774 Give RivaTuner's hold the pacer's one ceiling, frame_step_ceiling_ns, which Reflex's hold also keeps, in place of a second copy of its value in frame_step_cap_ns. chrg6 2026-11-13 20:14:10 -05:00
  • 1ae00ed802 Log dynamic resolution's target against the one the log last named, from the start line on. chrg6 2026-11-13 19:37:48 -05:00
  • 4fe1339189 Say in nx2navi.ini.example's header which settings cut a comment after the value and which take the switch words. chrg6 2026-11-13 19:35:54 -05:00
  • 8c9011d56f Read low_end_gpu's and shader_carry's off words the same in the low-end mode and in make_game.py as in the game's other readers. chrg6 2026-11-13 19:35:01 -05:00
  • b6709da852 Read a comment after a setting's value, and off, false and no for a switch, as players mean them in nx2navi.ini. chrg6 2026-11-13 19:14:43 -05:00
  • 1c26907abe Aim dynamic resolution at the frame limit's frame time by default and hold each step for a time, not a frame count. chrg6 2026-11-13 19:04:35 -05:00
  • 5c9e480f90 Swing the shake key's stick by the game's updates instead of the clock, two updates a side at any frame rate. chrg6 2026-11-13 19:00:47 -05:00
  • 5f9374e1d9 Keep the fraction of a frame the ocarina recorder's clock was losing above 60 fps, in a new patch set orecord. chrg6 2026-11-13 18:57:56 -05:00
  • a40afdd86d Log a splitter framing fault met while the update is applied as the rest of the section left out, not as a refused update. chrg6 2026-11-13 19:37:45 -05:00
  • 9770d409d5 Say what NX2NAVI_AUDIO_STRICT, the audio_bad log lines and the docs really do, as the review of the audio change found them overstated. chrg6 2026-11-13 19:35:48 -05:00
  • 7e7fed639e Refuse or leave out the audio values the game sends that the renderer cannot use, instead of ending the game on them. chrg6 2026-11-13 19:21:56 -05:00
  • 93e9434869 Read the frame hold's allowance and its time as one pair in vk_frame_hold_left, under a sequence word the refill at the present writes. chrg6 2026-11-13 19:45:55 -05:00
  • b18fff6439 Count a frame's bookkeeping that a submission runs for an earlier present as that thread's replay time. chrg6 2026-11-13 19:44:35 -05:00
  • b0baa981ff Keep a recording copy that one synchronous submit call gives twice in place both times, instead of cloning the second occurrence as if another thread's submission were in flight. chrg6 2026-11-13 19:44:09 -05:00
  • 618cfc01f4 Run a frame's bookkeeping that is still owed on the present thread before the frame's blit, so the blit never reads the upscaler state of a frame vk_dlaa_frame has not closed. chrg6 2026-11-13 19:42:03 -05:00
  • effdbd8dc0 Describe in docs/architecture.md how the game's submitting threads take turns, and bring nvn_call_note's comment, which said the front end relied on one thread at a time, up to date. chrg6 2026-11-13 19:13:23 -05:00
  • 518185b808 Set vk_sub_in_frame under the submission lock from the place the submitting thread noted, so a thread about to submit no longer changes it under another thread's replay. chrg6 2026-11-13 19:12:51 -05:00
  • 0e918d4846 Log at exit, and with trace = perf every 600 presents when they moved, how often the game's threads met at the present: frames whose bookkeeping went to the next submission, held presents another thread put out, and the presenting thread's waits for one. chrg6 2026-11-13 19:12:03 -05:00
  • 58fad9128d Give a synchronous submission of a recording copy that another thread's submission still replays a clone of its own for its deferred binds, instead of rewriting the copy under that replay. chrg6 2026-11-13 19:10:28 -05:00
  • 51c9261db3 Close a frame's replay state under the submission lock: at the present when the lock is free, else first thing in the next submission, so another thread's replay never sees it reset halfway. chrg6 2026-11-13 19:07:06 -05:00
  • a789bd8fb0 Put a held present out under a lock of its own that submitting threads only try, so that it goes out once, whole and before the next present. chrg6 2026-11-13 19:02:54 -05:00
  • 8b5ddd0865 Count the queue's submissions, the game's waits that returned with work held and the gate's waits with atomic adds, as several of the game's threads reach them at once. chrg6 2026-11-13 18:59:53 -05:00
  • 01cb13dc31 Set, count down and clear vk_dlaa.c's setting_presents with atomics, as vk_dlaa_frame and vk_dlaa_resized_take can run on two threads. chrg6 2026-11-13 18:59:10 -05:00
  • ddc0247b25 Count the draws skipped for a pending pipeline with atomics, as the replay adds to the count on one thread while the present takes it on another. chrg6 2026-11-13 18:58:41 -05:00
  • c56a87872e Work out the frame hold's allowance in vk_frame_hold_left without writing it, so that frame_hold at the present is its only writer. chrg6 2026-11-13 18:58:13 -05:00
  • 7a1c220e06 Test held work against the event's value now when another thread asks without the submission lock, and read the held count and the submission count as atomics there. chrg6 2026-11-13 18:57:20 -05:00
  • cde143c5d9 Say what upscaler_idle_wait = 1 brings back and what it does not. chrg6 2026-11-13 19:38:20 -05:00
  • 75b06b0a30 Count only release_kept's own features in its line of those released once the GPU is past them. chrg6 2026-11-13 19:37:40 -05:00
  • bede842db7 Reword the comment on pb_images' last PB.used, which still described the clear 9071dfc3 removed. chrg6 2026-11-13 19:37:13 -05:00
  • 74bedbee73 Name the upscalers' wait mark "upscaler GPU waits", since it also times the timeline wait after a refused creation. chrg6 2026-11-13 19:36:50 -05:00
  • 4506988335 Make upscaler_idle_check fail where a place that lets something go frees it at once. chrg6 2026-11-13 19:36:09 -05:00
  • 61f08a177d Try an FSR 3.1 context creation once more after the GPU is past the contexts let go of, instead of failing the run. chrg6 2026-11-13 19:34:20 -05:00
  • ed87d30628 Check from the sources that no upscaler waits for the device where it lets something go. chrg6 2026-11-13 19:09:56 -05:00
  • 9065d1485f Let FSR 3.1 and FSR 4 destroy a context they let go of once the GPU is past its last upscale, instead of waiting for the device. chrg6 2026-11-13 19:08:28 -05:00
  • 22c86f08a0 Let DLSS free what it lets go of once the GPU is past it, instead of waiting for the device on the replaying thread. chrg6 2026-11-13 19:05:14 -05:00
  • 86e6d62d35 Add a list of what an upscaler lets go of, released once the GPU is past it, and its unit check. chrg6 2026-11-13 18:59:02 -05:00
  • c14988150c Keep the prebloom images' last use when they are made again for another picture size. chrg6 2026-11-13 18:57:53 -05:00
  • c6b29834eb Give the upscalers' device-idle waits and their releases perf marks of their own, so a slow frame's line names them. chrg6 2026-11-13 18:57:33 -05:00
  • 61b8a6d62c Wait for room in the flight table in mem_lazy_skip only when there is another buffer's range to give back. chrg6 2026-11-13 20:07:14 -05:00
  • 47078fa0cd Have an eviction take the next candidate when a victim was finalized while pool_lock was down, as it did before. chrg6 2026-11-13 20:06:15 -05:00
  • b5e4243cc4 Name every thaw that fetches under the freeze lock in the lazy write-back's comments, and say what LZ_SLOTS does when it runs short. chrg6 2026-11-13 20:05:40 -05:00
  • a8d18ef474 Ask an armed region's page state under the freeze lock when a fault finds its range gone, so that a late write is not taken for a frozen page's and a read is not passed on past an arm. chrg6 2026-11-13 20:04:59 -05:00
  • da60e0d327 Make wb_lazy_unlocked = 0 bring back 0.10.1's locking in evictions and releases as well, which the review found it did not. chrg6 2026-11-13 20:03:02 -05:00
  • 0eee849948 Check that a thaw fetches the armed ranges of its regions without the freeze lock, which the review found untested. chrg6 2026-11-13 20:00:02 -05:00
  • 92121a11e8 Check that an arm keeps its region marked while a range in flight there ends, which the review found untested. chrg6 2026-11-13 19:59:27 -05:00
  • 2e077edc9d Fetch the lazy write-back's ranges without the freeze lock, so a touch of GPU-written memory holds up only the threads that touch that range, with wb_lazy_unlocked = 0 to go back. chrg6 2026-11-13 19:33:58 -05:00
  • f586c291fa Give the longest lazy fetch and the longest wait of a fault for the freeze lock on the "mem: lazy write-back" line. chrg6 2026-11-13 19:16:42 -05:00
  • ef0673fba0 Mark a region for the lazy write-back before its pages become inaccessible, so that a read during an arm is not passed to the crash handler. chrg6 2026-11-13 19:14:54 -05:00
  • 5ee960f811 Add NX2NAVI_GEN_SEED, a test switch that starts the page write generations at a given value, so a play-test can cross 2^32 in seconds instead of 15 to 66 hours. chrg6 2026-11-13 19:01:05 -05:00
  • 028a6ce128 Count the page generation tables in trace=perf's "mem: sizes" line, so a play-test shows what the 64-bit generations cost in host memory. chrg6 2026-11-13 18:57:56 -05:00
  • 6b95c867c8 Make the page write generations 64-bit, so a long session no longer wraps them and every texture, mirror and shadow check after the wrap answers wrong. chrg6 2026-11-13 18:57:10 -05:00
  • 879c76f91a Name every caller of reflex_state in nx2_sl.cpp's comment on why its calls never overlap. chrg6 2026-11-13 19:25:14 -05:00
  • bb0317ac08 Log Reflex's frame limit as each of the first 16 swapchains hands it to Streamline again. chrg6 2026-11-13 19:24:46 -05:00
  • 358713fbf2 Trap unsigned wrap-around in tests/dlssg_pace_check.py, as its comment on overflows promised. chrg6 2026-11-13 19:24:18 -05:00
  • 46bf4823e6 Count Reflex's sleep at the frame start as the pacer's wait only while Reflex holds a frame limit. chrg6 2026-11-13 19:23:43 -05:00
  • 0131b1b263 Stop a launcher release and a build kit on an nx2navi_dlssg.dll that lacks an export runtime/dlssg/nx2_sl.h declares, before they download anything. chrg6 2026-11-13 19:23:03 -05:00
  • 9f4f51f010 Fail tools/build_dlssg.py when nx2navi_dlssg.dll lacks an export nx2_sl.h declares, and let it check a DLL built earlier. chrg6 2026-11-13 19:00:05 -05:00
  • e0843439a7 Add the reflex_limit setting (NX2NAVI_REFLEX_LIMIT, default 1, live), which gives the frame limit back to the game's pacer with DLSS Frame Generation. chrg6 2026-11-13 18:58:40 -05:00
  • dc3f424fde Let Reflex hold the frame limit with DLSS Frame Generation, and the game's pacer keep only its ceiling while it does. chrg6 2026-11-13 18:57:18 -05:00
  • 2bf32649af Name the game's frame-rate ceiling as a period of its own, frame_step_ceiling_ns, for a pacer that hands the limit over. chrg6 2026-11-13 18:54:18 -05:00
  • 2d6f9f07b2 Decide who holds the frame limit with DLSS Frame Generation in a header of its own, runtime/dlssg_pace.h, with a check. chrg6 2026-11-13 18:53:32 -05:00
  • 660c42f6d2 Give nx2navi_dlssg.dll an export that hands Reflex a frame limit along with its mode. chrg6 2026-11-13 18:52:18 -05:00
  • 405a75f3b1 Say in docs/architecture.md when a crash still calls into RivaTuner Statistics Server, and list the new state-file checks in docs/building.md. chrg6 2026-11-13 19:55:55 -05:00
  • af2ecc3c03 Correct the comments on RivaTuner Statistics Server's pacing beside the ceiling, the state file's writers and the crash path. chrg6 2026-11-13 19:55:46 -05:00
  • c19f75e505 Check that a crash on RivaTuner Statistics Server's own thread, with no line in the state file, returns at once. chrg6 2026-11-13 19:54:26 -05:00
  • 9f45d7448f Leave rtss-profile.txt alone when it is there but does not read, so the lines of other executables in the folder stay. chrg6 2026-11-13 19:53:26 -05:00
  • da822abec3 Keep the state file's line ahead of RivaTuner Statistics Server's profile, and keep what a run owes the profile after a put back that did not land. chrg6 2026-11-13 19:52:29 -05:00
  • 1744681f1a Give up on RivaTuner Statistics Server for the run when it hooks the game with the limit for 30 s and never shows it holds it. chrg6 2026-11-13 19:46:48 -05:00
  • a7b4f0c7cb Put back a profile a run that did not close left in RivaTuner Statistics Server, also at a start that keeps RTSS out. chrg6 2026-11-13 19:42:54 -05:00
  • ad84e0a1c0 Say what RivaTuner Statistics Server does with a movie at the default limit of 60, where the profile keeps the limit. chrg6 2026-11-13 19:40:16 -05:00
  • 80b96a748d Describe RivaTuner Statistics Server's hand-off, the pacer's fallbacks and rtss-profile.txt as they behave now. chrg6 2026-11-13 19:19:28 -05:00
  • 60694532a1 Round a fractional limit down for a RivaTuner Statistics Server without the denominator field, so "display" never holds the game above the refresh. chrg6 2026-11-13 19:17:33 -05:00
  • 4d4b97b043 Let a want reach RivaTuner Statistics Server's profile only once it stayed two polls, and write nothing before the first host present. chrg6 2026-11-13 19:16:41 -05:00