Feature requests (collected) #1007

Open
opened 2026-11-09 05:39:32 +00:00 by NotRexed · 43 comments
NotRexed commented 2026-11-09 05:39:32 +00:00 (Migrated from github.com)

This issue lists the feature requests and ideas from separate issues in one place. Each was closed pointing here; the discussion, mockups and patches stay in the linked issue. Listing an idea here is not a promise that it will be made.

Already in a release: the Output resolution option (2048x1152, 2560x1440, 3840x2160) and full-size 3D at 4K came in v2.0.6 (PR #849, https://github.com/NotRexed/Hookshot/releases/tag/v2.0.6); the in-game overlay menu (F1/Insert) with a Graphics tab has been there since v2.0.3.

Graphics, resolution and upscaling

Issue Request Status / notes
#19 Feature request: DLSS request: DLSS; contributor hckrman101 says working on it
#156 [Feature Request] Replace vanilla sharpen filter and AA used request: Replace game's sharpening with RCAS, toggle SMAA/FSR1; maintainer: noted
#579 [Feature Request] Implement this render distance mod request: Built-in render distance / LOD / grass density options like a GameBanana mod
#621 Add Amiibo Support, HDR, resolution to 1K, 2K, 4K support request: HDR toggle, 1080p/1440p/4K output selection, amiibo
#633 Optional NPU-Accelerated Post-Processing (ONNX Runtime / DirectML) request: Optional NPU-accelerated post-processing (ONNX/DirectML); XMX upscaling
#641 HDR request: HDR on/off (#662 duplicate)
#672 Feature Suggestions: DLSS, amiibo and a Mod Manager request: DLSS SR/FG, amiibo via NFC, mod manager
#687 AMD FSR 4.1.2 (Native Vulkan Implementation) request (PR #577): FSR 4.1.2 native Vulkan; PR #577 up
#777 Render resolution setting in the Insert menu (1x / 2x / 3x scale) request: Render resolution 1x/1.5x/2x/3x via oot_wide.py scene/picture sizes at 16:9 (detailed proposal; same goal as #68)
#829 True Ultrawide HUD request: HUD anchored to screen edges at 21:9/32:9
#982 Add NVIDIA DLSS Frame Generation Support request: DLSS Frame Generation (#19, #672)

Settings, menus and installation

Issue Request Status / notes
#12 Feature Request: Ingame graphics settings. request: Graphics settings inside the game's own title menu (not the Insert overlay); v2.0.3 added a tabbed in-game overlay menu
#391 [Feature Request] Portable Game Builds, Relocatable Paths and Configurable Laun… request: Portable/relocatable game folder, configurable launcher (v2.0.0 launcher + v2.0.3 menu cover part)
#497 Portable version request: Portable mode: keep data in a chosen folder instead of AppData (C: is small)
#600 Serious Installer Issue Do not install 5+ GB to my appdata/local folder witho… partly addressed: Installer puts 5+ GB in AppData/Local without asking; v2.0.0 keeps only the installed version, v2.0.3 shows the space kept and can free it (#…
#783 Insert menu redesign: toggles, selectors, sections, detail panel, menu position… request: Insert menu redesign mockup and spec
#804 Upscaling and Anti-Aliasing Options and Controls Tab: Controller Layouts and Bu… request: Upscaler/AA options (DLSS/DLAA/FSR 3.1/4) and controller layout/binding profiles with mockups
#809 Screensaver Issue request: Screensaver turns on while playing (inhibit screensaver)
#974 [2.0.5] Add option for remove caches for diagnostics request: Option to clear all caches for diagnostics
#1013 Menu shortcut key request: Configurable key for the overlay menu (F1/Insert conflict with OptiScaler/DLSS mods)

Controllers and input

Issue Request Status / notes
#112 Support for gyro aiming? request (patch exists): Gyro aiming; spluton patch (gist), Link-22 port with yaw fix (/2pi) and motion_sens option tested on Linux
#473 [Feature Request] Steam Controller support on Linux partly done: Steam Controller on Linux: new puck needs SDL3 (v2.0.3 ships SDL3 on Linux, #328); works via Steam Input
#594 Include option to update button prompts request: Optional button-prompt pack (exgde/oot-switch2-button-prompts)
#671 [Feature Request] Option for Xbox-style button prompts (Quality of Life) request (partly done): Xbox-style button prompts; controller layout presets (v2.0.3) + a UI mod worked for reporter; gab9281 looking
#752 Controller dead zone adjuster request: Stick deadzone / anti-deadzone setting
#796 DualSense/PlayStation Button Mappings, DualSense Features request: PlayStation button prompts; DualSense mic for the ocarina (#189)
#832 Mouse sensitivity and RTSS request/bug: Mouse sensitivity limit to 10-15; RTSS overlay no longer shows on AMD since v2.0.3; map-transition delay (5 logs)
#868 Screenshot button/keybind request: Screenshot button (Pro Controller capture) saving to the data folder

Performance and shaders

Issue Request Status / notes
#334 Idea: shareable pipeline manifest (no game content) so the first start is smooth request: Shareable pipeline manifest to seed first-start precompile (v2.0.5 now predicts graphics pipelines)
#336 Idea: switch for the plain movie upscale on small GPUs (threshold on frame peri… request: Plain movie upscale switch for slow GPUs (threshold on frame period; RX_VK_NETWORK_KEEP=none)
#617 PreBuilt Shaders Do Nothing - Each unique hardware setup has to compile unique… discussion: "Prebuilt shaders do nothing": tillo88 explains pipeline cache UUID check and proposes sharing hookshot_pipelines.bin notes (same idea as #334)
#666 Adding culling to the game for improve the fps request: Frustum/occlusion culling, LOD

Audio

Issue Request Status / notes
#189 [Adding Feature] microphone input request: Microphone input for ocarina humming

Platforms and building

Issue Request Status / notes
#267 Improve dev building with scripts request: Dev setup scripts for building from the repo (kept open by maintainer as request)
#512 Pls add macOS support. request: macOS support (Apple Silicon)
#583 Pack romfs into single file request: Pack romfs into a single file (like totk-pc-recomp)
#699 RecompLauncher Support request: RecompLauncher support (cloud saves, auto updates)
#740 Save file editor request (contributor): Save file editor for automated testing (nicholasgower plans PR)

Repository

Issue Request Status / notes
#663 issue: add a label "testing" for test reports request: Add a "test report" label/issue form (YAML proposal)

New ideas: please comment here (one idea per comment, with a short reason) or open a new issue.

All tracking issues

  • #993 Garbled / rainbow textures that get worse over play time (VRAM over budget, mostly 4-8 GB cards)
  • #994 Floating trees, missing mountains and vanishing near vegetation
  • #995 Low FPS with low GPU usage (CPU-bound), FPS drops in Castle Town / Hyrule Field, shader stutter
  • #996 AMD on Windows: driver crash, device lost or freeze (RX 5000-9000, Deku Tree / after cutscenes)
  • #997 AMD handhelds and APUs (ROG Ally / Ally X, Legion Go, Radeon 780M/860M/890M): black screen, device lost, reboot
  • #998 Black screen with audio after the intro / at the Deku Tree cutscene
  • #999 Intel Arc and Core Ultra iGPUs: device lost, black screen after the intro, Linux ANV crashes
  • #1000 Linux and Steam Deck: GPU hangs, crashes, low FPS and build failures
  • #1001 GPUs without mesh shaders (GTX 9xx/10xx, RX 400/500/5000, Iris Xe/UHD): v2.0.6 fallback reports
  • #1002 Invisible or missing objects, walls and effects
  • #1003 Antivirus false positives on HookshotBuilder.exe (Defender Trojan:Script/Wacatac.H!ml)
  • #1004 Lighting: overexposure, over-bright bloom, crushed or black shadows, black faces
  • #1005 Flicker and flashing: brightness pulses, one-frame flashes, doubled image with frame pacing
  • #1006 AMD rendering: white silhouettes, block squares / grid lines, no anti-aliasing (networks in software)
  • #1007 Feature requests (collected)
This issue lists the feature requests and ideas from separate issues in one place. Each was closed pointing here; the discussion, mockups and patches stay in the linked issue. Listing an idea here is not a promise that it will be made. Already in a release: the Output resolution option (2048x1152, 2560x1440, 3840x2160) and full-size 3D at 4K came in v2.0.6 (PR #849, https://github.com/NotRexed/Hookshot/releases/tag/v2.0.6); the in-game overlay menu (F1/Insert) with a Graphics tab has been there since v2.0.3. ## Graphics, resolution and upscaling | Issue | Request | Status / notes | |---|---|---| | #19 | Feature request: DLSS | request: DLSS; contributor hckrman101 says working on it | | #156 | [Feature Request] Replace vanilla sharpen filter and AA used | request: Replace game's sharpening with RCAS, toggle SMAA/FSR1; maintainer: noted | | #579 | [Feature Request] Implement this render distance mod | request: Built-in render distance / LOD / grass density options like a GameBanana mod | | #621 | Add Amiibo Support, HDR, resolution to 1K, 2K, 4K support | request: HDR toggle, 1080p/1440p/4K output selection, amiibo | | #633 | Optional NPU-Accelerated Post-Processing (ONNX Runtime / DirectML) | request: Optional NPU-accelerated post-processing (ONNX/DirectML); XMX upscaling | | #641 | HDR | request: HDR on/off (#662 duplicate) | | #672 | Feature Suggestions: DLSS, amiibo and a Mod Manager | request: DLSS SR/FG, amiibo via NFC, mod manager | | #687 | AMD FSR 4.1.2 (Native Vulkan Implementation) | request (PR #577): FSR 4.1.2 native Vulkan; PR #577 up | | #777 | Render resolution setting in the Insert menu (1x / 2x / 3x scale) | request: Render resolution 1x/1.5x/2x/3x via oot_wide.py scene/picture sizes at 16:9 (detailed proposal; same goal as #68) | | #829 | True Ultrawide HUD | request: HUD anchored to screen edges at 21:9/32:9 | | #982 | Add NVIDIA DLSS Frame Generation Support | request: DLSS Frame Generation (#19, #672) | ## Settings, menus and installation | Issue | Request | Status / notes | |---|---|---| | #12 | Feature Request: Ingame graphics settings. | request: Graphics settings inside the game's own title menu (not the Insert overlay); v2.0.3 added a tabbed in-game overlay menu | | #391 | [Feature Request] Portable Game Builds, Relocatable Paths and Configurable Laun… | request: Portable/relocatable game folder, configurable launcher (v2.0.0 launcher + v2.0.3 menu cover part) | | #497 | Portable version | request: Portable mode: keep data in a chosen folder instead of AppData (C: is small) | | #600 | *Serious Installer Issue* Do not install 5+ GB to my appdata/local folder witho… | partly addressed: Installer puts 5+ GB in AppData/Local without asking; v2.0.0 keeps only the installed version, v2.0.3 shows the space kept and can free it (#… | | #783 | Insert menu redesign: toggles, selectors, sections, detail panel, menu position… | request: Insert menu redesign mockup and spec | | #804 | Upscaling and Anti-Aliasing Options and Controls Tab: Controller Layouts and Bu… | request: Upscaler/AA options (DLSS/DLAA/FSR 3.1/4) and controller layout/binding profiles with mockups | | #809 | Screensaver Issue | request: Screensaver turns on while playing (inhibit screensaver) | | #974 | [2.0.5] Add option for remove caches for diagnostics | request: Option to clear all caches for diagnostics | | #1013 | Menu shortcut key | request: Configurable key for the overlay menu (F1/Insert conflict with OptiScaler/DLSS mods) | ## Controllers and input | Issue | Request | Status / notes | |---|---|---| | #112 | Support for gyro aiming? | request (patch exists): Gyro aiming; spluton patch (gist), Link-22 port with yaw fix (/2pi) and motion_sens option tested on Linux | | #473 | [Feature Request] Steam Controller support on Linux | partly done: Steam Controller on Linux: new puck needs SDL3 (v2.0.3 ships SDL3 on Linux, #328); works via Steam Input | | #594 | Include option to update button prompts | request: Optional button-prompt pack (exgde/oot-switch2-button-prompts) | | #671 | [Feature Request] Option for Xbox-style button prompts (Quality of Life) | request (partly done): Xbox-style button prompts; controller layout presets (v2.0.3) + a UI mod worked for reporter; gab9281 looking | | #752 | Controller dead zone adjuster | request: Stick deadzone / anti-deadzone setting | | #796 | DualSense/PlayStation Button Mappings, DualSense Features | request: PlayStation button prompts; DualSense mic for the ocarina (#189) | | #832 | Mouse sensitivity and RTSS | request/bug: Mouse sensitivity limit to 10-15; RTSS overlay no longer shows on AMD since v2.0.3; map-transition delay (5 logs) | | #868 | Screenshot button/keybind | request: Screenshot button (Pro Controller capture) saving to the data folder | ## Performance and shaders | Issue | Request | Status / notes | |---|---|---| | #334 | Idea: shareable pipeline manifest (no game content) so the first start is smooth | request: Shareable pipeline manifest to seed first-start precompile (v2.0.5 now predicts graphics pipelines) | | #336 | Idea: switch for the plain movie upscale on small GPUs (threshold on frame peri… | request: Plain movie upscale switch for slow GPUs (threshold on frame period; RX_VK_NETWORK_KEEP=none) | | #617 | PreBuilt Shaders Do Nothing - Each unique hardware setup has to compile unique… | discussion: "Prebuilt shaders do nothing": tillo88 explains pipeline cache UUID check and proposes sharing hookshot_pipelines.bin notes (same idea as #334) | | #666 | Adding culling to the game for improve the fps | request: Frustum/occlusion culling, LOD | ## Audio | Issue | Request | Status / notes | |---|---|---| | #189 | [Adding Feature] microphone input | request: Microphone input for ocarina humming | ## Platforms and building | Issue | Request | Status / notes | |---|---|---| | #267 | Improve dev building with scripts | request: Dev setup scripts for building from the repo (kept open by maintainer as request) | | #512 | Pls add macOS support. | request: macOS support (Apple Silicon) | | #583 | Pack romfs into single file | request: Pack romfs into a single file (like totk-pc-recomp) | | #699 | RecompLauncher Support | request: RecompLauncher support (cloud saves, auto updates) | | #740 | Save file editor | request (contributor): Save file editor for automated testing (nicholasgower plans PR) | ## Repository | Issue | Request | Status / notes | |---|---|---| | #663 | issue: add a label "testing" for test reports | request: Add a "test report" label/issue form (YAML proposal) | New ideas: please comment here (one idea per comment, with a short reason) or open a new issue. ## All tracking issues - #993 Garbled / rainbow textures that get worse over play time (VRAM over budget, mostly 4-8 GB cards) - #994 Floating trees, missing mountains and vanishing near vegetation - #995 Low FPS with low GPU usage (CPU-bound), FPS drops in Castle Town / Hyrule Field, shader stutter - #996 AMD on Windows: driver crash, device lost or freeze (RX 5000-9000, Deku Tree / after cutscenes) - #997 AMD handhelds and APUs (ROG Ally / Ally X, Legion Go, Radeon 780M/860M/890M): black screen, device lost, reboot - #998 Black screen with audio after the intro / at the Deku Tree cutscene - #999 Intel Arc and Core Ultra iGPUs: device lost, black screen after the intro, Linux ANV crashes - #1000 Linux and Steam Deck: GPU hangs, crashes, low FPS and build failures - #1001 GPUs without mesh shaders (GTX 9xx/10xx, RX 400/500/5000, Iris Xe/UHD): v2.0.6 fallback reports - #1002 Invisible or missing objects, walls and effects - #1003 Antivirus false positives on HookshotBuilder.exe (Defender Trojan:Script/Wacatac.H!ml) - #1004 Lighting: overexposure, over-bright bloom, crushed or black shadows, black faces - #1005 Flicker and flashing: brightness pulses, one-frame flashes, doubled image with frame pacing - #1006 AMD rendering: white silhouettes, block squares / grid lines, no anti-aliasing (networks in software) - #1007 Feature requests (collected)
Heliumrich commented 2026-11-09 07:07:13 +00:00 (Migrated from github.com)

#579 has been implemented here : https://github.com/tangerineturtle1/NX2navi/pull/179

It should be even easier to implement here, with how you already manage patching stuff.
Claude should be be able to easily port it

I may open a PR later for it

#579 has been implemented here : https://github.com/tangerineturtle1/NX2navi/pull/179 It should be even easier to implement here, with how you already manage patching stuff. Claude should be be able to easily port it I may open a PR later for it
NotRexed commented 2026-11-09 09:18:36 +00:00 (Migrated from github.com)

New request linked here: #1027, support for the community multiplayer mod (Platforms and building / online).

New request linked here: #1027, support for the community multiplayer mod (Platforms and building / online).
NotRexed commented 2026-11-09 14:15:24 +00:00 (Migrated from github.com)

New request linked here: #1134, graphics options for V-Sync on/off, an FPS cap (30/60, for frame generation) and a 1920x1080 output resolution.

New request linked here: #1134, graphics options for V-Sync on/off, an FPS cap (30/60, for frame generation) and a 1920x1080 output resolution.
NotRexed commented 2026-11-09 14:45:42 +00:00 (Migrated from github.com)

New request linked here: #1147, more diagnostic logging (system call tracing, memory pool logging) for performance and texture hunting.

New request linked here: #1147, more diagnostic logging (system call tracing, memory pool logging) for performance and texture hunting.
NotRexed commented 2026-11-09 15:47:53 +00:00 (Migrated from github.com)

New requests linked here: #1162 (longer black screen entering Castle Town the first time, AA/jaggies, short grass draw distance in cutscenes), #1159 and #1160 (gyro, same as #112).

New requests linked here: #1162 (longer black screen entering Castle Town the first time, AA/jaggies, short grass draw distance in cutscenes), #1159 and #1160 (gyro, same as #112).
NotRexed commented 2026-11-09 16:16:14 +00:00 (Migrated from github.com)

Duplicates linked here: #1164 (FPS cap, same as #1134), #1166 (turn off the game's sharpening / AA, same as #156), #1163 (choose the install location, same as #600).

Duplicates linked here: #1164 (FPS cap, same as #1134), #1166 (turn off the game's sharpening / AA, same as #156), #1163 (choose the install location, same as #600).
NotRexed commented 2026-11-09 17:17:30 +00:00 (Migrated from github.com)

New requests linked here: #1203 (a Quit option in the menu, for SteamOS/Bazzite Game Mode) and XeFG frame generation (from #1194).

New requests linked here: #1203 (a Quit option in the menu, for SteamOS/Bazzite Game Mode) and XeFG frame generation (from #1194).
GerardUmbert commented 2026-11-09 18:44:35 +00:00 (Migrated from github.com)

Google Stadia controller support (maybe even bake in the remapping of the UI HUD elements?)

Google Stadia controller support (maybe even bake in the remapping of the UI HUD elements?)
NotRexed commented 2026-11-09 18:47:16 +00:00 (Migrated from github.com)

New requests linked here: #1231 (low latency / frame smoothness settings), #1230 (microphone, same as #189 / PR #937); and from #671, Stadia controller support.

New requests linked here: #1231 (low latency / frame smoothness settings), #1230 (microphone, same as #189 / PR #937); and from #671, Stadia controller support.
NotRexed commented 2026-11-09 20:18:20 +00:00 (Migrated from github.com)

New request linked here: #1268, launcher: start the game automatically when there's no update, a setting or command-line switch to skip it, or A on a controller to press Play.

New request linked here: #1268, launcher: start the game automatically when there's no update, a setting or command-line switch to skip it, or A on a controller to press Play.
NotRexed commented 2026-11-09 21:20:53 +00:00 (Migrated from github.com)

New request linked here: #1299, 1280x720 in the Output resolution list.

New request linked here: #1299, 1280x720 in the Output resolution list.
NotRexed commented 2026-11-09 21:21:11 +00:00 (Migrated from github.com)

New request linked here: #1287, keep the build files by default (or a checkbox) so updates only recompile what changed (HOOKSHOT_KEEP_BUILD_FILES=1 exists but is hard to find; one update compiled 600 files in over an hour).

New request linked here: #1287, keep the build files by default (or a checkbox) so updates only recompile what changed (HOOKSHOT_KEEP_BUILD_FILES=1 exists but is hard to find; one update compiled 600 files in over an hour).
NotRexed commented 2026-11-09 21:47:04 +00:00 (Migrated from github.com)

New request linked here: #1303 (option to turn off menu navigation and dialogue confirmation sounds); #1322 is another vote for Xbox/PlayStation prompts (#671).

New request linked here: #1303 (option to turn off menu navigation and dialogue confirmation sounds); #1322 is another vote for Xbox/PlayStation prompts (#671).
NotRexed commented 2026-11-09 22:46:46 +00:00 (Migrated from github.com)

New requests linked here: #1348 (mouse aiming for ranged items, as in Lichii) and #1346 (a 16:10 aspect option for laptops).

New requests linked here: #1348 (mouse aiming for ranged items, as in Lichii) and #1346 (a 16:10 aspect option for laptops).
NotRexed commented 2026-11-10 00:46:16 +00:00 (Migrated from github.com)

New requests linked here: #1402 (put performance switches such as RX_VK_BATCH=0, RX_VK_MOVIE_UPSCALE=linear and RX_VK_IMPORT_CHUNK_MB=1 in the settings menu; reported to help an RX 9070 XT on SteamOS) and #1399 (mod support).

New requests linked here: #1402 (put performance switches such as RX_VK_BATCH=0, RX_VK_MOVIE_UPSCALE=linear and RX_VK_IMPORT_CHUNK_MB=1 in the settings menu; reported to help an RX 9070 XT on SteamOS) and #1399 (mod support).
NotRexed commented 2026-11-10 03:06:04 +00:00 (Migrated from github.com)

In the v2.0.12 branch, closing these requests at release: AMD FSR 3.1 upscaling and FSR 3.1 2x frame interpolation (#1386, the FSR requests from #687 / #804), and Discord status (Rich Presence).

In the v2.0.12 branch, closing these requests at release: AMD FSR 3.1 upscaling and FSR 3.1 2x frame interpolation (#1386, the FSR requests from #687 / #804), and Discord status (Rich Presence).
NotRexed commented 2026-11-10 06:16:09 +00:00 (Migrated from github.com)

+2 on the row "HUD anchored to screen edges at 21:9/32:9" (#829): two players asked again on Discord on 2026-11-10 for the hearts, item slot and minimap to reach the edges with Ultrawide set to Monitor's shape (today they stay in the middle 16:9).

+2 on the row "HUD anchored to screen edges at 21:9/32:9" (#829): two players asked again on Discord on 2026-11-10 for the hearts, item slot and minimap to reach the edges with Ultrawide set to Monitor's shape (today they stay in the middle 16:9).
NotRexed commented 2026-11-10 10:47:15 +00:00 (Migrated from github.com)

Added from closed issues: #1599 (a quality preset for 10 GB cards) and #1594 (separate named player profiles on a shared PC).

Added from closed issues: #1599 (a quality preset for 10 GB cards) and #1594 (separate named player profiles on a shared PC).
NotRexed commented 2026-11-10 13:06:41 +00:00 (Migrated from github.com)

New request linked here: #1668, a controller button combination (for example L3 + R3) to open the Insert menu, for handheld and streaming play.

New request linked here: #1668, a controller button combination (for example L3 + R3) to open the Insert menu, for handheld and streaming play.
NotRexed commented 2026-11-10 13:48:49 +00:00 (Migrated from github.com)

New requests linked here: #1686 (a 7680x2160, 32:9 4K Output resolution).

New requests linked here: #1686 (a 7680x2160, 32:9 4K Output resolution).
NotRexed commented 2026-11-10 14:17:04 +00:00 (Migrated from github.com)

New requests linked here: #1701 (launcher gamepad support; command-line switches such as --play and --fullscreen for Playnite / LaunchBox).

New requests linked here: #1701 (launcher gamepad support; command-line switches such as --play and --fullscreen for Playnite / LaunchBox).
NotRexed commented 2026-11-10 15:16:17 +00:00 (Migrated from github.com)

New request linked here: #1736 (a settings page in the launcher).

New request linked here: #1736 (a settings page in the launcher).
NotRexed commented 2026-11-10 16:46:29 +00:00 (Migrated from github.com)

New requests linked here: #1784 (the Builder as a single .zip with its tools), #1783 (FSR 4.1 through OptiScaler; FSR 4 itself is PR #1008), #1782 (separate buttons for roll and sprint), #1771 (DLSS Frame Generation, same as #982).

New requests linked here: #1784 (the Builder as a single .zip with its tools), #1783 (FSR 4.1 through OptiScaler; FSR 4 itself is PR #1008), #1782 (separate buttons for roll and sprint), #1771 (DLSS Frame Generation, same as #982).
NotRexed commented 2026-11-10 18:18:21 +00:00 (Migrated from github.com)

New request (Discord): a render-scale choice for DLSS in the menu. Setting resolution=1 in hookshot_options.ini gives DLSS at 100% (DLAA-like); the player would like that as a menu option.

New request (Discord): a render-scale choice for DLSS in the menu. Setting `resolution=1` in hookshot_options.ini gives DLSS at 100% (DLAA-like); the player would like that as a menu option.
NotRexed commented 2026-11-10 18:19:16 +00:00 (Migrated from github.com)

New requests linked here: #1844 (a game volume slider), #1843 (support for another game file container format).

New requests linked here: #1844 (a game volume slider), #1843 (support for another game file container format).
NotRexed commented 2026-11-10 21:46:24 +00:00 (Migrated from github.com)

New request linked here: #1949 (stick dead zone below 5%, and radial instead of per-axis).

New request linked here: #1949 (stick dead zone below 5%, and radial instead of per-axis).
NotRexed commented 2026-11-10 23:10:02 +00:00 (Migrated from github.com)

New requests linked here: #1964 (hide the mouse cursor while using a controller), #1989 (gyro from DSU servers such as SC2DSU / SteamDeckGyroDSU), #1994 (built-in modifiers: damage, movement speed), #1981 (in-game button remapping).

New requests linked here: #1964 (hide the mouse cursor while using a controller), #1989 (gyro from DSU servers such as SC2DSU / SteamDeckGyroDSU), #1994 (built-in modifiers: damage, movement speed), #1981 (in-game button remapping).
NotRexed commented 2026-11-11 00:17:03 +00:00 (Migrated from github.com)

New requests linked here: #2016 (anisotropic filtering up to 16x), #2021 (a rupee amount option in the Debug tab).

New requests linked here: #2016 (anisotropic filtering up to 16x), #2021 (a rupee amount option in the Debug tab).
NotRexed commented 2026-11-11 01:16:24 +00:00 (Migrated from github.com)

New requests linked here: #2028 (keyboard button prompts), #2039 (48:9 for triple-monitor setups).

New requests linked here: #2028 (keyboard button prompts), #2039 (48:9 for triple-monitor setups).
BiasedMonkey commented 2026-11-11 12:52:37 +00:00 (Migrated from github.com)

About #1736 and #1856 (settings in the launcher): I have a working prototype on Linux and would like to know whether, and in what form, you would take a PR for it.

It is a separate window (PySide6, French for now) that drives the installed Linux builder. It does this:

  • Settings tab. Every row of the in-game menu (graphics, game, controls, motion), read from hookshot_options.ini and written back as soon as a row changes, with a one-line explanation on hover. The quality preset works like the menu's: choosing a preset sets its rows, and changing a row switches it to Custom. Rows that need a restart are marked. The tab is greyed out while the game runs and reloads when it exits, since the in-game menu may have changed the file.
  • Display profiles. Named sets of display rows (output size, 3D resolution, frame generation, sharpness…) applied when you press Play: one for the laptop screen, one for a 1080p projector.
  • What's new. The release notes of every release since the installed one, so you see what an update brings before you start it.
  • Update and rebuild in the window, with the build's stages and a progress bar (through linux_update and AppRun --cli --update), a log tab and a Stop button. The installed game stays playable if it fails or is stopped.
  • Clean up. Lists old builder versions and old AppImages with their sizes and deletes the ones you tick.
  • Colour themes (four dark, one light).

Screenshots below.

Two questions before I write any code for the repository:

  1. Would you take the settings page as a PR to the Linux builder's launch screen, ported to tkinter (standard library only, in English) rather than adding Qt? Or would you rather have it in both builders, or not at all because the Insert/F1 menu covers it?
  2. Is any of the rest (what's new, clean up, themes) worth its own PR?
About #1736 and #1856 (settings in the launcher): I have a working prototype on Linux and would like to know whether, and in what form, you would take a PR for it. It is a separate window (PySide6, French for now) that drives the installed Linux builder. It does this: - **Settings tab.** Every row of the in-game menu (graphics, game, controls, motion), read from `hookshot_options.ini` and written back as soon as a row changes, with a one-line explanation on hover. The quality preset works like the menu's: choosing a preset sets its rows, and changing a row switches it to Custom. Rows that need a restart are marked. The tab is greyed out while the game runs and reloads when it exits, since the in-game menu may have changed the file. - **Display profiles.** Named sets of display rows (output size, 3D resolution, frame generation, sharpness…) applied when you press Play: one for the laptop screen, one for a 1080p projector. - **What's new.** The release notes of every release since the installed one, so you see what an update brings before you start it. - **Update and rebuild in the window**, with the build's stages and a progress bar (through `linux_update` and `AppRun --cli --update`), a log tab and a Stop button. The installed game stays playable if it fails or is stopped. - **Clean up.** Lists old builder versions and old AppImages with their sizes and deletes the ones you tick. - **Colour themes** (four dark, one light). Screenshots below. Two questions before I write any code for the repository: 1. Would you take the settings page as a PR to the Linux builder's launch screen, ported to tkinter (standard library only, in English) rather than adding Qt? Or would you rather have it in both builders, or not at all because the Insert/F1 menu covers it? 2. Is any of the rest (what's new, clean up, themes) worth its own PR?
NotRexed commented 2026-11-11 21:22:02 +00:00 (Migrated from github.com)

More reports of this, collected here:

  • #1487: Dlss and reno hdr
  • #1566: Add more languages (pull request #1864, #2417)
  • #1828: Idea: FSR 4 on GPUs AMD doesn't list (NVIDIA, Intel), as an opt-in test switch
  • #2157: Simplified Chinese for the in-game menu?
  • #2163: Feature for inverting camera while aiming
  • #2167: Photo Mode
  • #2183: Filters / Effects (pull request #1488)
  • #2194: Graphics Preview On Built-in Settings Menu
  • #2196: nx support
  • #2204: FSR AA... VSYNC...XEFG...OPTISCALER
  • #2205: Two Keybindings to the same Action (pull request #1990)
  • #2208: .nx file support
  • #2230: Snapdragon X / Adreno X1-45: renderer startup fails because VK_EXT_external_memory_host is unavailable (v2.0.14; Qualcomm Adreno X1-45 GPU Vulkan API 1.3.295; Snapdragon X X1-26-100 16 GB RAM Windows 11 ARM64)
  • #2231: Feature Request: Individual In-Game Action Remapping
  • #2249: ARM64 builds
  • #2258: How do I make Hookshot portable? (pull request #2367)
  • #2269: Co-op: friends share progress across their own games (proposal and claim, before any pull request) (pull request #2274)
  • #2277: L3 to sprint (without rolling)
  • #2280: Audio Restoration - Original N64 Sword Hit Sound
  • #2287: Add Reinstall button in hookshot exe
  • #2295: Ray Tracing and DLSS5 built in?
  • #2299: Feature request: add 30 FPS to the Game frame rate cap
  • #2303: Would a selectable menu display language (e.g. Simplified Chinese) be welcome?
  • #2385: off button for upscalling and dlss
  • #2392: Windows ARM64 / NVIDIA RTX Spark N1X: Gameplay at 3–4 FPS — Vulkan dispatch barriers and 250 ms memory sync st (v2.1.0 (source 633eb435); NVIDIA RTX Spark N1X (6144-core Blackwell RTX GPU). NVIDIA Vulkan 1.4 ; CPU/platform: NVIDIA N1X ARM64 RAM: 128 GB unified memory OS: Window)
  • #2393: Native VRR support (G-sync and freesync)
  • #2418: Play the game as sequence-break link
  • #2450: [Feature request] Support for 7680x2160 32:9 ultrawide
More reports of this, collected here: - #1487: Dlss and reno hdr - #1566: Add more languages (pull request #1864, #2417) - #1828: Idea: FSR 4 on GPUs AMD doesn't list (NVIDIA, Intel), as an opt-in test switch - #2157: Simplified Chinese for the in-game menu? - #2163: Feature for inverting camera while aiming - #2167: Photo Mode - #2183: Filters / Effects (pull request #1488) - #2194: Graphics Preview On Built-in Settings Menu - #2196: nx support - #2204: FSR AA... VSYNC...XEFG...OPTISCALER - #2205: Two Keybindings to the same Action (pull request #1990) - #2208: .nx file support - #2230: Snapdragon X / Adreno X1-45: renderer startup fails because VK_EXT_external_memory_host is unavailable (v2.0.14; Qualcomm Adreno X1-45 GPU Vulkan API 1.3.295; Snapdragon X X1-26-100 16 GB RAM Windows 11 ARM64) - #2231: Feature Request: Individual In-Game Action Remapping - #2249: ARM64 builds - #2258: How do I make Hookshot portable? (pull request #2367) - #2269: Co-op: friends share progress across their own games (proposal and claim, before any pull request) (pull request #2274) - #2277: L3 to sprint (without rolling) - #2280: Audio Restoration - Original N64 Sword Hit Sound - #2287: Add Reinstall button in hookshot exe - #2295: Ray Tracing and DLSS5 built in? - #2299: Feature request: add 30 FPS to the Game frame rate cap - #2303: Would a selectable menu display language (e.g. Simplified Chinese) be welcome? - #2385: off button for upscalling and dlss - #2392: Windows ARM64 / NVIDIA RTX Spark N1X: Gameplay at 3–4 FPS — Vulkan dispatch barriers and 250 ms memory sync st (v2.1.0 (source 633eb435); NVIDIA RTX Spark N1X (6144-core Blackwell RTX GPU). NVIDIA Vulkan 1.4 ; CPU/platform: NVIDIA N1X ARM64 RAM: 128 GB unified memory OS: Window) - #2393: Native VRR support (G-sync and freesync) - #2418: Play the game as sequence-break link - #2450: [Feature request] Support for 7680x2160 32:9 ultrawide
Arkex-ai commented 2026-11-11 22:09:36 +00:00 (Migrated from github.com)

I'm checking feasibility of #583: an optional indexed RomFS image, with a copy-only packer and read-only file/directory access. The folder backend, mod precedence and writable save/cache mounts would stay available; loading-speed benefits need measurement.

Is anyone already working on this, or is there a preferred input/format? TotK Recomp uses an extracted image plus an index, while Hookshot's NUP extraction and damaged-file replacement need their own compatibility check. I'm auditing those boundaries before choosing an implementation, including the active mods/path-hardening work.

I'm checking feasibility of #583: an optional indexed RomFS image, with a copy-only packer and read-only file/directory access. The folder backend, mod precedence and writable save/cache mounts would stay available; loading-speed benefits need measurement. Is anyone already working on this, or is there a preferred input/format? TotK Recomp uses an extracted image plus an index, while Hookshot's NUP extraction and damaged-file replacement need their own compatibility check. I'm auditing those boundaries before choosing an implementation, including the active mods/path-hardening work.
HitaruLore commented 2026-11-11 23:14:37 +00:00 (Migrated from github.com)

Please add M/KB UI. All the others have it one way or another.

Please add M/KB UI. All the others have it one way or another.
Arkex-ai commented 2026-11-12 01:06:02 +00:00 (Migrated from github.com)

#2600 adds the optional indexed RomFS backend for #583. The packer copies from the extracted folder; build/update still need that folder, and saves remain separate.

Windows folder/image-only gameplay and complete asset-byte/directory parity passed; generated Xbox prompts and native menu fonts also worked with no loose RomFS root. Focused Windows/Linux checks pass; hosted CI is running. No loading-speed or memory-saving claim yet. The PR records the test scope and inherited full-suite failures.

#2600 adds the optional indexed RomFS backend for #583. The packer copies from the extracted folder; build/update still need that folder, and saves remain separate. Windows folder/image-only gameplay and complete asset-byte/directory parity passed; generated Xbox prompts and native menu fonts also worked with no loose RomFS root. Focused Windows/Linux checks pass; hosted CI is running. No loading-speed or memory-saving claim yet. The PR records the test scope and inherited full-suite failures.
NotRexed commented 2026-11-12 03:07:19 +00:00 (Migrated from github.com)

More reports of this, collected here:

  • #2560: Boot Straight Into Game
  • #2570: 30 FPS Option
  • #2584: Debug Tools addition
  • #2605: Inverted Flashbang
  • #2619: Allow mod merge during new build creation or build update
  • #2620: Debug Tools: New Options
More reports of this, collected here: - #2560: Boot Straight Into Game - #2570: 30 FPS Option - #2584: Debug Tools addition - #2605: Inverted Flashbang - #2619: Allow mod merge during new build creation or build update - #2620: Debug Tools: New Options
bishal-buildpath commented 2026-11-12 03:19:29 +00:00 (Migrated from github.com)

Check this repo: https://github.com/sdli1995/dlssg_for_sm86

This enables [Nvidia DLSS Framegen for 30 series cards]

Check this repo: https://github.com/sdli1995/dlssg_for_sm86 This enables [Nvidia DLSS Framegen for 30 series cards]
bishal-buildpath commented 2026-11-12 03:55:27 +00:00 (Migrated from github.com)
https://www.cheatslips.com/game/the-legend-of-zelda-ocarina-of-time/6251
bishal-buildpath commented 2026-11-12 03:56:21 +00:00 (Migrated from github.com)
https://gamebanana.com/games/26242 https://github.com/daurosk/oot-remake-multiplayer https://github.com/craftycorvid/oot-mod
Owner

@ovitus commented on GitHub · 2026-11-12 04:42 UTC · original

Please also add XeSS 3. It can be used on all cards and I find it preferable over FSR 4 on my 7900 XT (less ghosting in games like BeamNG.drive).

> [@ovitus](https://github.com/ovitus) commented on GitHub · 2026-11-12 04:42 UTC · [original](https://github.com/NotRexed/Hookshot/issues/1007#issuecomment-6814749787) Please also add XeSS 3. It can be used on all cards and I find it preferable over FSR 4 on my 7900 XT (less ghosting in games like BeamNG.drive). <!-- github-sync:c:6814749787 -->
Owner

@ScarletEbinger commented on GitHub · 2026-11-12 08:20 UTC · original

support for arm64 android devices??
would be amazing to have a portable way to play on a phone or tablet (for now with controller support only, maybe touch controls for future, i personally don't care, just controllers)

> [@ScarletEbinger](https://github.com/ScarletEbinger) commented on GitHub · 2026-11-12 08:20 UTC · [original](https://github.com/NotRexed/Hookshot/issues/1007#issuecomment-6818511714) support for arm64 android devices?? would be amazing to have a portable way to play on a phone or tablet (for now with controller support only, maybe touch controls for future, i personally don't care, just controllers) <!-- github-sync:c:6818511714 -->
Owner

@mooki000 commented on GitHub · 2026-11-12 15:18 UTC · original

Tracker upkeep note (merged pull requests and code checked against main 51da0464; no new test run was made for it).

Several collected requests are implemented on main 51da0464: controller prompts (#1321), Keyboard prompts (#2435), the configurable menu shortcut (#1609), Windows controller-idle display protection (#1538), and keeping compiled objects across player updates (#1484). The collection should remain open: Capture-button screenshots (#868), finer deadzone choices (#1949) and runtime-cache reset controls (#974) are not implemented yet. The radial-direction change already has #1600, and launcher settings/profiles, packed ROMFS and co-op have named owners or open pull requests. Updating the completed rows would make the list clearer without closing the collection or starting duplicate work. This is a source/history review, not a new runtime test.

> [@mooki000](https://github.com/mooki000) commented on GitHub · 2026-11-12 15:18 UTC · [original](https://github.com/NotRexed/Hookshot/issues/1007#issuecomment-6827624692) **Tracker upkeep note** (merged pull requests and code checked against main `51da0464`; no new test run was made for it). Several collected requests are implemented on main `51da0464`: controller prompts (#1321), Keyboard prompts (#2435), the configurable menu shortcut (#1609), Windows controller-idle display protection (#1538), and keeping compiled objects across player updates (#1484). The collection should remain open: Capture-button screenshots (#868), finer deadzone choices (#1949) and runtime-cache reset controls (#974) are not implemented yet. The radial-direction change already has #1600, and launcher settings/profiles, packed ROMFS and co-op have named owners or open pull requests. Updating the completed rows would make the list clearer without closing the collection or starting duplicate work. This is a source/history review, not a new runtime test. <!-- github-sync:c:6827624692 -->
Owner

@FabianZettl commented on GitHub · 2026-11-12 15:31 UTC · original

ARM64 Linux (AYN Thor, Snapdragon 8 Gen 2, ArmadaOS): native build boots, renders the title screen, work in progress

Hardware: AYN Thor, Snapdragon 8 Gen 2, Adreno 740, 11 GB RAM, ArmadaOS (Fedora-based, aarch64, kernel 7.2), Mesa 26.2.6 Turnip, built inside a Fedora 43 distrobox (clang 21).
Version: v2.1.0 (tag), game 2.0 dump.

What I did: ran the normal pipeline on the device (nx2/nup.py, lift.py --standalone --write, build.py --standalone) with RX_MARCH=armv8.4-a. The lifter and the 75 lifted C chunks (17.6 M instructions) compile natively on aarch64 (about 55 min on 8 cores). The runtime needed these changes to build:

  • build.py: -mcx16 is x86-only, skip it on armv*.
  • host/posix/win32_posix.c: context_from/context_to read x86 gregs; aarch64 branch (pc/sp, write flag from the ESR in the signal frame).
  • host/hos_setjmp.c: aarch64 recomp_sj_setjmp/longjmp (x19-x30, sp, d8-d15, fpcr).
  • host/hos_thread.c, host/posix/windows.h: _mm_pause / __builtin_ia32_pause -> yield.
  • host/posix/prof.c: uc_mcontext.pc.

Renderer: Turnip has no VK_EXT_external_memory_host (the msm kernel driver has no userptr) and this kernel has no CONFIG_UDMABUF, so memory_init stopped with "the guest memory cannot be imported". As an experiment I added an export path in gpu/vk/vk_memory.cpp: each pool piece is allocated as exportable device memory, the guest bytes are copied in, and the dma-buf is mapped over the guest window with MAP_FIXED. The rest of the renderer is unchanged.

Result so far: the game boots to the title screen at 54-60 fps (1280x720, minimum preset), the controller works, saves from the PC load. In-game scenes are not usable yet: shaders compile on demand, hundreds of draws per frame are "left out (not ready)", and the game fills the 11 GB RAM. I have not verified correctness of the export path (a CPU write during a piece's copy could be lost; I have not checked the CPU cache attributes of the mapping).

The patch is source-only and small (about 250 lines). I will push it to a fork branch if there is interest.

Prior art on the same GPU class: BananaNative (Android, Adreno, nxnative based) lists OoT 2.0 as experimental.

> [@FabianZettl](https://github.com/FabianZettl) commented on GitHub · 2026-11-12 15:31 UTC · [original](https://github.com/NotRexed/Hookshot/issues/1007#issuecomment-6827950635) **ARM64 Linux (AYN Thor, Snapdragon 8 Gen 2, ArmadaOS): native build boots, renders the title screen, work in progress** Hardware: AYN Thor, Snapdragon 8 Gen 2, Adreno 740, 11 GB RAM, ArmadaOS (Fedora-based, aarch64, kernel 7.2), Mesa 26.2.6 Turnip, built inside a Fedora 43 distrobox (clang 21). Version: v2.1.0 (tag), game 2.0 dump. What I did: ran the normal pipeline on the device (`nx2/nup.py`, `lift.py --standalone --write`, `build.py --standalone`) with `RX_MARCH=armv8.4-a`. The lifter and the 75 lifted C chunks (17.6 M instructions) compile natively on aarch64 (about 55 min on 8 cores). The runtime needed these changes to build: - `build.py`: `-mcx16` is x86-only, skip it on `armv*`. - `host/posix/win32_posix.c`: `context_from/context_to` read x86 `gregs`; aarch64 branch (pc/sp, write flag from the ESR in the signal frame). - `host/hos_setjmp.c`: aarch64 `recomp_sj_setjmp/longjmp` (x19-x30, sp, d8-d15, fpcr). - `host/hos_thread.c`, `host/posix/windows.h`: `_mm_pause` / `__builtin_ia32_pause` -> `yield`. - `host/posix/prof.c`: `uc_mcontext.pc`. Renderer: Turnip has no `VK_EXT_external_memory_host` (the msm kernel driver has no userptr) and this kernel has no `CONFIG_UDMABUF`, so `memory_init` stopped with "the guest memory cannot be imported". As an experiment I added an export path in `gpu/vk/vk_memory.cpp`: each pool piece is allocated as exportable device memory, the guest bytes are copied in, and the dma-buf is mapped over the guest window with `MAP_FIXED`. The rest of the renderer is unchanged. Result so far: the game boots to the title screen at 54-60 fps (1280x720, minimum preset), the controller works, saves from the PC load. In-game scenes are not usable yet: shaders compile on demand, hundreds of draws per frame are "left out (not ready)", and the game fills the 11 GB RAM. I have not verified correctness of the export path (a CPU write during a piece's copy could be lost; I have not checked the CPU cache attributes of the mapping). The patch is source-only and small (about 250 lines). I will push it to a fork branch if there is interest. Prior art on the same GPU class: BananaNative (Android, Adreno, nxnative based) lists OoT 2.0 as experimental. <!-- github-sync:c:6827950635 -->
Owner

@TobiasZero commented on GitHub · 2026-11-12 18:57 UTC · original

Windows on ARM follow-up to #2230: Snapdragon X / Adreno X1-85 (Windows on ARM): Vulkan back end cannot start, and with workarounds the GPU hangs entering Kokiri Forest

Adding details here as asked in #2230 (same platform: Snapdragon X, Windows, no VK_EXT_external_memory_host).

System

Device Microsoft Surface Pro 11, Snapdragon X Elite, 16 GB unified memory
OS Windows 11 Pro 10.0.28000, ARM64
GPU Qualcomm Adreno X1-85, driver 31.0.152.1 (23 May 2026), Vulkan 1.3, driver id 0x8035f000
Hookshot v2.1.0 (source 633eb435), OoT (Switch 2 edition)

vulkaninfo output of the device is in the gist linked at the end.

Summary

  1. The stock build cannot draw on this GPU at all. The Vulkan back end needs VK_EXT_external_memory_host, which the Adreno driver does not have, so it logs no VK_EXT_external_memory_host: the guest memory cannot be imported (needed for now) and gives up.
  2. To get further, I patched the back end locally (a native ARM64 build plus host-memory "stand-in" buffers, details below). With those patches the game boots, plays its movies, reaches the title screen and starts a new game at 60 fps.
  3. Then the GPU hangs reproducibly a few seconds into the intro cutscene, in the first gameplay scene (Navi flying into Kokiri Forest, about 12,000 presents after New Game): VK_ERROR_DEVICE_LOST, Windows LiveKernelEvent 141.
    • It still hangs with TdrDelay raised to 10 s, so this is a real hang, not a slow frame.
    • It also happens at the same point with the WebGPU renderer on Direct3D 12, which shares none of my patches.

Several of the problems below look like general issues for GPUs other than NVIDIA/AMD/Intel desktop parts. I hope they help with Adreno (and possibly other mobile-class) support.

Problems found in the Vulkan back end

1. make_profile() claims features the Adreno does not have, so the driver refuses compute pipelines

gpu/vk/vk_shader.cpp make_profile() hard-codes:

p.support_uniform_and_storage_buffer_8bit = p.support_storage_buffer_8bit = true;
p.support_uniform_and_storage_buffer_16bit = p.support_storage_buffer_16bit = true;
p.support_fp32_denorm_preserve = p.support_fp32_denorm_flush = true;
h.support_float64 = true;

The Adreno X1-85 has uniformAndStorageBuffer8BitAccess = false, uniformAndStorageBuffer16BitAccess = false, shaderDenormPreserveFloat32 = false and shaderFloat64 = false (storageBuffer8/16BitAccess are true).

The driver then fails vkCreateComputePipelines with VK_ERROR_UNKNOWN (-13) for many programs, including the foliage culling 53caac5f38279735. In a standalone probe, 40 of 40 refused modules compiled once these four flags were taken from vkGetPhysicalDeviceFeatures2 / VkPhysicalDeviceVulkan12Properties.

Suggestion: derive these from the device's features instead of true.

2. Mesh fallback: workgroup counts are not limited to maxComputeWorkGroupCount

Without mesh shaders, the compute fallback dispatches the game's indirect mesh-task counts as they are (mesh_indirect_convert → vkCmdDispatchIndirect(mesh_conv_buf, …)). The Adreno's maxComputeWorkGroupCount is [65535, 65535, 65535] (NVIDIA: 2^31-1), so a count above 65535 is invalid there. Clamping it did not cure the hang on its own, but it is a spec issue on such GPUs.

3. Subgroup size cannot be pinned to 32

The Adreno has subgroups of 64 to 128 lanes, and requiredSubgroupSizeStages covers compute only, so pin_subgroup never applies (subgroups: default 64 lanes, 64-128, pinned to 32 on stages 0). The translator then takes the "warp larger than guest" path with max_subgroup_size = 128.

  • A lane probe showed the driver's lane numbering and ballots are correct at 64 and at 128.
  • Pinning compute stages to 64 made the title screen hang.

4. VK_EXT_map_memory_placed is advertised but ignores the placement address

I tried it as a replacement for host-memory import: the driver accepts VK_MEMORY_MAP_PLACED_BIT_EXT but maps elsewhere, so it cannot replace host-memory import here.

5. Start-up precompile exceeds the memory of a 16 GB machine

The release precompile builds about 11,000 graphics pipelines at start. On this driver that took the process to about 17 GB committed, and the system ran out of commit (Windows paging, then device loss). RX_VK_PRECOMPILE=0 avoided it.

The remaining hang (Kokiri intro), what is known

  • Reproducible: every run, a few seconds into the first gameplay scene after New Game, after the pool merges entering the area (pool … took in N pools). The GPU time per frame climbs from about 25 ms to 30–40 ms in the seconds before it.
  • Not a timeout: it still hangs with HKLM\SYSTEM\CurrentControlSet\Control\GraphicsDrivers\TdrDelay = 10.
  • Where: I added GPU-written marks (vkCmdFillBuffer into host memory around each dispatch and render pass). At every hang the GPU was inside a 768x432 render pass whose first draw is the mesh fallback draw of 3bde059fb051af1f (mesh-only, 160 vertices/primitives, 11 vertex lines). Its last draw is 83d320bbc3ad3d8e, about 32 draws in all.
    • Those marks had no barriers around them, so the location is likely but not certain.
  • Leaving the fallback draws out (dispatches kept) still hangs, later. The fallback's record counts kept rising before that: 196k → 399k → 819k → 1.66M vertices in one draw, near MESH_FALLBACK_RECORD_WORDS.
  • WebGPU renderer, Direct3D 12 (x64 v2.1.0 build under emulation, official wgpu-native v29.0.1.1 because the bundled TOTK build has no DX12 backend, RX_BACKEND=dx12): many NVN2 programs do not lower to Maxwell, so the picture is black, and the device is lost at about 13,000 presents, the same place.
  • WebGPU renderer on Vulkan: device lost about 25 s into the title screen.
  • A second, intermittent hang on the title screen (about 1 run in 3, 500–2000 presents): render pass 1536x864, 15 draws b37500e0e1cae0f5 … 823bb6db3cdd3e3d, right after the dispatch of 8b711dec66ea437c (grid 60x270x1).

Things I ruled out (no change to the Kokiri hang)

  • Lane count: translated for 64 instead of 128; compute pinned to 64.
  • Leaving out 383a566958350efe, 53caac5f38279735 and a54f19e927d8faef (RX_VK_SKIP_PROG), or running them over one workgroup.
  • RX_VK_SKIP_CODE with the culling task code from issue 817 (2c56dc1006942f74; that code does not occur in this build).
  • Keeping retired pools (RX_VK_KEEP_RETIRED=1).
  • Copying back every GPU write, not only small ones.
  • Explicit flush/invalidate (the memory is DEVICE_LOCAL | HOST_VISIBLE | HOST_COHERENT | HOST_CACHED anyway).
  • A newer pool taking over its predecessors' GPU-written contents.
  • Workgroup-count clamp (point 2).

My local patches (for context, not a proposal)

  • Native ARM64 build: aarch64-w64-mingw32, llvm-mingw, -mcpu=oryon-1.
  • No VK_EXT_external_memory_host: each guest pool gets a host-cached VkBuffer copy ("stand-in").
    • CPU-written pages are pushed before each submit.
    • GPU-written ranges are pulled back after completion, with a per-page base copy for a three-way merge.
    • The page table points at the stand-ins.
  • Point 1: feature flags taken from the device.

This copy-based scheme is inherently weaker than real host import. Stores through the page table are not noted, and ordering between CPU writes and in-flight GPU writes is approximate. It may well be the cause of the hang. That the D3D12/WebGPU path hangs at the same place makes me think it is not the whole story.

Logs

In this gist (user name removed from paths): https://gist.github.com/TobiasZero/146d348f0088c3e31dfd2b52a8f17a98

  • vulkan_arm64_freeze_kokiri_1..3.txt: three Vulkan runs ending in the device loss entering Kokiri
  • vulkan_arm64_latest_run.txt: the latest Vulkan run (stopped before the hang)
  • webgpu_d3d12_x64_black_then_device_lost.txt, webgpu_d3d12_x64_stderr.txt: x64 v2.1.0, WebGPU renderer on D3D12
  • adreno_x1-85_vulkaninfo.json: the device's Vulkan capabilities
> [@TobiasZero](https://github.com/TobiasZero) commented on GitHub · 2026-11-12 18:57 UTC · [original](https://github.com/NotRexed/Hookshot/issues/1007#issuecomment-6833012788) **Windows on ARM follow-up to #2230: Snapdragon X / Adreno X1-85 (Windows on ARM): Vulkan back end cannot start, and with workarounds the GPU hangs entering Kokiri Forest** Adding details here as asked in #2230 (same platform: Snapdragon X, Windows, no `VK_EXT_external_memory_host`). ## System | | | |---|---| | Device | Microsoft Surface Pro 11, Snapdragon X Elite, 16 GB unified memory | | OS | Windows 11 Pro 10.0.28000, ARM64 | | GPU | Qualcomm Adreno X1-85, driver 31.0.152.1 (23 May 2026), Vulkan 1.3, driver id 0x8035f000 | | Hookshot | v2.1.0 (source 633eb435), OoT (Switch 2 edition) | `vulkaninfo` output of the device is in the gist linked at the end. ## Summary 1. **The stock build cannot draw on this GPU at all.** The Vulkan back end needs `VK_EXT_external_memory_host`, which the Adreno driver does not have, so it logs `no VK_EXT_external_memory_host: the guest memory cannot be imported (needed for now)` and gives up. 2. **To get further, I patched the back end locally** (a native ARM64 build plus host-memory "stand-in" buffers, details below). With those patches the game boots, plays its movies, reaches the title screen and starts a new game at 60 fps. 3. **Then the GPU hangs reproducibly** a few seconds into the intro cutscene, in the first gameplay scene (Navi flying into Kokiri Forest, about 12,000 presents after New Game): `VK_ERROR_DEVICE_LOST`, Windows `LiveKernelEvent 141`. - It still hangs with `TdrDelay` raised to 10 s, so this is a real hang, not a slow frame. - It also happens at the same point with the **WebGPU renderer on Direct3D 12**, which shares none of my patches. Several of the problems below look like general issues for GPUs other than NVIDIA/AMD/Intel desktop parts. I hope they help with Adreno (and possibly other mobile-class) support. ## Problems found in the Vulkan back end ### 1. `make_profile()` claims features the Adreno does not have, so the driver refuses compute pipelines `gpu/vk/vk_shader.cpp` `make_profile()` hard-codes: ```cpp p.support_uniform_and_storage_buffer_8bit = p.support_storage_buffer_8bit = true; p.support_uniform_and_storage_buffer_16bit = p.support_storage_buffer_16bit = true; p.support_fp32_denorm_preserve = p.support_fp32_denorm_flush = true; h.support_float64 = true; ``` The Adreno X1-85 has `uniformAndStorageBuffer8BitAccess = false`, `uniformAndStorageBuffer16BitAccess = false`, `shaderDenormPreserveFloat32 = false` and `shaderFloat64 = false` (`storageBuffer8/16BitAccess` are true). The driver then fails `vkCreateComputePipelines` with `VK_ERROR_UNKNOWN (-13)` for many programs, including the foliage culling `53caac5f38279735`. In a standalone probe, 40 of 40 refused modules compiled once these four flags were taken from `vkGetPhysicalDeviceFeatures2` / `VkPhysicalDeviceVulkan12Properties`. **Suggestion:** derive these from the device's features instead of `true`. ### 2. Mesh fallback: workgroup counts are not limited to `maxComputeWorkGroupCount` Without mesh shaders, the compute fallback dispatches the game's indirect mesh-task counts as they are (`mesh_indirect_convert` → `vkCmdDispatchIndirect(mesh_conv_buf, …)`). The Adreno's `maxComputeWorkGroupCount` is `[65535, 65535, 65535]` (NVIDIA: 2^31-1), so a count above 65535 is invalid there. Clamping it did not cure the hang on its own, but it is a spec issue on such GPUs. ### 3. Subgroup size cannot be pinned to 32 The Adreno has subgroups of 64 to 128 lanes, and `requiredSubgroupSizeStages` covers compute only, so `pin_subgroup` never applies (`subgroups: default 64 lanes, 64-128, pinned to 32 on stages 0`). The translator then takes the "warp larger than guest" path with `max_subgroup_size = 128`. - A lane probe showed the driver's lane numbering and ballots are correct at 64 and at 128. - Pinning compute stages to 64 made the title screen hang. ### 4. `VK_EXT_map_memory_placed` is advertised but ignores the placement address I tried it as a replacement for host-memory import: the driver accepts `VK_MEMORY_MAP_PLACED_BIT_EXT` but maps elsewhere, so it cannot replace host-memory import here. ### 5. Start-up precompile exceeds the memory of a 16 GB machine The release precompile builds about 11,000 graphics pipelines at start. On this driver that took the process to about 17 GB committed, and the system ran out of commit (Windows paging, then device loss). `RX_VK_PRECOMPILE=0` avoided it. ## The remaining hang (Kokiri intro), what is known - **Reproducible:** every run, a few seconds into the first gameplay scene after New Game, after the pool merges entering the area (`pool … took in N pools`). The GPU time per frame climbs from about 25 ms to 30–40 ms in the seconds before it. - **Not a timeout:** it still hangs with `HKLM\SYSTEM\CurrentControlSet\Control\GraphicsDrivers\TdrDelay = 10`. - **Where:** I added GPU-written marks (`vkCmdFillBuffer` into host memory around each dispatch and render pass). At every hang the GPU was inside a 768x432 render pass whose first draw is the **mesh fallback draw of `3bde059fb051af1f`** (mesh-only, 160 vertices/primitives, 11 vertex lines). Its last draw is `83d320bbc3ad3d8e`, about 32 draws in all. - Those marks had no barriers around them, so the location is likely but not certain. - **Leaving the fallback draws out** (dispatches kept) still hangs, later. The fallback's record counts kept rising before that: 196k → 399k → 819k → 1.66M vertices in one draw, near `MESH_FALLBACK_RECORD_WORDS`. - **WebGPU renderer, Direct3D 12** (x64 v2.1.0 build under emulation, official wgpu-native v29.0.1.1 because the bundled TOTK build has no DX12 backend, `RX_BACKEND=dx12`): many NVN2 programs `do not lower to Maxwell`, so the picture is black, and the device is lost at about 13,000 presents, the same place. - **WebGPU renderer on Vulkan:** device lost about 25 s into the title screen. - **A second, intermittent hang on the title screen** (about 1 run in 3, 500–2000 presents): render pass 1536x864, 15 draws `b37500e0e1cae0f5` … `823bb6db3cdd3e3d`, right after the dispatch of `8b711dec66ea437c` (grid 60x270x1). ### Things I ruled out (no change to the Kokiri hang) - Lane count: translated for 64 instead of 128; compute pinned to 64. - Leaving out `383a566958350efe`, `53caac5f38279735` and `a54f19e927d8faef` (`RX_VK_SKIP_PROG`), or running them over one workgroup. - `RX_VK_SKIP_CODE` with the culling task code from issue 817 (`2c56dc1006942f74`; that code does not occur in this build). - Keeping retired pools (`RX_VK_KEEP_RETIRED=1`). - Copying back every GPU write, not only small ones. - Explicit flush/invalidate (the memory is `DEVICE_LOCAL | HOST_VISIBLE | HOST_COHERENT | HOST_CACHED` anyway). - A newer pool taking over its predecessors' GPU-written contents. - Workgroup-count clamp (point 2). ## My local patches (for context, not a proposal) - **Native ARM64 build:** `aarch64-w64-mingw32`, llvm-mingw, `-mcpu=oryon-1`. - **No `VK_EXT_external_memory_host`:** each guest pool gets a host-cached `VkBuffer` copy ("stand-in"). - CPU-written pages are pushed before each submit. - GPU-written ranges are pulled back after completion, with a per-page base copy for a three-way merge. - The page table points at the stand-ins. - **Point 1:** feature flags taken from the device. This copy-based scheme is inherently weaker than real host import. Stores through the page table are not noted, and ordering between CPU writes and in-flight GPU writes is approximate. It may well be the cause of the hang. That the D3D12/WebGPU path hangs at the same place makes me think it is not the whole story. ## Logs In this gist (user name removed from paths): https://gist.github.com/TobiasZero/146d348f0088c3e31dfd2b52a8f17a98 - `vulkan_arm64_freeze_kokiri_1..3.txt`: three Vulkan runs ending in the device loss entering Kokiri - `vulkan_arm64_latest_run.txt`: the latest Vulkan run (stopped before the hang) - `webgpu_d3d12_x64_black_then_device_lost.txt`, `webgpu_d3d12_x64_stderr.txt`: x64 v2.1.0, WebGPU renderer on D3D12 - `adreno_x1-85_vulkaninfo.json`: the device's Vulkan capabilities <!-- github-sync:c:6833012788 -->
Commenting is not possible because the repository is archived.
No milestone
No assignees
2 participants
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
MagicBeanDev/Hookshot#1007
No description provided.