Skip to content

NX2navi 0.10.0

Choose a tag to compare

@tangerineturtle1 tangerineturtle1 released this 13 Nov 14:59

Install or update

  • Already have 0.6.0 or newer: start the launcher; it offers 0.10.0, updates itself and keeps the game it compiled
    and the shaders it prepared. This update translates the game's code once more, for the new frame-rate fixes, and
    compiles what changed: a few minutes, once.
  • Already have 0.5.0: the same, and the game's code 0.5.0 compiled is kept as it was compiled (for any x86-64
    processor); Rebuild the Game in the launcher's home compiles it again for yours.
  • New install: download NX2navi-Setup-0.10.0.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: 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). A GPU without
VK_EXT_mesh_shader gets the mesh shader fallback as before, or runs the game's mesh shaders as compute shaders with
low_end_gpu = 1.

Fixed above 60 fps

These are game patches, on by default; each has a setting to turn it off.

  • Moving platforms carry Link again above 100 fps (floor_carry). Above 100 fps the game's character controller
    kept only a tenth of a moving floor's speed, so the Deku Tree's floating platform slid out from under Link. It now
    carries him as it does at 60 fps.
  • Webs and water spring back at any frame rate (water_steps). Spider webs sink and bounce under Link and water
    surfaces react to him, their simulation stepping 60 times a second whatever the frame rate. Up to 64 such surfaces
    at once.
  • Sound and music no longer go silent after a few loading zones (sound_steps): the game's sound manager runs at
    60 Hz with whole steps.
  • Water ripples keep moving above 60 fps, and movie events follow the picture's own timestamps
    (by automata.).

Faster, with fewer stutters

  • The next frame starts while the graphics card finishes the last one, on by default (tail_early; by
    epicmeme546). The game used to wait until the card had finished the whole previous frame, upscaler and interface
    included, though nothing it reads comes out of that last stretch. Standing in Hyrule Field on a Radeon RX 7900 XT
    with FSR 4: 50.7 instead of 42.5 fps, 63.5 instead of 49.4 with three CPU helper threads, and 56.0 instead of 45.9
    along a route; 51.8 instead of 47.8 with FSR 3.1. It acts with TAA, DLSS, FSR 3.1 or FSR 4 on AMD cards; on NVIDIA
    and Intel cards it changes nothing yet. A frame that would hand the game anything else runs as before. Off:
    tail_early = 0, or the settings menu's Game tab, Testing, Start next frame early.
  • CPU helper threads are Automatic (replay_workers = auto): the draw replay uses a number of helper threads
    chosen from your processor's cores. None on 4 cores or fewer, and none on Radeon RX 6000 cards and older, where
    some players' games lost the graphics device with them on.
  • More pipelines are built before play. The shipped pipeline list holds 9,814 pipelines and their shaders, about
    960 more than 0.9.2's, taken from play: a new install builds them while it prepares instead of meeting them in
    play.
  • Large textures are copied out of the game's memory on several threads (par_jobs): a texture of 1 MiB or more
    is copied two to three times faster when it first appears, the same bytes as before.
  • Fewer foliage hitches: mesh pipelines link from stage libraries, which are built ahead at the preparation and at
    boot, and a mesh draw waits for its fast link instead of being left out.
  • The pipeline cache is at least 1024 MB, its limit set from your RAM, and kept under it when written (by
    Leyukaka): on a 64 GB PC with an RTX 5080 the pipelines found in the cache at boot went from 14 to 84 %. The
    graphics driver's own shader cache is checked at normal priority, carries on where it stopped, is rebuilt at an
    update only when the driver lost it, and is warmed on the boot screen after a driver change.
  • Shader translation and compute preparation work is reused (by automata.), repeated index-buffer binds are
    skipped, and log writes are batched.
  • Experimental, off by default: Helpers work ahead (replay_pipe, 0 to 4) and Helpers take small jobs
    (replay_small, 0 to 63; by epicmeme546). In Kokiri Forest on the RX 7900 XT, with the early tail on: 62.2 fps with
    five helpers and replay_pipe = 4, 63.2 with replay_small = 16 as well, against 45.4 with all of them off.
  • Linux: game memory is shared with the graphics card through udmabuf instead of shadow copies (by Vasilis
    Manetas). On a Radeon RX 6800 XT with RADV: 60.7 instead of 40.3 fps in Kokiri Forest, with frames over 25 ms down
    from 768 to 5, and 55.7 instead of 42.4 in Hyrule Field.

Less memory

  • Video memory is managed automatically. A texture the game let go of is dropped after three minutes of play
    unused (six for one only the graphics card drew); in the sessions measured nothing came back after that long.
    What a switched-off feature held is freed: DLSS and DLAA (81 MiB of images at 2560x1440 and about 0.5 GB per DLSS
    feature), FSR, FSR 1 (56 MiB), SMAA (35 MiB), HDR (42 MiB) and frame generation's images; at 4K they are about
    twice that.
  • A video memory leak is gone: each pipeline a run drew kept its fast-linked version as well as its optimised
    one. The driver's video memory outside the game's own allocator grew by 491 MiB in one session and from 1,672 to
    2,485 MiB in a long one.
  • Unused pipelines are given back while video memory is short (pipe_release): over 80 % of the card's budget,
    the pipelines built ahead of play that no draw has used go, a few hundred every 5 seconds, and a draw that needs one
    later builds it again from the pipeline cache.
  • Shader code is kept compressed in system memory while idle (shader_compress): 777 MiB came down to 229 MiB in
    a play session, with no decompression on the drawing threads.
  • An area load no longer makes about 1.1 GiB of new upload memory (by Vasilis Manetas): it reuses what the boot
    made.
  • A full video memory heap sends further allocations to another video memory heap, never to system memory (by
    Tobim6).
  • The log has a memory report every 3,600 frames: video memory by owner, what lies outside the game's allocator,
    system memory by owner and what grew over the session.

New

  • F8 saves a bug capture (by epicmeme546). When you see something wrong, press F8: the game writes where Link
    stands, the area, the camera, the picture on screen, your settings, the frame times around the press, the end of
    the log and your save into one folder under logs\captures, and a note on screen gives the capture its number.
    Telling us "capture 3" is then enough: a test run starts at that place with that camera and those settings
    (python tools/capture_run.py 3, docs/bug-capture.md). The flight recorder's F8 dump goes into the capture's
    folder.
  • Text speed: Normal, Fast or Instant.
  • A sprint button (by kendo): L3 or the game's B button makes Link sprint without rolling first, as a toggle or
    while held.
  • Native (100%) in the Upscaling row, and frame generation with any Upscaling choice (DLSS and AMD FSR 3.1).
  • Low latency in the Screen tab: Off, On or On + Boost, with NVIDIA Reflex or AMD Anti-Lag, without frame
    generation too (off by default).
  • Characters' own motion: every skinned character gives DLSS, FSR 3.1 and frame generation its own motion, and
    Link's is on by default, so characters stay sharper while they move.
  • Experimental, off by default:
    • softer shadow edges that crawl less as the camera moves (shadow_pcf);
    • no one-frame flicker of light or glare when the graphics card falls behind on occlusion counts (oq_hold);
    • quad and line-loop draws drawn as the game meant them (quad_index);
    • DLSS or FSR before the bloom; DLSS for every render size of a mode, keeping its history;
    • HD rumble for Pro Controllers and Joy-Cons.
  • For reports: stutter_map = 1 gives the log a line for each hitch, with the area, what the frame waited for and
    any pipeline or shader that was missing, and every 10 minutes a map of the areas by their hitches;
    tools/stutter_map.py turns a log into a table. The flight recorder also saves after a one-frame flash.

Fixed

  • Crashes and freezes:
    • the log is written before the console, so a blocked console window can no longer stall the game, and closing it
      exits the game normally;
    • frame generation without an upscaler no longer frees memory the graphics card still uses, and keeps the sizes it
      uses when the upscaler's idle sizes are freed; a frame generator that fails is taken down cleanly;
    • a texture handle out of range gets a safe empty slot; the menu skips a frame instead of crashing when its buffers
      cannot be made; an upload refused for lack of memory is tried again;
    • SMAA's images can no longer be freed twice; draw marks are numbered safely across helper threads;
    • memory mirrors hand over only after their first copy, under the right lock;
    • the render-target heap is sized for the scene, with a safe fallback;
    • closing the game during the shader warm-up is no longer counted as a driver crash, and the warm-up is capped at
      10 minutes;
    • when two installed drivers list the same graphics card, the newer one is used;
    • AMD's Anti-Lag calls are locked against each other; a late HD rumble report no longer starts a Joy-Con pair
      buzzing after the stop.
  • Pictures: height maps, masks and lookup tables appear at once instead of after a placeholder frame; draws that
    write memory wait for their pipeline; small buffer clears keep their order; the texture pool has room for the game's
    33,068 descriptors (by Leyukaka); the stand-in upscaler is sharper.
  • Low-end GPU mode is offered only on the cards it was written for, which ended its shadow bug on high-end cards,
    and leaves frames prepared on their own thread off.
  • Radeon RX 5000 and 6000: mesh pipelines are built without the driver's optimiser, as a candidate fix for the lost
    graphics device; the log warns when CPU helper threads are set by number on RX 6000 cards and older.
  • Launcher: one launcher and one job at a time per install; mod installs are all or nothing and refuse names
    Windows cannot keep; an interrupted job is reported at the next start; disk space and long paths are checked before
    downloads and unpacks; downloads resume correctly and only into the right file; the settings file is left alone
    while the game runs; a save import holds the game's profile lock; crash files are written whole or not at all.

Changed

  • The hidden co-op beta is gone. The co-op of 0.8.0 (shown only with coop_beta = 1) shared story progress
    through a relay a player had to run and never showed the other players. Its code, its settings (the [coop]
    section of nx2navi.ini), its relay script and its menu tab are removed; lines of it left in an nx2navi.ini do
    nothing, and a bug report still keeps their values out. A new co-op is being built in its place.
  • The settings menu's Game tab has a Testing heading with the experimental performance settings: CPU helper
    threads
    , Helpers work ahead, Helpers take small jobs and Start next frame early. A row whose setting does
    nothing without another one is greyed out and says which it needs.

Known issues

  • Enemies above 60 fps were only checked in general; report any that move or attack too fast or too slow.
  • The candidate fix for Radeon RX 5000 and 6000 cards losing the graphics device is not confirmed by a player yet.
  • Start next frame early was measured on an RX 7900 XT only; it is on by default, so please report a dark or
    flickering frame on other AMD cards (tail_early = 0 turns it off).
  • The first visit to an area after an install can still pause for a moment while its textures are decoded.
  • Integrated AMD GPUs can fail at the title screen (their host memory heap is too small for the game's memory).
  • On Linux only the udmabuf change was measured, by its author.

Thanks

Pull requests and branches in this release came from epicmeme546, Tobim6, kendo, automata., Leyukaka and Vasilis
Manetas. Thanks to everyone who sent logs, captures and test reports.