图号:HS-2011-06 // 版本:v2.0.11 // 比例:故障图谱 // 第 6 页,共 6 页
10 份已验证故障工单(#1161 · #817 · #57)诊断覆盖参数:RX_VK_MESH_NOCULL · RX_VK_ASTC_RGBA8 · RX_FORCE_INTERP

Hookshot 故障排查、VK_ERROR_DEVICE_LOST 与诊断环境变量

诊断并解决所有已记录的 Hookshot v2.0.11 运行时崩溃、GPU 驱动卡死、纹理异常及构建器提取错误。通过下方的问题标签(#1161、#817、#57、#1176)或故障现象搜索筛选 10 张经过验证的故障工单,查阅三个分栏诊断面板(故障现象、环境变量、解决方案),并应用针对性的 RX_* 环境覆盖项。

FIG 6.0 // FAULT DECISION FLOWNotRexed/Hookshot · v2.0.14
针对 VK_ERROR_DEVICE_LOST #1161、Steam Deck 德库树 #817 及 AMD ASTC #57 的 Hookshot 排错决策流程图
图 6.0 — Hookshot 故障排查与 RX_* 环境变量决策流程(v2.0.11)
分块故障图谱 // 10 份已验证诊断工单

交互式故障索引与三栏诊断工作台

按主要问题标签(#1161、#817、#57、#1176、RX_* 诊断)筛选或按现象关键字搜索。每份故障工单均展示三个分栏面板——观察到的现象、环境变量/启动参数,以及经过验证的 v2.0.11 解决方案,并提供互联的关联故障。

Issue #1161VK_ERROR_DEVICE_LOST GPU Timeout 或 VRAM 耗尽(#1161)
4 GB - 6 GB VRAM GPU 或超频的 Vulkan 驱动程序

在复杂的海拉鲁平原或神殿场景切换期间,当 ASTC 纹理池加上级联阴影超出物理 VRAM,或触发驱动 TDR 超时时发生。

面板 01 // 观察到的现象
加载区域时弹出致命 VK_ERROR_DEVICE_LOST 弹窗并崩溃到桌面
面板 02 // 环境变量或参数
graphics_preset=Low/Medium 或 RX_SKIP_SHADERS=<hash>
面板 03 // 验证解决方案
在 Insert/F1 菜单中将图形预设降低为 Low(4 GB)或 Medium(6 GB),将渲染缩放调至 1.0x,并升级到包含描述符池修复补丁的 v2.0.11。
Issue #817Steam Deck / Linux RADV 德库树内部卡死 (#817)
Steam Deck LCD/OLED 与 Linux AMD RADV(Mesa < 24.3)

在 Steam Deck(Mesa RADV)上进入德库树内部或蜘蛛网房间时,由于着色器 2c56dc1006942f74 上的网格块子组剔除,可能导致 GPU 命令缓冲区挂起。

面板 01 // 观察到的现象
进入德库树内部时画面冻结且音频循环卡死
面板 02 // 环境变量或参数
RX_VK_MESH_NOCULL=2c56dc1006942f74
面板 03 // 验证解决方案
将 Steam 启动参数设置为 RX_VK_MESH_NOCULL=2c56dc1006942f74 %command%(或 RX_VK_MESH_NOCULL=1 以全局禁用微网格剔除)。
Issues #57 与 #1006AMD RDNA 2 / RDNA 3 方块状树叶与 HUD 纹理瑕疵 (#57 / #1006)
AMD Radeon RX 6000 / RX 7000 系列(Windows 与 Linux)

部分 AMD Windows Adrenalin 与 Linux 驱动会错误编译计算 ASTC 转 BC7 转码器,导致 HUD 图标与柯基里植被上出现彩色的 4x4 宏块伪影。

面板 01 // 观察到的现象
UI 图标、草地和水体表面出现棋盘格或彩虹色 4x4 方块
面板 02 // 环境变量或参数
RX_VK_ASTC_RGBA8=1
面板 03 // 验证解决方案
在启动 Hookshot 前导出 RX_VK_ASTC_RGBA8=1,强制使用无损软件 RGBA8 解压代替计算着色器 BC7 转码。
Issues #1176 与 #990HookshotBuilder 资源提取失败或 NSO 哈希不匹配 (#1176 / #990)
Windows x64 与 Linux x86_64 HookshotBuilder

若提供了缺少补丁 v131072 的基础版 v0 转储、非 Switch 2 Title ID 0400486024DEC000 的 N64/3DS ROM,或在 v2.0.11 之前包含非 ASCII 字符的 Windows 路径,资源构建器均会中止。

面板 01 // 观察到的现象
Builder 报错不支持的 ExeFS Build ID,或在 99% RomFS 重新打包时失败
面板 02 // 环境变量或参数
需要 Title ID 0400486024DEC000 v131072(e0f3ccfa)
面板 03 // 验证解决方案
Update 到 Hookshot v2.0.11(修复 UTF-8 Windows 路径问题 #1176)并提供与 SHA-1 前缀 e0f3ccfa 相符的已合并 Switch 2 v131072 转储。
docs/DEVELOPMENT.md隔离有问题的自定义或 Driver 专有 Shaders (RX_SKIP_SHADERS)
所有 Vulkan 1.3 平台

跳过一个或多个 64 位 NVN2 着色器哈希的绘制调用,方便玩家与协作者精准定位引发驱动崩溃或视觉错误的 SPIR-V 管线。

面板 01 // 观察到的现象
特定粒子特效或后处理阶段导致崩溃或使视口变黑/失效
面板 02 // 环境变量或参数
RX_SKIP_SHADERS=<hash1>,<hash2>
面板 03 // 验证解决方案
携带 RX_LOG_LEVEL=debug 运行以记录崩溃前活动的着色器哈希,随后传入 RX_SKIP_SHADERS=<hash> 绕过该管线。
docs/DESIGN.md 与 docs/DEVELOPMENT.md通过 ARM64 Interpreter 绕过提升后 C 函数的回归问题 (RX_FORCE_INTERP)
Windows x64 与 Linux x86_64

将单个客户机函数地址 (`0x7100xxxxxx`) 或整个二进制文件分流至软件 ARM64 解释器执行,绕过静态 C 转译。

面板 01 // 观察到的现象
怀疑提升的 ARM64 函数中存在 Actor 物理异常或软锁
面板 02 // 环境变量或参数
RX_FORCE_INTERP=0x7100123450 或 RX_FORCE_INTERP=all
面板 03 // 验证解决方案
将 RX_FORCE_INTERP 设为存疑的客户机地址,以verify问题是否源自 nx2/ 静态 C 提升器。
docs/DEVELOPMENT.md启用详细的 Vulkan 与 HLE 系统调用日志(RX_LOG_LEVEL 与 RX_TRACE_FUNC)
Windows x64 与 Linux x86_64

控制 stdout/stderr 从 trace 到 error 的日志详细级别,并在提交 GitHub issue 时记录目标客户机函数的出入口寄存器状态(`X0`–`X7`)。

面板 01 // 观察到的现象
启动时静默退出或触发未实现的 HLE 服务桩陷阱
面板 02 // 环境变量或参数
RX_LOG_LEVEL=debug / RX_ABORT_ON_UNIMPL=1
面板 03 // 验证解决方案
在终端中携带 RX_LOG_LEVEL=debug(可选附加 RX_TRACE_FUNC=0x7100xxxxxx)启动以抓取完整诊断日志。
docs/DEVELOPMENT.md在无 网格着色器 环境下测试资源加载与启动逻辑(RX_GPU_BACKEND=null)
无头 CI 运行节点及不支持网格着色器的测试机

初始化空操作的空渲染器并设置 RX_BOOT_DIRECT=1,以便不支持网格着色器的机器上的开发者能够 verify RomFS 挂载、音频和存档解析。

面板 01 // 观察到的现象
在旧版 GPU 上 Vulkan 初始化失败并报错 VK_ERROR_EXTENSION_NOT_PRESENT
面板 02 // 环境变量或参数
RX_GPU_BACKEND=null RX_BOOT_DIRECT=1
面板 03 // 验证解决方案
使用 RX_GPU_BACKEND=null 进行无头启动/存档验证;实际 3D 游玩必须配备支持硬件 VK_EXT_mesh_shader 的 GPU。
README.md Linux SetupLinux AppImage 启动失败(缺失 chmod +x 或 libfuse2)
Linux x86_64 (Ubuntu, Debian, Fedora, Arch)

在 On Ubuntu 22.04/24.04 或缺少 libfuse2 的精简发行版中,双击 Hookshot-v2.0.11-Linux-x86_64.AppImage 会静默启动失败,除非赋予可执行权限或使用 --appimage-extract 参数。

面板 01 // 观察到的现象
AppImage 无法打开或输出 dlopen(): error loading libfuse.so.2
面板 02 // 环境变量或参数
chmod +x *.AppImage 或 --appimage-extract-and-run
面板 03 // 验证解决方案
运行 chmod +x Hookshot-v2.0.11-Linux-x86_64.AppImage,并安装 libfuse2t64 或添加 --appimage-extract-and-run 参数。
docs/SAVES.md存档槽位损坏或手动覆盖存档路径(RX_SAVE_PATH 与 oot_saves.py)
Windows x64 与 Linux x86_64

写入中断时回退至 autosave.sav,或通过 scripts/oot_saves.py 重新计算 CRC32C 文件头校验和(`0x0008`)来恢复数据。

面板 01 // 观察到的现象
异常断电或手动十六进制编辑后,存档位显示为空或数据损坏
面板 02 // 环境变量或参数
python3 scripts/oot_saves.py verify save_00.sav / RX_SAVE_PATH
面板 03 // 验证解决方案
运行 python3 scripts/oot_saves.py export-json 及 import-json 以重新计算 CRC32C,或将 autosave.sav 覆盖复制到 save_00.sav。
诊断覆盖项 // RX_FORCE_INTERP 与 RX_SKIP_SHADERS隔离提升后的 ARM64 代码与 SPIR-V Shader 回归问题

当降低 VRAM 预设仍无法解决崩溃或软死锁时,可结合使用 RX_LOG_LEVEL=debug 与 RX_SKIP_SHADERS=<hash> 排查是否由特定 NVN2 SPIR-V 管线引起,或设置 RX_FORCE_INTERP=0x7100xxxxxx(或 RX_FORCE_INTERP=all)将客户机函数交由软件 ARM64 解释器执行,而非静态 C。

故障路径示意草图 // 3 大常见焦点 ISSUES

直观故障路径原理图(#1161 · #817 · #57)

ISSUE #1161
VK_ERROR_DEVICE_LOST Queue Timeout海拉鲁平原 / 神殿场景切换,或 NVIDIA 621 Driver 提交

ASTC 纹理池 + 级联阴影超出物理 VRAM,或独立呈现队列触发 TDR 超时 → 将 Insert/F1 预设降至 Low/Medium 并添加 Hookshot v2.0.11 运行。

ISSUE #817
Steam Deck RADV 德库树卡死Mesa RADV 子组网格块剔除死锁

进入德库树内部时执行网格着色器 2c56dc1006942f74 → RADV wave64 ballot 导致 GPU 命令缓冲区停滞 → 传入 RX_VK_MESH_NOCULL=2c56dc1006942f74 %command%。

ISSUES #57 与 #1006
AMD RDNA 2/3 方块状 4×4 ASTC 画面错误计算 ASTC 转 BC7 转码器编译错误

Adrenalin / RADV 计算着色器损坏了柯基里植被和 HUD 图标上的 4×4 BC7 块 → 导出 RX_VK_ASTC_RGBA8=1 强制使用 CPU/软件 RGBA8 纹理解码。

完整 10 项故障排错与 RX_* 参数参考台账

故障名称与 Issue 编号受影响平台环境变量 / 参数关联故障
VK_ERROR_DEVICE_LOST GPU Timeout 或 VRAM 耗尽(#1161)
Issue #1161
4 GB - 6 GB VRAM GPU 或超频的 Vulkan 驱动程序graphics_preset=Low/Medium 或 RX_SKIP_SHADERS=<hash>
Steam Deck / Linux RADV 德库树内部卡死 (#817)
Issue #817
Steam Deck LCD/OLED 与 Linux AMD RADV(Mesa < 24.3)RX_VK_MESH_NOCULL=2c56dc1006942f74
AMD RDNA 2 / RDNA 3 方块状树叶与 HUD 纹理瑕疵 (#57 / #1006)
Issues #57 与 #1006
AMD Radeon RX 6000 / RX 7000 系列(Windows 与 Linux)RX_VK_ASTC_RGBA8=1
HookshotBuilder 资源提取失败或 NSO 哈希不匹配 (#1176 / #990)
Issues #1176 与 #990
Windows x64 与 Linux x86_64 HookshotBuilder需要 Title ID 0400486024DEC000 v131072(e0f3ccfa)
隔离有问题的自定义或 Driver 专有 Shaders (RX_SKIP_SHADERS)
docs/DEVELOPMENT.md
所有 Vulkan 1.3 平台RX_SKIP_SHADERS=<hash1>,<hash2>
通过 ARM64 Interpreter 绕过提升后 C 函数的回归问题 (RX_FORCE_INTERP)
docs/DESIGN.md 与 docs/DEVELOPMENT.md
Windows x64 与 Linux x86_64RX_FORCE_INTERP=0x7100123450 或 RX_FORCE_INTERP=all
启用详细的 Vulkan 与 HLE 系统调用日志(RX_LOG_LEVEL 与 RX_TRACE_FUNC)
docs/DEVELOPMENT.md
Windows x64 与 Linux x86_64RX_LOG_LEVEL=debug / RX_ABORT_ON_UNIMPL=1
在无 网格着色器 环境下测试资源加载与启动逻辑(RX_GPU_BACKEND=null)
docs/DEVELOPMENT.md
无头 CI 运行节点及不支持网格着色器的测试机RX_GPU_BACKEND=null RX_BOOT_DIRECT=1
Linux AppImage 启动失败(缺失 chmod +x 或 libfuse2)
README.md Linux Setup
Linux x86_64 (Ubuntu, Debian, Fedora, Arch)chmod +x *.AppImage 或 --appimage-extract-and-run
存档槽位损坏或手动覆盖存档路径(RX_SAVE_PATH 与 oot_saves.py)
docs/SAVES.md
Windows x64 与 Linux x86_64python3 scripts/oot_saves.py verify save_00.sav / RX_SAVE_PATH
KPI-TRB-01 // ISSUE #1161
VK_DEVICE_LOST
NVIDIA 621 / VRAM Timeout
已在 v2.0.9–v2.0.11 中修复 · 4–6 GB 显卡请调低 Insert/F1 预设
KPI-TRB-02 // ISSUE #817
2c56dc1006942f74
Steam Deck 德库树卡死
Bypass 搭配 RX_VK_MESH_NOCULL=2c56dc1006942f74 %command%
KPI-TRB-03 // ISSUES #57 & #1006
RX_VK_ASTC_RGBA8=1
AMD RDNA 2/3 色块化植被
强制使用无损软件 RGBA8 解压替代 BC7 计算
KPI-TRB-04 // LIFTER FALLBACK
RX_FORCE_INTERP
ARM64 Interpreter Bypass
将存疑的 0x7100xxxxxx 函数从提升出的 C 分片中重定向分流
技术规范 // 崩溃修复与 RX_* 诊断环境变量

解决 VK_ERROR_DEVICE_LOST (#1161)、Steam Deck 德库树卡死 (#817) 及 AMD ASTC 画面错误 (#57)

社区反馈的大多数问题集中于三类特定硬件故障 Hookshot。其一,Issue #1161 (VK_ERROR_DEVICE_LOST) 常见于两种场景:在 NVIDIA 621 系列驱动上,启动着色器预编译完成后且启用了独立 Vulkan 呈现队列时直接报错(已在 v2.0.9 缓解,并在 v2.0.11 进一步优化,即保持关闭独立呈现队列的同时重新启用 RX_VK_WB_DIFF=1);或在 4 GB 至 6 GB 显卡上,于海拉鲁平原/神殿复杂场景切换期间,因 ASTC 纹理池与级联阴影超出物理 VRAM 导致。在 Insert / F1 菜单中将图形预设降至 Low(1.5 GB 纹理池)或 Medium(2.5 GB 纹理池)可防止 VRAM 耗尽。

其二,Issue #817 会影响运行低于 24.3 版本 Mesa 的 Steam Deck LCD/OLED 与 Linux AMD RADV 系统:进入德库树内部或蜘蛛网房间时,音频正常循环但 GPU 命令缓冲区卡死。该挂能源自 NVN2 网格着色器 2c56dc1006942f74 内部的子组 meshlet 剔除问题;在 Steam 启动项中设置 RX_VK_MESH_NOCULL=2c56dc1006942f74 %command% 即可跳过该着色器的剔除,且对 FPS 毫无肉眼可见的负面影响。其三,AMD Radeon RX 6000 / RX 7000 系列显卡上的 Issues #57 与 #1006 会导致植被和 HUD 图标出现彩虹 4x4 色块,原因为驱动对计算 ASTC 转 BC7 转码器误编译;设置 export RX_VK_ASTC_RGBA8=1 即可切换为无损软件 RGBA8 解压。

HookshotBuilder 提取错误 (#1176 / #990) 与开发者 RX_* 诊断参数

当 HookshotBuilder 在资源提取或 C 编译阶段失败时,请verify三项前置条件:(1) 你的 Dump 必须匹配 Switch 2 Title ID 0400486024DEC000,已打上 v131072 补丁且 ExeFS main NSO SHA-1 前缀为 e0f3ccfa (e0f3ccfa56256410941279ef0b2501356be2222c),而非未经补丁的 v0 基础版或 N64/3DS ROM;(2) 正在运行 Hookshot v2.0.11,该版本修复了包含非 ASCII 字符的 Windows 用户路径异常 (#1176)、残留生成的 C 转译冲突 (#1197) 以及缺失 Linux AppImage 头文件问题 (#990);(3) 至少保留 30 GB 可用磁盘空间,以容纳 26.2 GB 解包 RomFS 以及 1.4 GB 生成的 C 源码。

针对高级调试,Hookshot 提供了 docs/DEVELOPMENT.md 中记录的细粒度环境变量:RX_LOG_LEVEL=debug 与 RX_ABORT_ON_UNIMPL=1 用于暴露未实现的 Horizon OS HLE 系统调用;RX_SKIP_SHADERS=<hash1>,<hash2> 用于禁用特定的 64 位 NVN2 着色器管线以排查画面损坏;RX_FORCE_INTERP=0x7100xxxxxx 用于将可疑的客户机函数分流至软件 ARM64 解释器;RX_GPU_BACKEND=null 配合 RX_BOOT_DIRECT=1 可用于无头启动验证。

技术问答 // 故障恢复与存档管理

故障排查与环境变量 FAQ

在 Windows 与 Steam Deck 上应该分别在哪里设置 RX_VK_MESH_NOCULL 或 RX_VK_ASTC_RGBA8?

在 On Steam Deck 或 Linux Steam 中,右键点击 Hookshot -> 属性 -> 启动选项,输入:RX_VK_MESH_NOCULL=2c56dc1006942f74 %command%(或在 %command% 之前组合多个环境变量)。在 On Windows PowerShell 中,在构建目录运行 $env:RX_VK_ASTC_RGBA8=1; .\hookshot.exe,或在 Windows System 属性 -> 环境变量中添加该变量。

为什么从 v2.0.7 升级至 v2.0.9 时会因未声明的 g_module_b 或 f_8 符号报错失败(#1176 / #1197)?

在 v2.0.10 之前,若更新中断或跨版本升级,work/sa/gen/ 内可能会残留旧版生成的 C 文件,引发 clang/lld 链接错误。升级至 Hookshot v2.0.11 后,构建器在编译前会自动丢弃残余的部分生成代码并清理旧的转译分片。

如果发生崩溃后 Hookshot 显示数据损坏,该如何恢复存档槽位?

首先检查存档目录中的 autosave.sav,并将其覆盖复制到 save_00.sav。如果你手动编辑过存档文件,请运行 python -m nx2.oot_saves verify save_00.sav(或 export-json 后接 import-json),让 Hookshot 在文件头偏移 0x0008 处重新计算所需的 CRC32C 校验和。

一手参考来源与验证

官方 NotRexed/Hookshot 诊断与 Issue 参考文献