Make the release 0.10.1: every setting under the Game tab's Testing heading is off by default again, CPU helper threads (replay_workers = 0) and Start next frame early (tail_early = 0) among them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
chrg6
2026-11-13 10:49:01 -05:00
parent 5190f8e932
commit a84a3ab12d
6 changed files with 42 additions and 18 deletions

View File

@@ -1 +1 @@
0.10.0
0.10.1

24
docs/releases/v0.10.1.md Normal file
View File

@@ -0,0 +1,24 @@
## Install or update
- **Already have 0.6.0 or newer:** start the launcher; it offers 0.10.1, updates itself and keeps the game it compiled
and the shaders it prepared. From 0.10.0 only a few files are compiled again; from older versions the update
translates the game's code once more, for the frame-rate fixes of 0.10.0.
- **New install:** download **`NX2navi-Setup-0.10.1.exe`** below, put it next to your `.nup` dump of the game and start
it. Windows SmartScreen warns on the first start because the setup is not signed: choose *More info* and *Run
anyway*. The launcher checks your game files, builds the game (10 to 25 minutes, once), prepares every shader and
starts it.
**Requirements:** as for 0.10.0: Windows 10 or 11; an x86-64 CPU with SSE4.2; 16 GB of RAM; about 30 GB free for the
game and 1.5 GB for the launcher; a GPU with Vulkan 1.3 and `VK_EXT_external_memory_host` (current NVIDIA and AMD
cards).
## Changed
- **Every setting under the Game tab's Testing heading is off by default again:**
- *CPU helper threads* (`replay_workers = 0`; it was Automatic in 0.10.0);
- *Start next frame early* (`tail_early = 0`; it was on in 0.10.0);
- *Helpers work ahead* and *Helpers take small jobs* (`replay_pipe` and `replay_small`, off as before).
They are experimental and were measured on few cards. A value you chose yourself, in the settings menu or in
nx2navi.ini, stays as you set it: to keep 0.10.0's behaviour, set *CPU helper threads* to Automatic and *Start next
frame early* to On. Everything else is as in 0.10.0; see its notes.

View File

@@ -86,23 +86,23 @@
# the game has sometimes rewritten by then.
# replay_async = 0
# EXPERIMENTAL. Record the large groups of draws of a submission on this many replay worker threads beside the
# submitting one: auto or 0 to 16. Default: auto, half the CPU's physical cores less one (2 on 6 cores, 3 on 8, 5 on
# 12, at most 6), none on four cores or fewer and none on AMD's driver for RX 6000 and older Radeon cards, where a
# player's game lost its graphics device with workers on; the log's "replay workers automatic" line says how many.
# 0: the replay records everything on one thread. 3 gave 51.7 instead of 43.6 fps standing in Hyrule Field on an RX
# submitting one: auto or 0 to 16. Default: 0, the replay records everything on one thread. auto (the default in
# 0.10.0 only): half the CPU's physical cores less one (2 on 6 cores, 3 on 8, 5 on 12, at most 6), none on four cores or
# fewer and none on AMD's driver for RX 6000 and older Radeon cards, where a player's game lost its graphics device with
# workers on; the log's "replay workers automatic" line says how many. 3 gave 51.7 instead of 43.6 fps standing in Hyrule Field on an RX
# 7900 XT, and more than 3 gave nothing more there. Also in the menu: Game, Testing, CPU helper threads.
# With 1 a worker records each long run of draws while the submitting thread waits for it: no faster, it checks that
# the pictures stay the same.
# replay_workers = auto
# 1, the default, lets the game start on its next frame while the graphics card still runs the end of the last one: the
# replay_workers = 0
# EXPERIMENTAL. 1 lets the game start on its next frame while the graphics card still runs the end of the last one: the
# upscaler (FSR 4, FSR 3.1 or DLSS) and the interface drawn after it. The graphics card runs the same work, with the
# copies of what it wrote for the game moved before that end, and the game's waits end once those copies and the
# results it reads are there. A frame whose end hands the game anything else runs as before. Default: 1 (0 up to
# 0.9.2); 0 turns it off. Standing in Hyrule Field on an RX 7900 XT with FSR 4: 50.7 instead of 42.5 fps, and 63.5
# results it reads are there. A frame whose end hands the game anything else runs as before. Default: 0 (1 in 0.10.0
# only). Standing in Hyrule Field on an RX 7900 XT with FSR 4: 50.7 instead of 42.5 fps, and 63.5
# instead of 49.4 with replay_workers = 3.
# Does nothing without one of those upscalers, nor with the lazy write-back (the default on NVIDIA and Intel cards).
# Also in the menu: Game, Testing, Start next frame early.
# tail_early = 1
# tail_early = 0
# EXPERIMENTAL, with replay_workers. replay_pipe = N (1 to 4, default 0): the submitting thread goes on past up to N
# groups its workers still record. replay_small = N (0 to 63, default 0, needs replay_pipe): a group of N draws or more
# that is too small to share out (fewer than 64 draws) goes whole to one worker; 64 or more reads as 63. Kokiri Forest

View File

@@ -296,9 +296,9 @@ static const CfgMeta metas[] = {
// Advanced: scheduling
{"ASYNC_PREEMPT", "1", "0|1|2", RESTART}, {"REPLAY_ASYNC", "0", "0|1", RESTART},
{"REPLAY_PIPE", "0", "0..4", RESTART},
{"REPLAY_WORKERS", "auto", "auto|0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16", RESTART}, // vk_exec.c rw_init, vk_exec_replay_workers_auto
// vk_exec.c "the early tail"; on by default since 0.10.0
{"TAIL_EARLY", "1", "0|1", RESTART},
{"REPLAY_WORKERS", "0", "auto|0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16", RESTART}, // vk_exec.c rw_init, vk_exec_replay_workers_auto
// vk_exec.c "the early tail"; off by default (on in 0.10.0 only)
{"TAIL_EARLY", "0", "0|1", RESTART},
{"REPLAY_SMALL", "0", "0..63", RESTART}, // vk_exec.c group_start
{"FREE_CORES", "0", "0|1", RESTART}, {"TIMER_1MS", "1", "0|1", RESTART},
// dynamic resolution (dynres.c): the scene follows the GPU time toward DYN_RES_TARGET milliseconds

View File

@@ -1475,7 +1475,7 @@ static void tab_game(float scale) {
opt_group_text("Testing");
// vk_exec.c rw_init and tail_enabled read these at start: each row notes the restart and the bar's Restart does
// it. A row whose setting does nothing without another one (rw_init) is greyed out until that one is set.
// Automatic first, the default (vk_exec.c vk_exec_replay_workers_auto), named with the count it gives on this PC
// Automatic first (vk_exec.c vk_exec_replay_workers_auto), named with the count it gives on this PC; 0 is the default
{
static const char *const vals[] = {"auto", "0", "1", "2", "3", "4", "5", "6", "7", "8"};
static char auto_name[64];

View File

@@ -1135,7 +1135,7 @@ static int split_n = -1, split_idle, split_in_pass, split_draws, split_at, part_
static uint64_t split_ns, part_t0;
static uint64_t n_parts, n_subs, n_idle_parts, n_pass_splits, n_cuts;
// ---- the early tail (NX2NAVI_TAIL_EARLY, default 1 since 0.10.0; 0 turns it off)
// ---- the early tail (NX2NAVI_TAIL_EARLY, default 0; on by default in 0.10.0 only)
// Standing in Hyrule Field with FSR 4 (RX 7900 XT, 2026-11-13) a frame's main submission ends with one part of 4.7 ms
// of GPU time, the temporal upscaler and the interface drawn after it, and one of 1.4 ms, the write-backs of what the
// shaders wrote into VRAM mirrors. The game waits for all of it before it writes the next frame's data (the wait after
@@ -1849,9 +1849,9 @@ static void op_one(VkExec *ex, const op_hdr *h) {
}
}
// ---- replay workers (NX2NAVI_REPLAY_WORKERS, default auto: as many as the CPU's cores make worth it,
// vk_exec_replay_workers_auto; 0: the replay records every op on the submitting thread; the Game tab's CPU helper
// threads row sets it)
// ---- replay workers (NX2NAVI_REPLAY_WORKERS, default 0: the replay records every op on the submitting thread; auto:
// as many as the CPU's cores make worth it, vk_exec_replay_workers_auto, the default in 0.10.0 only; the Game tab's CPU
// helper threads row sets it)
// 3 workers: on an RX 7900 XT with a Ryzen 7 5800X3D, Hyrule Field standing went from 41.2 to 50.4 fps (2026-11-12, one
// batch), with the same pictures there and in Kokiri Forest, Kakariko, Goron City, a graveyard house and Gerudo
// Valley; 5 or 7 workers measured the same as 3. Default 0 again after players' games crashed with 3 on by default