Make the release 0.9.2, with its notes.

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
This commit is contained in:
chrg6
2026-11-12 12:17:56 -05:00
parent 0533b3028e
commit 5e006aec8a
2 changed files with 97 additions and 2 deletions

View File

@@ -1 +1 @@
0.9.1
0.9.2

View File

@@ -1,3 +1,41 @@
## Install or update
- **Already have 0.6.0 or newer:** start the launcher; it offers 0.9.2, updates itself and keeps the game it compiled
and the shaders it prepared. Only what changed is compiled again.
- **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.9.2.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` runs the game's mesh shaders as compute shaders (new in this release, see below).
## New
- **Grass and foliage on graphics cards without mesh shaders** (AMD before RDNA 2, such as the RX 400 and 500 series
and Vega; NVIDIA before the GTX 16 and RTX 20 series). The game draws its grass, moss and other foliage with mesh
shaders. On a card without them these now run as compute shaders, and what they make is drawn as ordinary
triangles. It is on by default on such a card and does nothing on any other; `mesh_emulation = 0` in nx2navi.ini
goes back to what 0.9.1 did there. Written and run on a Radeon RX 580 by Tobim6.
- **Video memory kept within what the card has free.** Textures and buffers are allocated within the budget the
driver reports for each memory heap, with 512 MB kept free (`vram_reserve_mb`), and a texture that does not fit the
first heap goes to the next one with room. A large batch of texture uploads is handed to the GPU early instead of
growing until a submit runs out of memory. By Tobim6.
- **A settings tab for older and slower cards**, *Lama patches*, by Tobim6: how many released textures are kept, the
video memory reserve, the upload batch size, mesh shader emulation, foliage detail (`foliage = full`, `reduced` or
`off`), and three settings that stay off unless you choose them: preparing frames on a thread of their own
(`replay_async`), keeping memory pools the game refills every frame in system memory (`mirror_hot`), and compiling
the game's code at -O2 at the next *Rebuild the Game* (`guest_opt = 2`, a build several times longer).
- **Link's own motion for DLSS, FSR 3.1 and frame generation** (`selective_motion = 1` in nx2navi.ini, off by
default): Link and the equipment attached to him are drawn a second time with last frame's pose, so the upscaler
gets their real motion in fast turns, attacks and jumps instead of an estimate. It has not been played by us yet. By
automata-rtx (pull request #699).
- **A Switch used as a controller over USB** (it shows up as "Nyx Joy-Con") is taken as a gamepad. Any other joystick
the game cannot use is named in the log once, with its ids. By Tobim6.
## Fixed
- **FSR and DLSS showed a blocky, shaking picture with the HUD hidden.** The upscaler's picture was put where the
@@ -19,13 +57,70 @@
- **A new start for the upscaler at every frame of a quick camera swing.** A fast swing of the camera around Link (11
to 18 degrees a frame) was taken for a cut to a new view. Only a jump of the camera or a turn of 30 degrees or more
in one frame counts as a cut now.
- **Objects drawn grey for a frame while you move.** While you move the game brings in sharper versions of about 32
textures every four or five frames, each in a texture slot that showed the coarser one until then. A frame made 16
of them and drew the others as their plain stand-in until the next round: lamp posts, the windows of a house front
and patches of ground went flat grey for one frame. A slot that shows a texture, and one the game has just
registered, now gets its new texture in the same frame. In 600-frame recordings of walks through a village, 1,525
such slots went blank before and none after.
- **Textures arriving late in a busy frame.** The time a frame may spend making textures also counted the checks of
textures already made, so in a busy area the limit was reached before anything new was made. Only the making counts
now.
- **One frame nearly black, with its colours exchanged.** The game reads its scene through a second description of
the same memory in another format. That texture was dropped every 600 frames as overwritten although the game still
read it, and the frame that dropped it made it again from the scene's raw bits: in a player's recording one frame at
a sixth of its brightness. A texture that is still read is kept now.
- **Teal splotches in the fog of Kokiri Forest.** The game puts its per-frame render targets over each other in
memory, and the fog read its volume after the bloom target had been drawn over it. A texture read in that state gets
memory of its own from then on. By Tobim6.
- **The game hanging with the draw replay on several cores.** Two replay threads could wait for each other at the
end of a render pass, each holding the lock the other needed. By leonardochappuis (pull request #697).
- **Lines drawn one pixel wide whatever width the game set.** The width is passed on now where the card supports wide
lines.
- **A generated frame blended from two unrelated pictures at a camera cut, with FSR 3.1 frame generation.** Frame
generation is told of the cut and starts from the new picture. By FIocker (pull request #703).
- **Frame generation on cards whose graphics queue family has a single queue** presents through another family, and
the picture without the HUD is also used where the upscaler's output is smaller than the presented picture. By
Tobim6.
- **A build that was cut short while it generated the game's sources** was taken for finished at the next try. The
launcher runs the generation again now. By DeepDaddyTTV (pull request #360).
- **Linux: each submission is handed to the driver's own submit thread** on Mesa drivers, so the draw replay does not
wait for it. By DerHalbGrieche (pull request #701).
## Changed
- **Draws and uploads wait less for the GPU.** The pages of game memory a submission needs are copied while the draw
replay records it, so the game's wait after a frame's first submission ends once the replay has handed it over instead
of when the GPU has run it; a submission whose results the game reads back is still waited for. The texture pool has
8 descriptor sets in turn instead of 4. By Tobim6.
- **The recording thread is used on AMD cards without mesh shaders** (RX 400 and 500, Vega, RX 5000). It stays off on
the newer AMD cards, where it lost the device. On a Radeon RX 580 the replay's part of the game's wait after a
frame's first submission went from 12 ms to 6.9. By Tobim6.
- **The flight recorder** (`flight = 1`, F8) keeps its pictures at 640x360 instead of 320x180 and notes texture slots
that lose their picture, what an upload read and slot registrations. A captured frame also lists the draws that were
rejected while it was prepared (by DeepDaddyTTV, pull request #501). New for reports: a key that dumps the next
frame (`dump_key`), the GPU's time per render pass (`pass_times = 1`) and, in a crash report, what the crashing
thread was building (by Tobim6).
## Known issues
- At FSR's and DLSS's smaller modes, Link and other characters look a little coarser while they move: the upscaler
gets only the camera's motion for them, not their own.
gets only the camera's motion for them, not their own. `selective_motion = 1` in nx2navi.ini gives it
Link's own motion; it is new and off by default (see New).
- Ultra Performance gains little frame rate over Quality with FSR 4. Most of a frame is the replay of the game's draws
on the CPU, which does not shrink with the render size, and FSR 4 itself takes 3.1 ms of the GPU's time at Ultra
Performance and 3.9 ms at Native AA on a Radeon RX 7900 XT (FSR 3.1: 0.5 ms). Measured standing in Hyrule Field at
3416x1440: FSR 4 Native AA 52 fps, Quality 53, Ultra Performance 55; FSR 3.1 Native AA 55, Ultra Performance 66;
without an upscaler 70.
- The changes for older cards (mesh shaders as compute, the video memory budgets, the shorter waits for the GPU) were
run by their author on a Radeon RX 580. Please report how they behave on other cards.
- FSR 4, its frame generation and the AMD-only fixes were not run by us on the cards they are for before this
release.
- 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).
- Nothing in this release was run on Linux by us.
## Thanks
Pull requests and branches in this release came from Tobim6, epicmeme546, leonardochappuis, automata-rtx, FIocker,
DeepDaddyTTV and DerHalbGrieche. Thanks to everyone who sent logs, captures and test reports.