Linux/RADV: in-game menu text renders as hollow boxes on RX 9070 XT (v2.0.11) #1279

Closed
opened 2026-11-09 20:27:07 +00:00 by sh4d1t0 · 6 comments
sh4d1t0 commented 2026-11-09 20:27:07 +00:00 (Migrated from github.com)

Hookshot version

v2.0.11 (latest release at time of report; log begins hookshot v2.0.11).

What happened

On the native Linux build (bin/hookshot), in-game menu text renders as rows of hollow square glyphs and is unreadable. The menu and scene otherwise render. Expected: readable menu text.

Changing language.txt between es-419, es, and en-US does not change the symptom; the log confirms oe: language en-US (language.txt). In the same game folder, bin/hookshot.exe launched through Wine displays the text correctly, while the native Linux executable does not.

This remains reproducible on v2.0.11, after the text fixes referenced in #214 / #229 and PR #228. Those reports describe blank text; this report is specifically hollow-box glyphs on the native Linux build.

System

  • OS: CachyOS
  • GPU: AMD Radeon RX 9070 XT
  • Driver/API: RADV, Vulkan 1.4 (log reports driver 0x6802006)
  • Resolution in log: 3440x1440

Where / frequency

In-game settings/menu overlay. Reproduced with multiple language selections during this session.

  • #214 (font / blurry text on AMD)
  • #229 (text not rendering on AMD)
  • PR #228 (fix for blank AMD menu text)
  • #1000 (Linux/RADV tracking)

I have a screenshot and hookshot_log.txt available and can attach them if needed. No game files or saves are attached.

Could this be a separate Linux/RADV text-rendering issue, or is there a known workaround for v2.0.11?

## Hookshot version v2.0.11 (latest release at time of report; log begins `hookshot v2.0.11`). ## What happened On the native Linux build (`bin/hookshot`), in-game menu text renders as rows of hollow square glyphs and is unreadable. The menu and scene otherwise render. Expected: readable menu text. Changing `language.txt` between `es-419`, `es`, and `en-US` does not change the symptom; the log confirms `oe: language en-US (language.txt)`. In the same game folder, `bin/hookshot.exe` launched through Wine displays the text correctly, while the native Linux executable does not. This remains reproducible on v2.0.11, after the text fixes referenced in #214 / #229 and PR #228. Those reports describe blank text; this report is specifically hollow-box glyphs on the native Linux build. ## System - OS: CachyOS - GPU: AMD Radeon RX 9070 XT - Driver/API: RADV, Vulkan 1.4 (log reports driver `0x6802006`) - Resolution in log: 3440x1440 ## Where / frequency In-game settings/menu overlay. Reproduced with multiple language selections during this session. ## Related reports - #214 (font / blurry text on AMD) - #229 (text not rendering on AMD) - PR #228 (fix for blank AMD menu text) - #1000 (Linux/RADV tracking) I have a screenshot and `hookshot_log.txt` available and can attach them if needed. No game files or saves are attached. Could this be a separate Linux/RADV text-rendering issue, or is there a known workaround for v2.0.11?
sh4d1t0 commented 2026-11-09 20:30:25 +00:00 (Migrated from github.com)

Additional sanitized evidence from hookshot_log.txt (absolute local paths omitted):

[hos host] hookshot v2.0.11 (source 10f983ad)
[hos sead::MainThread] oe: language en-US (language.txt)
[hos host] vk: device 0: AMD Radeon RX 9070 XT (RADV GFX1201), Vulkan 1.4, driver 0x6802006, type 2
[hos host] vk: AMD Radeon RX 9070 XT (RADV GFX1201), Vulkan 1.4, driver 0x6802006; mesh shaders yes, host memory import yes, pipeline libraries yes
[hos host] rx: renderer: Vulkan (hookshot_vk.dll)

The screenshot is not attached in this comment; it remains available locally. No save data or game files are included.

Additional sanitized evidence from `hookshot_log.txt` (absolute local paths omitted): ```text [hos host] hookshot v2.0.11 (source 10f983ad) [hos sead::MainThread] oe: language en-US (language.txt) [hos host] vk: device 0: AMD Radeon RX 9070 XT (RADV GFX1201), Vulkan 1.4, driver 0x6802006, type 2 [hos host] vk: AMD Radeon RX 9070 XT (RADV GFX1201), Vulkan 1.4, driver 0x6802006; mesh shaders yes, host memory import yes, pipeline libraries yes [hos host] rx: renderer: Vulkan (hookshot_vk.dll) ``` The screenshot is not attached in this comment; it remains available locally. No save data or game files are included.
NotRexed commented 2026-11-09 20:47:14 +00:00 (Migrated from github.com)

Thanks for the comparison with the same folder under Wine. Linking this to the Linux tracker #1000 (hollow-box menu text on the native build, RADV).

Thanks for the comparison with the same folder under Wine. Linking this to the Linux tracker #1000 (hollow-box menu text on the native build, RADV).
NotRexed commented 2026-11-10 03:49:42 +00:00 (Migrated from github.com)

Fixed in the v2.0.12 branch, closing at release. Linux menus now skip fonts that have no Latin letters (#1405), which were what drew the hollow boxes.

Fixed in the v2.0.12 branch, closing at release. Linux menus now skip fonts that have no Latin letters (#1405), which were what drew the hollow boxes.
NotRexed commented 2026-11-10 10:07:54 +00:00 (Migrated from github.com)

Fixed in v2.0.12 (https://github.com/NotRexed/Hookshot/releases/tag/v2.0.12): Linux menu fonts without Latin letters are skipped, the font Fontconfig picks is honoured, and UTF-8 text is drawn (#1405, #1371, #1389). Update with the Hookshot Builder (or the game's update offer) and rebuild. If it still happens on v2.0.12, reopen this with your hookshot_log.txt.

Fixed in **v2.0.12** (https://github.com/NotRexed/Hookshot/releases/tag/v2.0.12): Linux menu fonts without Latin letters are skipped, the font Fontconfig picks is honoured, and UTF-8 text is drawn (#1405, #1371, #1389). Update with the Hookshot Builder (or the game's update offer) and rebuild. If it still happens on v2.0.12, reopen this with your `hookshot_log.txt`.
quazardous commented 2026-11-10 10:50:49 +00:00 (Migrated from github.com)

Not reproducible on another RADV card with the same driver build, ultrawide included. The native Linux build's in-game menu text renders correctly here, so this looks narrower than "Linux/RADV".

Machine: ROG Ally X, Radeon 780M (vk: device 0: AMD Ryzen Z1 Extreme (RADV PHOENIX), Vulkan 1.4, driver 0x6802006) — the same driver 0x6802006 your log reports, so the same Mesa 26.2.6 build. Bazzite (Fedora 45 base, kernel 7.2.15), native bin/hookshot from a v2.0.11 build (source 10f983ad), language.txt = fr, so accents and the small-caps "ZELDA NOTES" are part of the test.

Both runs are headless and driven by the game's own scripted input, so anyone can repeat them exactly:

HOS_HEADLESS=1 HOS_AUDIO=0 HOS_DYNRES=0 RX_VK_FRAMEGEN=0 \
HOS_INPUT_EXCLUSIVE=1 HOS_INPUT_SCRIPT="60:DOWN,61.5:DOWN,63:A,70:DOWN,72:RIGHT" \
RX_VK_SHOTS=<dir> RX_VK_SHOT_EVERY=30 ./bin/hookshot

(title screen -> Parametres -> the option pages). The second run adds HOS_OUTPUT_RES=1 HOS_ASPECT=2.3889, which the log reports as:

boot: widescreen: picture 3440x1440, scene 2584x1080, camera ratio 2.3889, HUD and movies in the middle 74.4%

-- your picture size.

Result, identical in both runs: every row is readable text -- "Camera : axe vertical inverse", "Deplacement de la camera", "Commandes par mouvements", "Type de ciblage", the right-hand help paragraph, and the small-caps ZELDA NOTES with its icon. No hollow boxes anywhere. The title screen's own menu ("Continuer / Nouvelle partie / Parametres (dont ceux de ZELDA NOTES)") is correct too.

So on this machine it is not the native Linux build as such, not RADV as such, not that Mesa build, not the ultrawide picture, and not a non-English language. Against your setup what is left is the RADV generation: GFX1103 (Phoenix, RDNA3) here against GFX1201 (RDNA4) there -- the same card as #1576, which is also RADV-and-RDNA4-only so far.

Two cheap checks that would narrow it on your side, since the Wine build in the same folder is fine: does the text come back with a 16:9 picture (HOS_OUTPUT_RES=0 and no HOS_ASPECT), and does RX_VK_LOW_SPEC=1 change anything? If neither does, the remaining suspect is the font path on GFX1201 specifically.

I can run any other variant of this on the 780M -- the sequence above is scripted, so a run is one command.


Tooling and method. Nothing custom does the measuring: the determinism is the game's own -- HOS_HEADLESS for offscreen rendering, HOS_INPUT_SCRIPT with HOS_INPUT_FRAME_CLOCK for input timed in game frames, RX_VK_SHOTS for captures taken inside the renderer rather than off a compositor. That is why the commands above are the whole experiment and anyone can repeat them. Around them I run the session offscreen with wbox, with the Hookshot-side configuration in hookshot-wbox -- configuration and scripts only: no game file, capture, reference image or build output goes in either repository, per CONTRIBUTING.md. Reading is done on contact sheets of every capture of a run, not on samples.

**Not reproducible on another RADV card with the same driver build, ultrawide included.** The native Linux build's in-game menu text renders correctly here, so this looks narrower than "Linux/RADV". Machine: ROG Ally X, Radeon 780M (`vk: device 0: AMD Ryzen Z1 Extreme (RADV PHOENIX), Vulkan 1.4, driver 0x6802006`) — the **same `driver 0x6802006`** your log reports, so the same Mesa 26.2.6 build. Bazzite (Fedora 45 base, kernel 7.2.15), native `bin/hookshot` from a v2.0.11 build (`source 10f983ad`), `language.txt` = `fr`, so accents and the small-caps "ZELDA NOTES" are part of the test. Both runs are headless and driven by the game's own scripted input, so anyone can repeat them exactly: ```sh HOS_HEADLESS=1 HOS_AUDIO=0 HOS_DYNRES=0 RX_VK_FRAMEGEN=0 \ HOS_INPUT_EXCLUSIVE=1 HOS_INPUT_SCRIPT="60:DOWN,61.5:DOWN,63:A,70:DOWN,72:RIGHT" \ RX_VK_SHOTS=<dir> RX_VK_SHOT_EVERY=30 ./bin/hookshot ``` (title screen -> **Parametres** -> the option pages). The second run adds `HOS_OUTPUT_RES=1 HOS_ASPECT=2.3889`, which the log reports as: ``` boot: widescreen: picture 3440x1440, scene 2584x1080, camera ratio 2.3889, HUD and movies in the middle 74.4% ``` -- your picture size. **Result, identical in both runs:** every row is readable text -- "Camera : axe vertical inverse", "Deplacement de la camera", "Commandes par mouvements", "Type de ciblage", the right-hand help paragraph, and the small-caps ZELDA NOTES with its icon. No hollow boxes anywhere. The title screen's own menu ("Continuer / Nouvelle partie / Parametres (dont ceux de ZELDA NOTES)") is correct too. So on this machine it is **not** the native Linux build as such, **not** RADV as such, **not** that Mesa build, **not** the ultrawide picture, and **not** a non-English language. Against your setup what is left is the RADV generation: GFX1103 (Phoenix, RDNA3) here against GFX1201 (RDNA4) there -- the same card as #1576, which is also RADV-and-RDNA4-only so far. Two cheap checks that would narrow it on your side, since the Wine build in the same folder is fine: does the text come back with a 16:9 picture (`HOS_OUTPUT_RES=0` and no `HOS_ASPECT`), and does `RX_VK_LOW_SPEC=1` change anything? If neither does, the remaining suspect is the font path on GFX1201 specifically. I can run any other variant of this on the 780M -- the sequence above is scripted, so a run is one command. --- **Tooling and method.** Nothing custom does the measuring: the determinism is the game's own -- `HOS_HEADLESS` for offscreen rendering, `HOS_INPUT_SCRIPT` with `HOS_INPUT_FRAME_CLOCK` for input timed in game frames, `RX_VK_SHOTS` for captures taken inside the renderer rather than off a compositor. That is why the commands above are the whole experiment and anyone can repeat them. Around them I run the session offscreen with [wbox](https://github.com/quazardous/wbox-mcp), with the Hookshot-side configuration in [hookshot-wbox](https://github.com/quazardous/hookshot-wbox) -- configuration and scripts only: no game file, capture, reference image or build output goes in either repository, per CONTRIBUTING.md. Reading is done on contact sheets of **every** capture of a run, not on samples.
quazardous commented 2026-11-10 16:48:57 +00:00 (Migrated from github.com)

Correction to my comment above, which I posted without seeing that v2.0.12 had closed this 40 minutes earlier.

I tested the wrong menu, so my "not reproducible" is worth nothing here. The fix is #1405, Linux: skip menu fonts that have no Latin letters — the Insert menu, whose fonts come from the system through Fontconfig. What I exercised was the game's own Paramètres pages, which draw with the game's built-in fonts: a different text path entirely. Everything I built on that reading — "not the native Linux build as such, not RADV as such, not that Mesa build" — is about a path this bug was never in.

Disregard the RDNA4 inference. I wrote that this and #1576 both stopping at GFX1201 pointed at the driver's RDNA4 path. #1279 turned out to be font selection with no GPU in it at all, and #1576 a real race in the parallel replay (#1184). Two reports from one card is not evidence that a bug belongs to that card.

I should have caught this from my own run: the Insert menu never opened in my headless sessions under RX_VK_MENU_SCRIPT, and that is "the experiment did not run", not a negative result. I read the rest of the screenshots as if it had.

One thing that may save you a confusing update, from v2.0.13's notes rather than from my machine: on v2.0.12 the Insert menu is invisible in fullscreen at 1440p, 4K and ultrawide (it was drawn taller than the screen and dropped) — your 3440x1440 is in that set. v2.0.13 fixes it (#1603, #1611).

If it is still worth a second data point, I can now check the Insert menu itself here on v2.0.13 — same driver build 0x6802006, language.txt = fr, but Bazzite/Fedora 45 against your CachyOS, so a different Fontconfig set. Say the word and I will post what the menu looks like.

Correction to my comment above, which I posted without seeing that v2.0.12 had closed this 40 minutes earlier. **I tested the wrong menu, so my "not reproducible" is worth nothing here.** The fix is #1405, *Linux: skip menu fonts that have no Latin letters* — the **Insert menu**, whose fonts come from the system through Fontconfig. What I exercised was the game's own Paramètres pages, which draw with the game's built-in fonts: a different text path entirely. Everything I built on that reading — "not the native Linux build as such, not RADV as such, not that Mesa build" — is about a path this bug was never in. **Disregard the RDNA4 inference.** I wrote that this and #1576 both stopping at GFX1201 pointed at the driver's RDNA4 path. #1279 turned out to be font selection with no GPU in it at all, and #1576 a real race in the parallel replay (#1184). Two reports from one card is not evidence that a bug belongs to that card. I should have caught this from my own run: the Insert menu never opened in my headless sessions under `RX_VK_MENU_SCRIPT`, and that is "the experiment did not run", not a negative result. I read the rest of the screenshots as if it had. One thing that may save you a confusing update, from v2.0.13's notes rather than from my machine: on **v2.0.12** the Insert menu is invisible in fullscreen at 1440p, 4K and ultrawide (it was drawn taller than the screen and dropped) — your 3440x1440 is in that set. v2.0.13 fixes it (#1603, #1611). If it is still worth a second data point, I can now check the Insert menu itself here on v2.0.13 — same driver build `0x6802006`, `language.txt` = `fr`, but Bazzite/Fedora 45 against your CachyOS, so a different Fontconfig set. Say the word and I will post what the menu looks like.
Commenting is not possible because the repository is archived.
No milestone
No assignees
1 participant
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#1279
No description provided.