From 5e006aec8a5229543db0efdc2d865fabeba4a378 Mon Sep 17 00:00:00 2001 From: chrg6 Date: Thu, 12 Nov 2026 12:17:56 -0500 Subject: [PATCH] Make the release 0.9.2, with its notes. Co-Authored-By: Claude Fable 5.2 --- VERSION | 2 +- docs/releases/v0.9.2.md | 97 ++++++++++++++++++++++++++++++++++++++++- 2 files changed, 97 insertions(+), 2 deletions(-) diff --git a/VERSION b/VERSION index f374f666..2003b639 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.9.1 +0.9.2 diff --git a/docs/releases/v0.9.2.md b/docs/releases/v0.9.2.md index 06961feb..7ccd5f5f 100644 --- a/docs/releases/v0.9.2.md +++ b/docs/releases/v0.9.2.md @@ -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.