mirror of
https://github.com/tangerineturtle1/NX2navi.git
synced 2026-11-15 19:19:58 -04:00
Generate frames with DLSS on Linux through NGX itself: 2x to 6x or dynamic, switched while the game runs.
DLSS Frame Generation went through Streamline, which only the Windows build has, so framegen = dlss did nothing on Linux. There it now calls NGX's frame generation feature directly (vk_dlaa.c vk_ngxfg_*), with the depth, motion vectors, jitter, camera and HUD-less picture the Streamline path gets. With it on, each frame is composed into an image of its own instead of a swapchain image, the generated frames are made at the end of the frame's command buffer, and a presenter thread shows them and then the rendered frame, each copied into a swapchain image it acquires itself, spaced over the time between rendered frames (gfx_present.c ng_*). fg_mult is the multiplier: 2 to 6, or dynamic for only the frames the display's refresh rate needs. NVIDIA's libnvidia-ngx-dlssg.so.<version> goes beside the game; it is not in the repository or any kit. Pull request #124 by spidercraft. Its base was the present path of 0.5, so it is ported by hand: - taken as written: the NGX calls and the presenter (the block is lifted from the pull request's diff); - wired again into present_image, create_swapchain, the output rate and the HUD-less picture as they are now, with every new branch behind vk_ngxfg_wanted, which is 0 in the Windows build: the code is compiled there and never reached; - added: frame generation's feature and parameters are released before NGX shuts down, the presenter's images, semaphores and command pool go when the device is released and are made again for a new one, and a failed submit on this path settles its fence without an acquire semaphore; - the menu: the Frame generation row follows the setting at once on Linux and says "after restart" only when the game started without DLSS upscaling; the multiplier row lists what the GPU allows and Dynamic; - the overlay row of the pull request it builds on (#123) is not part of this. It touches vk_dlaa.c, which another session is changing: one field in N, the FG state after it, one FN line, the instance extension query, the capability read in vk_dlaa_init, the release, and a block appended at the end. Known gap, as in the pull request: on this path fps_limit counts the frames the game draws. The Windows files compile without new warnings; nothing was run, and the Linux path is not compiled here. Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
This commit is contained in:
@@ -125,6 +125,13 @@ or to use another DLSS version, put the library there yourself: NVIDIA publishes
|
||||
`v<version>`, and `tools/dlss_pin.py` names the version the kit carries. Later builds keep a library they did not
|
||||
place. Without it DLSS does nothing on Linux.
|
||||
|
||||
DLSS Frame Generation (RTX 40 and 50 cards) runs through NGX itself on Linux, without Streamline. It needs NVIDIA's
|
||||
`libnvidia-ngx-dlssg.so.<version>` beside `ocarina` (the same repository, `lib/Linux_x86_64/rel/`; no kit carries it)
|
||||
and DLSS upscaling on when the game starts. *Frame generation* in the Screen menu then offers NVIDIA DLSS, which
|
||||
switches at once, with a *DLSS multiplier* of 2x to 6x (above 2x on RTX 50 cards) or Dynamic, which generates only the
|
||||
frames needed to reach the display's refresh rate (`framegen = dlss` and `fg_mult` in `nx2navi.ini`). The log says
|
||||
`ngxfg: DLSS Frame Generation available` when NGX found the library.
|
||||
|
||||
`tools/make_appimage.py` packs this kit into one `NX2navi-Linux-<version>-x86_64.AppImage` with its own Python, for
|
||||
players without a source checkout: it checks for the packages above, installs zbic with pip on its first run, picks
|
||||
`--jobs` from the memory, builds into `~/Games/Ocarina` (or the folder given after the dump) and writes `play.sh`
|
||||
|
||||
Reference in New Issue
Block a user