⬇ Download for Windows
⬇ Download for Linux / Steam Deck
Highlights
A release candidate: 309 changes since 2.1.0, with 52 features, 165 fixes and 43 performance improvements. To get it, set the builder's Update track to Release candidate, or download it above. Please test it and report anything broken.
🧱 Stability
- Far fewer device-lost errors and GPU hangs (Hyrule Castle trees, 3D textures, split submits)
- The game recovers when the screen/surface or audio device goes away
- Shaders a driver crashed on are kept away from it; a driver that hangs compiling no longer freezes the game
- A real GPU hang now ends with a report instead of a silent freeze
🧩 Shaders & stutter
- Shaders load the moment the game creates them, not on first draw
- 11,985 more pipelines prepared ahead; the first start after preparing warms the cache itself
- AMD, Intel and RADV translation fixes; mesh fallback for RX 6000 (Navi 21) and older GCN
- Program cache compressed with zstd
💾 Memory
- VRAM budget counts compressed textures properly, keeps big ASTC as BC7
- Smarter eviction under VRAM pressure: in-use textures stay, budgets survive restarts
- Dynamic texture budget on integrated GPUs; preset picked from your VRAM on first start
- Optional: skip the 2.5 GB pipeline cache file (~3 GB less RAM)
🎨 Graphics
- DLSS Frame Generation (3x+), Anti-Lag 2, Reflex, FSR 3.1, FSR 4 for HDR (2x faster on RDNA 2)
- PsychoV35 HDR tone mapper, up to 5120x2160, 21:9, 48:9, adjustable FOV
🎮 Menu, controls & builder
- Insert menu in 13 languages, V-Sync/VRAM/Aspect rows, Uncapped fps, detailed FPS counter
- Second gamepad binding, ocarina buttons, keyboard prompts, skip the opening
- Update tracks (Release / RC / Nightly), portable Windows installs, faster rebuilds
🐛 Also fixed
Sound, water, platforms and time of day above 60 fps, ground garbling, tree-shadow flicker, gyro after Alt+Tab.
2.2.0-rc.1 (2026-11-12)
Features
- add separate button mappings for the ocarina notes (#1930) (2708dc6)
- agents: team updates on Matrix, with a sign-in, rate-limited post script and a skill (#2606) (9c5612f)
- agents: test requests need a collaborator's PR or the "testing wanted" label (#2746) (51da046)
- agents: test requests: ask the team to test a PR on other hardware, claim it, report the results (#2734) (6dcc15c)
- an Upscaler choice Off: no upscaling at all, the game's own network left out too (#2097) (215ab3d)
- build the Linux AppImage in a container on any distribution (#1936) (11e0826)
- build: build_times.json and the build's last lines say where the time went (#2693) (a9d5a0b)
- builder: add relocatable Windows portable installations (#2367) (5a3fcb9)
- builder: the damaged game files a build replaced are listed in the game folder (#2237) (#2254) (6b2bcba)
- camera: add adjustable gameplay field of view (#2357) (ba472ea)
- control: drive a running game over a local socket, with a CLI (#926) (32693f0)
- control: the Debug tab's Switch age over the bridge, so scripts reach the adult's maps (#2694) (b157c3e)
- dlss: DLSS Frame Generation through NGX, evenly paced at 3x and up (#2118) (c51df0b)
- fsr4: FSR 4 for the game's native HDR, given linear light (#2342) (a0dfd28)
- hdr: PsychoV35 scene tone mapper for Native HDR (RenoDX) (#2481) (ddb156d)
- host: a widescreen picture up to 5120x2160's pixels, native for 21:9 at the 4K output (#2120) (d379d88)
- input: add a second gamepad binding in Controls (#1990) (bf04924)
- input: Camera speed row for the right stick and the camera keys (#1945) (c689be3)
- input: log SDL controller GUID and active mapping (#2678) (3abfa0a)
- make_game.py --fetch-fsr-runtime fetches AMD's FSR 4 runtime (#1866) (d7dd931)
- menu: a Bug report row that saves what an issue needs in one press (#2347) (6f7ab2a)
- Menu: a row that turns the preset to Custom keeps the preset's memory budgets (#1358) (26b2f74)
- menu: a V-Sync row (Auto, On, Off) (#2041) (b0361d2)
- menu: a VRAM budget row of its own (builds on #1358) (#1859) (bb1ffa2)
- menu: add compact TV-style tuning bar for live setting tweaks (#2378) (6c8c1bf)
- menu: an Uncapped choice for the Game frame rate cap (#2122) (364d199)
- menu: Esc opens the Insert menu by default (Menu shortcut "Insert, F1 or Esc") (#2197) (06c30bd)
- menu: FPS counter levels: frame time, a graph and where the time goes (#2181) (ebbba2e)
- menu: Frame generation by and the FPS counter name who makes the frames (#2788) (8296d07)
- menu: let Gameplay skip the new-game opening (#2827) (435d83d)
- menu: Mesh shaders is a launch switch, not a menu row (#2881) (8694e3c)
- menu: sections on the Graphics tab (#2177) (eaef146)
- menu: the Aspect ratio and Output resolution from the screen's display modes (#2566) (511198c)
- menu: the Aspect ratio row (was Ultrawide), at the monitor's shape by default (#2119) (145eed2)
- posix: allow optional HOS_WINDOW_TITLE and HOS_WM_CLASS env overrides (#2116) (11a976f)
- prompts: a Keyboard face: the keys and mouse buttons bound, in texts, hints and menus (#2435) (b2456c6)
- prompts: a new face or new controls show while the game runs, no restart (#2366) (786b5b0)
- Save my pipeline list, the zip and filled-in report for the "Submit your pipelines" issue in one click (#2447) (9a63282)
- the Insert menu in 13 languages, with Game language and Menu la… (#1864) (c356bef)
- update: an update track (Release, Release candidate, Nightly) in the builders and the game (#2061) (6cecdd1)
- video: decode the AV1 movies with dav1d on Windows (#2316) (#2515) (6f4f28a)
- video: support 48:9 triple-monitor picture geometry (#2052) (b46b60f)
- vk: a state list record with no variant prepares the plain one; 11,985 pipelines from Fritchii's recipe (#2134) (333fa02)
- vk: actor motion for single-influence, two-influence and rigid one-bone models (#2787) (dfc8fa5)
- vk: AMD Anti-Lag 2 with frame generation (#2262) (e2057b2)
- vk: FSR 3.1 as an engine of the temporal chain, with the characters' motion (#2305) (579c6d4)
- vk: load shader programs when the game creates them (#2760) (86a9cda)
- vk: NVIDIA Reflex: each queue submit tagged with the game frame its GPU work belongs to (#2499) (8caa674)
- vk: observe completed GPU write-back differences (#2131) (8b9e549)
- vk: reactive mask for DLSS and FSR 3.1 from the scene's transpa… (#1653) (5cbfead)
- vk: say why each texture is evicted, and which GPU-drawn ones go with no copy of their texels (#1879) (d8f4a17)
- vk: the frame trace names the waits it could not show (#2683) (37382ca)
Bug Fixes
- agents: team_chat.py read no longer stops at the first post on Windows (#2640) (de86601)
- audio: process Aux buffers and isolate splitter filter history (#1544) (40c501a)
- audio: the output comes back after its device goes away, and follows Windows' default (#2190) (4a0bf35)
- bake: SHA-1 stamps and keys marked usedforsecurity=False, as build.py and make_game.py are (#2475) (a5b955f)
- build: a compile error in a source file no longer translates the game again (#2675) (be65433)
- build: a new work folder's second build no longer translates the game again (#2674) (c544828)
- build: an RX_MARCH choice is not reported as a CPU without AVX2 (#2223) (497060f)
- build: check Linux prerequisites before reading the dump (#2793) (dae1930)
- builder: --work set to the checkout's own work folder no longer stops with SameFileError (#2285) (d6dc45b)
- builder: a .nup name outside Windows' code page no longer stops the build (#2246) (#2253) (f94a5fe)
- builder: a drive that cannot read its files is said as that, with its repair (#2063) (#2072) (5c59382)
- builder: a package with a Python of its own runs no other (#2045) (#2088) (d1d3888)
- builder: an update ends a leftover windowless game process, and names a running one (#2155) (ddafc1f)
- builder: any write error in the game folder check gives the clear message (#2802) (620f79e), closes #2792
- builder: Cancel stops a Linux update while it downloads (#2160) (ed2fff0)
- builder: find damaged textures still in the .nup's zstd frame (#2391) (17f2df2), closes #2361
- builder: Linux keeps NVIDIA's DLSS SDK in its cache folder, and the license accepted in its settings (#2485) (92552b7)
- builder: Linux Play leaves the game its hookshot_log.txt again (#2279) (1e02fdb)
- builder: retain bounded Linux Play startup diagnostics (#2024) (44e56b0)
- builder: scope stale process cleanup to the work folder (#2250) (20f891e)
- builder: stop when damaged resources have no replacement (#2096) (855a560)
- builder: the first page offers the update again after one that stopped (#2129) (#2141) (0c0e3cf)
- builder: the hard drive warning finds a Btrfs disk on Linux (#2281) (6c529a2)
- builder: the Linux builder gives this build's reason for stopping, not the last one's (#2159) (bc95b7b)
- builder: the Linux builder shows its clock and countdown during a build (#2150) (940eb9e)
- builder: the Python setup checks the setup list as setup.c does (#2057) (812f28d)
- builder: Windows keeps NVIDIA's license accepted in its settings, so an update keeps DLSS without the SDK's files (#2528) (b56bf07)
- build: explain missing prompt stamps and reclaim abandoned staging (#2710) (141339e)
- build: link when the build files folder's path has a comma (#2137) (0ac2278)
- build: run offline bake with portable zstd and Clang 18 (#1954) (51e1d98)
- build: the iGPU texture budget's caps build on Linux (#2634) (85a6dde)
- build: the lift key is taken again only if the lift's other inputs did not change (#2686) (331efae)
- cheats: keep the teleport minimap repair in saved games (#2646) (59316c4)
- cheats: Teleport and Switch age no longer leave the minimap hidden for good (#2217) (#2402) (21e0eec)
- ci: recover partially enrolled AppImage toolchain PPAs (#2275) (61f343e)
- debug: the flight lets Link go for events and respawns (#2050) (c2a8c92)
- dlss: #2193's review notes: the tolerance as dlss_checks.h says it, each refused size logged once (#2413) (01c4e32)
- dlss: a render size a pixel past a mode's range is that mode's, and a refused size keeps the feature (#2193) (1ceaa2b)
- dlss: DLSS Frame Generation's own runtime in the game folder, and NGX left alone after refused sets (#2598) (55b976c)
- fps: HOS_FPS_LOG read by the switches' rule, so test_env_on passes on main again (#2575) (7dfb853)
- fps: keep sound and moving platforms working above a 60 fps cap (#2470) (8fcc8c2)
- fps: the sound clock keeps its remainder around 60 fps, and cap 60 runs every phase (#2552) (9df055f)
- fps: water ripples keep moving above 60 fps (#2409) (6df80a8)
- framegen: FSR 3.1 interpolation built with the SDK's name for low-resolution motion vectors (#1943) (4e04e51)
- fs: a directory's listing is read, counted and closed under one lock (#2539) (5a4cdf3)
- hdr, fsr: HDR with an upscaler or Sharpness reads a sampleable picture; native HDR images RGB10A2 from the start (#2038); FSR 3.1 above Quality (#2147) (0a28ff2)
- host: a movie's end no longer waits ~250 ms for a picture that is not coming (#2682) (cc04531)
- input: keep camera inversion out of stick rest detection (#2286) (b29967b)
- input: preserve stick direction outside the dead zone (#1600) (284c912)
- input: read a steam controller's gyro when steam starts the game (#2495) (e4d4515)
- input: reseed mouse look after camera handover (#2653) (0ec31ff)
- input: the movement and camera keys hide the game menus' cursor again (#2664) (9713f25)
- input: turn a frozen gyroscope's sensors off and on again (gyro dead after Alt+Tab under Steam) (#2036) (b76f12d)
- lift: write a split chunk's parts before the chunk itself (#2751) (5a0c21c)
- linux: acknowledge Play's scope hand-off before closing (#2643) (bc0ecd8)
- linux: don't try dma-buf imports on NVIDIA's driver (#2340) (a0fb7ea)
- linux: make the folder __GL_SHADER_DISK_CACHE_PATH names, or NVIDIA keeps no shader cache (#2363) (0ccad3a)
- linux: Play from a desktop launcher no longer has systemd stop the game (#2540) (50c81bb)
- linux: prevent implicit game downgrades in the builder (#2406) (bd69992)
- linux: the replay's reserved core is a performance core on Intel's hybrid CPUs (#2805) (262f561)
- linux: the updater follows a redirect only to another https link (#2045) (#2086) (465ab86)
- linux: warn when permissions block udmabuf imports (#2111) (7508985)
- main links again: hos_disable_camera_centering is back in host/mouse_native.c (#2632) (a016b7a)
- make_game: a launcher's build keeps the folder's language, and a first one takes the system's (#2184) (#2284) (e038753)
- menu: a chosen microphone is found again after a restart (#2572) (ef81aee)
- menu: keep the mouse free after Escape then F1 (#2035) (1a43a1e)
- menu: option_set walks the list rows in the arrows' order to the value asked for (#2496) (4087241)
- menu: the Aspect ratio's move for older files skips runs with HOS_ASPECT (#2541) (8939913)
- menu: the chosen memory budget survives a restart (#2376) (7109693)
- menu: the Ultrawide row says Off (16:9) when it is off (#2078) (bb94350)
- menu: translate the current controls and automatic hints (#2654) (6946562)
- mods: merge a mod's resource size table with the button prompts' instead of switching the icons off (#2270) (9a3eb90)
- mods: merge prompts with the game's resource size table (#2592) (bd9b07e)
- native camera positioning bugs (#2617) (8568959)
- nup: exclude digest-mismatched stand-in sources (#2019) (2009c5f)
- oot: try a full heap's OptimizeChangeBank allocations again (#2451) (1b69533)
- posix: drop oldest queued buffer instead of failing when waveOutWrite ring nears full (#2115) (1ce1463)
- prepare: the pipeline steps log their progress every 10 s, with the time left ("stuck on preparing shaders") (#2186) (cc11554)
- profiler: preserve full demangled ELF symbol names (#2170) (c04d132)
- prompts: auto picks the steam deck face for a steam controller (#2448) (355453d)
- prompts: find the prompts' font on native Windows, kept from its stream's start (#2583) (7bd6076)
- prompts: the controls page's leader lines end on their buttons (#2089) (798f325)
- release discarded Vulkan resources and thread wake events (#2358) (e8fa368)
- release: a SHA256SUMS replaced between its listing and its read is read again (flaky nightly test) (#2822) (7610111)
- release: explain the Windows zip, and let release candidates' AppImages update to the next one (#2132) (2e62a97)
- saves: a link to an entry that moved first follows it to the new place (#2832) (9e77642)
- saves: the Linux saves' move leaves a linked folder and its saves alone (#2282) (9030bf8)
- saves: the save script finds Lichii's own data folder (#2146) (#2165) (e7f5581)
- scripts: team_chat login keeps the token when the browser closes the tab first (#2671) (87991bc)
- setup: recover incomplete self-contained Builder runtimes (#2449) (2dfe901)
- shaders: a subgroup barrier between a warp's shared memory store and its next load (#2524) (dd2369e)
- shaders: F2I.S32 and I2F.U32.RZ conversions, LDSM address copy (ported from Fritchii) (#2443) (53bc3d4)
- shaders: noperspective varyings interpolated right on AMD (Royal Family Tomb water); sirit names an undefined operand (#1830) (6749ba2)
- switches that behave as players expect, and dead ones removed (#2042) (2f2f537)
- tests: main's readme and Windows write-back checks pass again (#2883) (a997297)
- tests: run_all.py prints a failed check's quotes into a Windows pipe instead of stopping (#2666) (8a10b34)
- tests: the input-background fixture reads oc_consumed_pads, so clang 23 builds it (#2777) (b8dce44)
- tests: the one-variant cache test builds with the compressed program cache in the tree (#2861) (fe5e2cb)
- trace: Log input origins and game-clock timestamps (#2247) (47ed9f1)
- trace: Separate present-call and virtual-core waits (#1983) (fc7a982)
- update: a folder newer than the latest release is not offered the older one (#2519) (f64696d)
- update: on Linux "Skip this version" is kept, and no longer costs the game its saves (#2283) (1f1c0a8)
- vcores: an escaped thread takes a core again after its next block (#1929) (#2302) (c8b9a9f)
- vcores: hos_vcore_back ends an escape too, so no inner block takes a core early (#2387) (bce1476)
- vcores: no core held while a movie picture is decoded (#1929) (#2322) (d522ec0)
- vcores: no core held while OpenFile builds the button prompts (#1929) (#2301) (26c12b0)
- vcores: the core-wait escape at 2 s, not 250 ms (#1929) (#2127) (07b0359)
- vi: prevent frame-time jitter from speeding up the game clock (#1911) (f4f2c74)
- vi: the pick-up counter fades again above a 60 fps cap (#1832) (#2006) (f915af9)
- vi: the time of day passes again above a 60 fps cap (#2093) (f0c40fc)
- vk,host: log granular Vulkan initialization and backend loading failure reasons (#2113) (9d99fa3)
- vk: a DLSS feature that fails to be made is made again at the next DLSS change, not never (#2550) (6770b11)
- vk: a fence wait covers every part of a split submission, not only the first (#2419) (e0dbf40)
- vk: a readback's wait for its write-back ends after 250 ms (#2222) (fa2b25b)
- vk: a recorder packet bigger than its room is always made directly (#2251 follow-up) (#2490) (15646d1)
- vk: a shader preparation the GPU driver stops answering in goes on or ends, and says why (#2107) (#2195) (7759a6f)
- vk: AMD/Intel shader translation fixes (out-of-bounds fetches, gathers, NaN tests) (#2457) (fce5345)
- vk: bound the wait for shaders still translating, then leave the… (#2586) (65a4d87)
- vk: build task and mesh programs with the optimizer on RADV (#1965) (eed4d91)
- vk: capture switches follow the on/off rule (#2651) (1101a8e)
- vk: count BC textures by blocks in the texture budget (#2624) (5d81051)
- vk: count natively sampled ASTC textures by their blocks in the texture budget (#2288) (fd16f15)
- vk: cyan after a pause in the background: keep the mirrors of pools the GPU writes (#2154) (68a93ac)
- vk: DLSS and DLAA sample textures at NVIDIA's mip bias (#2441) (3319e88)
- vk: DLSS comes back after a feature that was not made, and frame generation takes the multiplier its sets were made for (#2658) (1bf4284)
- vk: end the game with the GPU report when submitted work stops finishing (#2407) (ba6eef7)
- vk: FSR 3.1 draws the fixed Render resolution steps where the game's networks are left out (#2166) (ebb2172)
- vk: give back the import of a retired pool whose mirror was refused (#2795) (c2e9ed5)
- vk: graceful retired-pool eviction where retired imports were kept (Windows AMD and Intel) (#1906) (e8ab1e3)
- vk: Intel GPU device fault diagnostics, dynamic iGPU texture budget, hybrid CPU affinity (#2603) (a435efd)
- vk: Keep memory-writing draws while pipelines compile (#1573) (b75f2c1)
- vk: keep programs the driver faulted on out of the driver (#996) (#1823) (aab7daf)
- vk: keep the 97% texture squeeze past the driver's allowance (#2… (#2585) (4cf785a)
- vk: make the blocks at the start in the pool the textures are made in (#2690) (#2711) (1c0cd98)
- vk: make the compute pipelines of the mesh fallback programs already read in, before the title (#2880) (3c2d80c)
- vk: mesh fallback grass is left out while its shaders build, not drawn as holes (#2382) (3189a42)
- vk: prevent device loss when rendering to 3D BC slices (#2327) (d9a8f93), closes #996 #1001 #1338
- vk: RADV on GCN 1-4 skips the two mesh fallback programs its compiler never finishes (#2525) (45050d6)
- vk: RADV's mesh shaders off by default on Linux AMD (issue 2245) (#2362) (434cdd3)
- vk: read the registrations kept from before the renderer started from the host's copies (#1117) (#2289) (696d85b)
- vk: recover presentation after surface loss (#1995) (edcb8a1)
- vk: refresh pipeline states during Builder preparation (#1980) (ca082bf)
- vk: remake write-back shadows given back under VRAM pressure (#2767) (f1d0a67)
- vk: resolve DLSS permanent failure latching and improve dynamic resolution handling (#2574) (cd3d504)
- vk: RX_VK_FRAME_LOG writes its frame times in a headless run too (#2354) (60a4b84)
- vk: search the storage buffer tables in a loop on Intel (#2513) (bd37da7)
- vk: size the mesh index map in whole 32-primitive blocks (#2312) (f9286c4)
- vk: snapshot uniform buffers on Intel when the buffer pools have no VRAM mirror (#2464) (018a1d2)
- vk: stabilize shadow masks once after drawing (#2171) (b5d6793)
- vk: stop requiring vertex strides for mesh fallback draws (#2796) (9b6072c)
- vk: stop the VRAM compaction's hold from evicting textures in use (#2198) (3e95ca6)
- vk: storage buffers on 16-byte boundaries and bounds-checked texture decode stores (AMD, ported from Fritchii) (#2442) (6e11217)
- vk: task + mesh draws through the compute fallback on Navi 21 too (#996) (#1992) (1396428)
- vk: terrain tiles the GPU drew are written into guest memory (the ground garbling after minutes in one area) (#2545) (06a892f)
- vk: the first start of the game after a preparation builds the listed pipelines itself (#2865) (3723fd0)
- vk: the first start of the game after a preparation warms the pipeline cache itself (#2869) (8cf9a52)
- vk: the load default's safety net counts only what the loads found in no cache (#2884) (15d4ae8)
- vk: the Navi 21 task + mesh fallback also covers the RX 6900 XT XTXH and RX 6950 XT (#996) (#2215) (f95d80f)
- vk: the presenter thread is off by default again (#2544) (b520d51)
- vk: the tree-shadow mask blend off by default (a GPU hang / device lost near Hyrule Castle) (#2374) (7bba1a1)
- vk: tree-shadow flicker without the TAAU network: the shadow mask evened out over frames (rebase of #477) (#1581) (746fa11)
- vk: upload compressed textures placed over old render-target memory (#2452) (463eab1)
- vk: V-Sync Auto keeps its mode when DLSS Frame Gen's runtime makes fewer frames than the multiplier asks (#2701) (ee29dd5)
- vk: wait for the native scene when switching to DLAA (#2145) (f3dd448)
- vk: with per-queue fences, a CPU read-back waits for the GPU work that writes it again (#2125) (8d64fa1)
Performance Improvements
- a frame critical-path recorder (HOS_CHAIN), and an opt-in presenter thread that takes NVIDIA's present wait off the game's thread (#2325) (57ed3aa)
- build: a source whose size, time and id are unchanged is not read again to name its object (#2702) (ba005ca)
- build: auto-detect Steam Deck APU and tune instruction scheduling for znver2 (#2492) (a740d67)
- build: keep unchanged button-prompt assets in source builds (#2698) (4678050)
- build: updates skip the lift, a faster lift, and hot pieces that compile sooner and stay put (#2324) (30c2ebd)
- fpx: fuse single-precision FMA, FRECPS and FRSQRTS on x86-64-v3 (#2383) (8c52e7c)
- fsr4: AMD FSR 4's passes 8.97 -> 4.04 ms on RDNA 2, output bit for bit the same (#2798) (ea22513)
- host: fewer idle game threads poll through short sleeps and spins on 7+ thread CPUs (#2709) (376d068)
- host: on Linux the game's own short sleeps wait on the timer instead of yielding (#2637) (a1eb460)
- host: the game's short sleeps wait on the timer where the process has six logical processors or fewer (#2263) (4d488bc)
- host: the game's zstd stream decode on the host's libzstd (HOS_NATIVE_ZSTD, opt-in) (#2738) (a2766f9)
- lift: emit the lifted C in several processes on Windows too (#2748) (8c2a3c3)
- menu: a first start picks the Quality preset for the card's memory (Minimum up to 4.5 GB or integrated, Low up to 6.5 GB) (#2187) (e19d969)
- nup: write each extracted member in place and check each folder once (#2416) (b4f755d)
- pipelines: RX_VK_PCACHE_LOAD=0 skips the 2.5 GB pipeline cache file (~3 GB less RAM; opt-in) (#2206) (d7a7306)
- prepare: build fewer predicted pipelines, size the pools to the usable CPUs, and keep translated programs across cache-code changes (#2323) (2ed98c4)
- shaders: reuse each thread's translation pools (#2388) (07aa121)
- textures: a big texture whose storage is all zero is cleared on the GPU, not unswizzled on the CPU (#2175) (4d68bc8)
- video: extend lazy pool RGBA conversion to planar YUV420P and add x86_64 SSE2 NV12 interleave (#2114) (77225c5)
- vk: 6 background workers on machines with 16 or more hardware threads (#2440) (176eea7)
- vk: a command buffer too short to split skips the dry pass (#2781) (685133b)
- vk: a readback waits for the part that writes its range back, and no game thread waits behind a present for nothing (#2602) (76bbe4a)
- vk: add floats to storage buffers with the GPU's own atomic, not a compare-and-swap loop (#2306) (de81923)
- vk: age the texture spans once a present, not at every submission (#2420) (bebb0c6)
- vk: an import mostly outside every game pool is trimmed back to its live parts (#2825) (ab2d4cc)
- vk: ask the start's cache first for stage libraries in play (#1961) (845370c)
- vk: cap the system-heap budget for idle live imports on Linux (#2839) (11c0ab4)
- vk: capture buffers in size classes, kept up to 256 MB and made ahead on a worker (#2437) (7de4513)
- vk: compress the program cache with zstd (RX_VK_PROGRAM_CACHE_ZSTD) (#1630) (136452c)
- vk: drop another driver's pipeline cache by its header, before reading it (#2488) (9b7b88a)
- vk: drop the pipeline cache's files when another translator made them (#2684) (f5c9acc)
- vk: eliminate rec_timeline write-back stalls and capture deadlock (#2458) (128c32e)
- vk: GCN (RX 400/500): f16 lowered where the GPU has none; no VRAM mirrors or batched submits by default (from hookshot-k10) (#2343) (1f8c02f)
- vk: import game memory in 4 MB chunks, not 16, so VRAM mirrors fit the game's pools (#2685) (ec638a4)
- vk: keep big ASTC textures as BC7 (RX_VK_ASTC_BC7) (#2226) (6ce8ca3)
- vk: make part of the image pool's blocks at the start (#2438) (867ddd7)
- vk: persist pipeline caches without full-size heap copies (#2649) (fc5ab98)
- vk: reduce ASTC memory pressure on small VRAM budgets (#1009) (e460da1)
- vk: RX_VK_WB_MAX_KB writes large GPU-written bindings back only where the CPU reads or writes them (opt-in) (#2731) (8e6c15a)
- vk: texture_answer asks a flat table by slot, not a hash map (#2439) (6842f21)
- vk: the 90% rule and the driver's limit evict their excess, not an eighth of the texture cache (#2826) (ba3d3f7)
- vk: the texture shadow's copies read pages staged in cached RAM, not the write-combined capture buffer (#2314) (2350302)
- vk: with batched submits (RADV), send a batch at once while the GPU is idle (#1993) (#1999) (fab8cb3)
Build System
- document a faster development build and keep the lift when switching it (#2518) (692922d)
- linux: dav1d and the Vulkan back end's headers are pinned by what they unpack to (#2045) (#2087) (9a37fac)
- release: a contributed pipeline list from #2034, RTX 4060 laptop with frame generation and HDR, 6597 pipelines (#2082) (51d468f)
- release: a contributed pipeline list from scripted test routes, 921 pipelines (#2429) (4a53c89)
- release: a pipeline list converted from Fritchii's shader reci… (#2133) (b8fd5fd)
- release: adult areas and dungeons added to jarynclouatre-most-of-the-game, 1406 pipelines (#2064) (d335339)
- release: contributed pipeline lists from #2034 (3 lists) (#2445) (34f0578)
- release: the pipeline tour's list, 11227 pipelines (6238 no other list holds) (#2065) (a74f6a8)
- release: two contributed pipeline lists from #2034 (RTX 5090 ultrawide DLAA, RX 9070 XT) (#2075) (21fa136)
- release: two contributed pipeline lists from #2034 (RTX 5090, Kokiri Forest) (#2143) (29375d9)
Continuous Integration
- appimage: the object cache keeps the objects a build used (#2090) (eb689bc)
- cache the AppImage's back-end objects for pull requests, and a lighter deps cache (#2079) (37031ed)
- faster pull request checks (Linux tests in two parts with ccache, Windows object cache, no builds for docs-only changes) (#2124) (872cb68)
- release: one Promote at a time, drafts found by listing, and a published version always recorded (#2108) (bdfe09c)
- release: the nightly moves forward during merge bursts instead of waiting for main to be quiet (#2556) (09aac43)
- unpack LLVM beside the other dependencies, not before them (#2091) (ceb8745)
Documentation
- a pull request is tested in the game and carries its measurements (#2712) (8c16c2e)
- agents: team updates open with a one-line summary, then a labelled list (#2627) (7297d93)
- contributing: link the issues a pull request fixes (#2377) (b744b1e)
- readme: bring Project status up to date (#2762) (c2027ac)
- readme: NVIDIA DLSS on Linux, one entry for each way to build (#2056) (#2074) (23840a4)
- readme: the option table lists every row of the menu (#2105) (cf2e156)
- readme: what Hookshot connects to (#2650) (edaef2a)
- record RX 7900 XT Linux test runs (#2202) (8d7e473)
- tested configurations: RTX 4070, 615.71, Ubuntu 26.04 GNOME (v2.1.0-rc.3 nightly, #2314) (#2428) (51422e9)
- tested configurations: RTX 5090, 621.14, Windows 11 (v2.0.14) (#2037) (28a60b5)
- tested: RTX 3080 on Windows, main against the last nightly before #2602 (#2700) (5b96a55)
- where the CPU goes: a per-scene profile of the game and the script that rebuilds it (#2424) (e567c0f)
- worklist: the igvk64.dll crash reproduced on a UHD 770, re-scored 0.11 -> 0.28 (#2790) (1574a54)
- worklist: triage #bug-reporting forum (Nov 7–11) (#2657) (6126a2f)
Tests
- builder: the NUP cache checks no longer depend on the clone's work folder (#2291) (4b5266a)
- eight checks say which compiler or module they need (#2103) (c6bbdf2)
- fix main's three red checks (fixture fopen deprecation; DLSS toggle stub lacks switching; actionlint SC2012) (#2092) (e3b1964)
- hold the recorder at each ordering point in test_recorder_sync's thread scenarios (#2251) (49f75dc)
- linux: distinguish PPA operands from command options (#2652) (f82caa6)
- main's red checks after #1866 and #2041 (finish-block 'a'; vsync fixture getenv deprecation) (#2109) (7d24a73)
- main's source checks pass again after #2061 and #2046 (#2068) (96ad468)
- repair source fixtures after recent main merges (#2648) (9776c36)
- test_native_astc_texture_count builds on Windows, where the CRT marks scanf deprecated (#2397) (d207360)
- test_vcore_fs_open and test_vcore_video_acquire build again with env_on (#2380) (9796361)
- the HDR check takes DLSS's engine with fields after hdr (#2661) (1c6d1d9)
- the pipeline cache header and PsychoV35 fixtures build on Windows (#2562) (6ff87f5)
- the precompile compute guard check builds with llvm-mingw too (#2390) (e13fa88)
- the release scripts' stand-in gh is safe when two calls run at once (flaky JSONDecodeError) (#2130) (e0578ed)
- the updater digest check runs where only a later .NET SDK is installed (#2294) (653470f)
- the updater digest check takes no later-SDK fallback on GitHub's runners (#2543) (390ec66)
- the VRAM budget row's fixture builds with clang (llvm-mingw) (#2613) (b2201e5)
Miscellaneous Chores
Which file do I download?
| On | Download |
|---|---|
| Windows | HookshotBuilder.exe, the setup
|
| Linux, Steam Deck | Hookshot-v2.2.0-rc.1-x86_64.AppImage
|
You need your own copy of the game. hookshot-setup.txt, hookshot-linux.txt and the .zsync are for the updaters, and Hookshot-v2.2.0-rc.1-Windows-x64.zip (the setup and its recomplauncher.json) for RecompLauncher: on Windows, download HookshotBuilder.exe instead. To check a download: sha256sum -c --ignore-missing SHA256SUMS, or gh attestation verify <file> -R NotRexed/Hookshot.