Feature request: compute fallback for GPUs without VK_EXT_mesh_shader (GTX 1070 Ti / Pascal) #454

Closed
opened 2026-11-08 03:33:06 +00:00 by napr0 · 3 comments
napr0 commented 2026-11-08 03:33:06 +00:00 (Migrated from github.com)

Builder version

https://github.com/NotRexed/Hookshot/releases/tag/device-lost-fix

How you built

Hookshot Builder app (Windows)

Game files given to it

A .nup

The error

Hi! I’m testing Hookshot on Windows with a GeForce GTX 1070 Ti (Pascal).

Hookshot’s current requirements mention Vulkan 1.3 with mesh shader support. The GTX 1070 Ti does not support VK_EXT_mesh_shader. The Hookshot app does not show its build number; the latest public release I found is “GPU crash fix, faster builds” (commit ff10b2d).

On the same PC, I tested Lichii build 117 (commit 89440b2), downloaded from the release below. This build’s compute fallback fixed the missing walls and foliage on my GTX 1070 Ti, and the game now renders correctly.

Lichii build 117 release: https://github.com/zortos293/Lichii/releases/tag/build-117

Would it be possible to adapt a similar fallback for eligible task/mesh draws in Hookshot’s Vulkan backend (gpu/vk/)? I understand Hookshot has a different renderer, so this would likely require adapting the implementation rather than copying a binary or a single file.

I can test a Hookshot build on my GTX 1070 Ti and provide screenshots or logs.

Reference implementation: https://github.com/zortos293/Lichii/pull/569

Visual Studio or Build Tools version, and Windows SDK version

No response

Operating system and free space on the output drive

Windows 11 Pro 26H2 (OS build 26300.9711); 109.54 GB free on C:

Before you send it

  • I'm on the newest release, or it still fails on it.
  • I searched the open issues for this error.
  • I'm not attaching game files or anything built from them.
### Builder version https://github.com/NotRexed/Hookshot/releases/tag/device-lost-fix ### How you built Hookshot Builder app (Windows) ### Game files given to it A .nup ### The error ```text Hi! I’m testing Hookshot on Windows with a GeForce GTX 1070 Ti (Pascal). Hookshot’s current requirements mention Vulkan 1.3 with mesh shader support. The GTX 1070 Ti does not support VK_EXT_mesh_shader. The Hookshot app does not show its build number; the latest public release I found is “GPU crash fix, faster builds” (commit ff10b2d). On the same PC, I tested Lichii build 117 (commit 89440b2), downloaded from the release below. This build’s compute fallback fixed the missing walls and foliage on my GTX 1070 Ti, and the game now renders correctly. Lichii build 117 release: https://github.com/zortos293/Lichii/releases/tag/build-117 Would it be possible to adapt a similar fallback for eligible task/mesh draws in Hookshot’s Vulkan backend (gpu/vk/)? I understand Hookshot has a different renderer, so this would likely require adapting the implementation rather than copying a binary or a single file. I can test a Hookshot build on my GTX 1070 Ti and provide screenshots or logs. Reference implementation: https://github.com/zortos293/Lichii/pull/569 ``` ### Visual Studio or Build Tools version, and Windows SDK version _No response_ ### Operating system and free space on the output drive Windows 11 Pro 26H2 (OS build 26300.9711); 109.54 GB free on C: ### Before you send it - [x] I'm on the newest release, or it still fails on it. - [x] I searched the open issues for this error. - [x] I'm not attaching game files or anything built from them.
zhiying-326 commented 2026-11-08 09:53:48 +00:00 (Migrated from github.com)

A second hardware family with the same blocker: Intel Gen12 iGPUs, where the whole 3D scene is missing

VK_EXT_mesh_shader starts at Intel Gen12.5 (Xe-HPG / Arc). Every Intel iGPU before it — Tiger Lake, Alder Lake, Raptor Lake, Gen12.0 and Gen12.2 — lacks it, so this is the same blocker as the GTX 1070 Ti on a much larger install base.

System. Intel Iris Xe Graphics (Raptor Lake-U, gfx12.2), Mesa 26.2.6 (ANV), Vulkan 1.4.354; i5-1345U, 30 GB, Arch Linux, kernel 7.2.14, niri/Wayland. Release compile-retry (fa22c2d), Linux AppImage, built from my own copy of the game (0400486024DEC000 / v131072 / e0f3ccfa) in 25 minutes, 0 failures.

Device line.

vk: Intel(R) Iris(R) Xe Graphics (RPL-U), Vulkan 1.4, driver 0x6802006; mesh shaders no, host memory import yes, pipeline libraries yes

What works — everything that is not a mesh draw. The title screen (UI only) is 16-17 draws a frame; the intro movie decodes AV1 on libavcodec and draws as a quad (2 draws), with the upscaler network on the linear path as intended on a card without VK_KHR_cooperative_matrix; the shell holds 57-60 fps with 5-7 ms of GPU time a frame. 14179 programs prepared in 55.5 s, 21718 translated, 10 failed — all of them a network left out on this card.

What does not — the 3D scene:

vk: a draw without a program (frame 11154);
    its code: 1:c2a9f81ce89730ad 6:2c56dc1006942f74 7:6942222ec7d54fe9

Stage 6 is task and stage 7 mesh, so this is a mesh program and the draw is skipped. All 12 log lines of this message carry frame 11154, the first frame in the whole run that asks for a mesh draw — the frame where the movie ends and the world should appear. The screen stays black from there.

Why the framing matters. This issue reads like missing foliage or walls. On this title, without a fallback the entire 3D scene is absent: before frame 11154 the run never drew more than 17 objects a frame (title UI, movie quad), so what can be seen is exactly the part that does not use the mesh stages. The build's own census says this is not an edge case — of 14179 programs, 1286 use task or mesh (1155 with stages 1/6/7 and 131 with 1/7).

I can build and run any branch on this machine and report logs, RX_VK_DRAW_STATS output and frame captures, or A/B a build carrying the fallback against this one. Writing the fallback itself is beyond me.

Filtered hookshot_log.txt lines (paths shortened to <user>):

[hos host] vk: Intel(R) Iris(R) Xe Graphics (RPL-U), Vulkan 1.4, driver 0x6802006; mesh shaders no, host memory import yes, pipeline libraries yes
[hos host] vk: prepared 14179 shader programs (21714 new, 0 failed, 0 stage libraries) in 55.5 s
[hos Presentation Thread] vk: 4 background workers (shader translation, pipelines)
[hos MovieOperateThread] video: AV1 decoder ready (1920x1080)
[hos Presentation Thread] vk: program e409733c45530d75 not translated: a network left out on this card
[hos Presentation Thread] vk: program 8306877b7dc8784b not translated: a network left out on this card
[hos Presentation Thread] vk: program de3c10dba4ff39d3 not translated: a network left out on this card
[hos Presentation Thread] vk: program a41c78faa56ccf7d not translated: a network left out on this card
[hos Presentation Thread] vk: program e959b9b1451491c0 not translated: a network left out on this card
[hos Presentation Thread] vk: program 5a4d7378db437fed not translated: a network left out on this card
[hos Presentation Thread] vk: program 8b73eaee02efc5e4 not translated: a network left out on this card
[hos Presentation Thread] vk: program 14140d4c1dbe754f not translated: a network left out on this card
[hos Presentation Thread] vk: program 4c2c129fe950b041 not translated: a network left out on this card
[hos Presentation Thread] vk: program 3f6f2b1d671badcd not translated: a network left out on this card

# the frames before the 3D scene (title UI, then the movie)
vk: 10320 presents, 60.1 fps; a frame: 2 draws (12 skipped), 2 dispatches, 3 passes, 14 barriers, 6 submits, GPU-bound wait 0.1 ms
vk: 10440 presents, 59.9 fps; a frame: 4 draws (12 skipped), 2 dispatches, 3 passes, 14 barriers, 6 submits, GPU-bound wait 0.1 ms
vk: 10560 presents, 60.0 fps; a frame: 6 draws (12 skipped), 2 dispatches, 3 passes, 14 barriers, 6 submits, GPU-bound wait 0.1 ms
vk: 10680 presents, 57.7 fps; a frame: 6 draws (12 skipped), 2 dispatches, 3 passes, 14 barriers, 6 submits, GPU-bound wait 0.1 ms

# the first mesh draw of the run
[hos Presentation Thread] vk: a draw without a program (frame 11154); its code: 1:c2a9f81ce89730ad 6:2c56dc1006942f74 7:6942222ec7d54fe9

# the 12 skips a frame are the upscaler dispatches, not the mesh draws
[hos Presentation Thread] vk: skips a frame by vk_draw.cpp line: 5007: 12.0

# last stats before the window closed
vk: 11040 presents, 53.3 fps; a frame: 6 draws (12 skipped), 2 dispatches, 3 passes, 14 barriers, 6 submits, GPU-bound wait 0.1 ms; 17 pipelines (527 ms), 21718 programs (10 failed)
vk: memory heaps: heap 0 (device): 37 blocks 2401 MB, 154 allocations 1889 MB; used 2596 of 17695 MB

Note on the two skip counters: skips a frame by vk_draw.cpp line: 5007 is vk_draw.cpp's compute-dispatch path (the failed upscaler networks, expected here), and it is present from the title screen on. The mesh skip is a different site, vk_draw.cpp:3954, and its log is capped at 12 lines, all at frame 11154 — which is also how the first mesh draw of the run can be dated.

### A second hardware family with the same blocker: Intel Gen12 iGPUs, where the whole 3D scene is missing `VK_EXT_mesh_shader` starts at Intel Gen12.5 (Xe-HPG / Arc). Every Intel iGPU before it — Tiger Lake, Alder Lake, Raptor Lake, Gen12.0 and Gen12.2 — lacks it, so this is the same blocker as the GTX 1070 Ti on a much larger install base. **System.** Intel Iris Xe Graphics (Raptor Lake-U, gfx12.2), Mesa 26.2.6 (ANV), Vulkan 1.4.354; i5-1345U, 30 GB, Arch Linux, kernel 7.2.14, niri/Wayland. Release `compile-retry` (fa22c2d), Linux AppImage, built from my own copy of the game (0400486024DEC000 / v131072 / e0f3ccfa) in 25 minutes, 0 failures. **Device line.** ``` vk: Intel(R) Iris(R) Xe Graphics (RPL-U), Vulkan 1.4, driver 0x6802006; mesh shaders no, host memory import yes, pipeline libraries yes ``` **What works** — everything that is not a mesh draw. The title screen (UI only) is 16-17 draws a frame; the intro movie decodes AV1 on libavcodec and draws as a quad (2 draws), with the upscaler network on the linear path as intended on a card without `VK_KHR_cooperative_matrix`; the shell holds 57-60 fps with 5-7 ms of GPU time a frame. 14179 programs prepared in 55.5 s, 21718 translated, 10 failed — all of them `a network left out on this card`. **What does not** — the 3D scene: ``` vk: a draw without a program (frame 11154); its code: 1:c2a9f81ce89730ad 6:2c56dc1006942f74 7:6942222ec7d54fe9 ``` Stage 6 is task and stage 7 mesh, so this is a mesh program and the draw is skipped. All 12 log lines of this message carry `frame 11154`, the first frame in the whole run that asks for a mesh draw — the frame where the movie ends and the world should appear. The screen stays black from there. **Why the framing matters.** This issue reads like missing foliage or walls. On this title, without a fallback the entire 3D scene is absent: before frame 11154 the run never drew more than 17 objects a frame (title UI, movie quad), so what can be seen is exactly the part that does not use the mesh stages. The build's own census says this is not an edge case — of 14179 programs, 1286 use task or mesh (1155 with stages 1/6/7 and 131 with 1/7). I can build and run any branch on this machine and report logs, `RX_VK_DRAW_STATS` output and frame captures, or A/B a build carrying the fallback against this one. Writing the fallback itself is beyond me. Filtered `hookshot_log.txt` lines (paths shortened to `<user>`): ``` [hos host] vk: Intel(R) Iris(R) Xe Graphics (RPL-U), Vulkan 1.4, driver 0x6802006; mesh shaders no, host memory import yes, pipeline libraries yes [hos host] vk: prepared 14179 shader programs (21714 new, 0 failed, 0 stage libraries) in 55.5 s [hos Presentation Thread] vk: 4 background workers (shader translation, pipelines) [hos MovieOperateThread] video: AV1 decoder ready (1920x1080) [hos Presentation Thread] vk: program e409733c45530d75 not translated: a network left out on this card [hos Presentation Thread] vk: program 8306877b7dc8784b not translated: a network left out on this card [hos Presentation Thread] vk: program de3c10dba4ff39d3 not translated: a network left out on this card [hos Presentation Thread] vk: program a41c78faa56ccf7d not translated: a network left out on this card [hos Presentation Thread] vk: program e959b9b1451491c0 not translated: a network left out on this card [hos Presentation Thread] vk: program 5a4d7378db437fed not translated: a network left out on this card [hos Presentation Thread] vk: program 8b73eaee02efc5e4 not translated: a network left out on this card [hos Presentation Thread] vk: program 14140d4c1dbe754f not translated: a network left out on this card [hos Presentation Thread] vk: program 4c2c129fe950b041 not translated: a network left out on this card [hos Presentation Thread] vk: program 3f6f2b1d671badcd not translated: a network left out on this card # the frames before the 3D scene (title UI, then the movie) vk: 10320 presents, 60.1 fps; a frame: 2 draws (12 skipped), 2 dispatches, 3 passes, 14 barriers, 6 submits, GPU-bound wait 0.1 ms vk: 10440 presents, 59.9 fps; a frame: 4 draws (12 skipped), 2 dispatches, 3 passes, 14 barriers, 6 submits, GPU-bound wait 0.1 ms vk: 10560 presents, 60.0 fps; a frame: 6 draws (12 skipped), 2 dispatches, 3 passes, 14 barriers, 6 submits, GPU-bound wait 0.1 ms vk: 10680 presents, 57.7 fps; a frame: 6 draws (12 skipped), 2 dispatches, 3 passes, 14 barriers, 6 submits, GPU-bound wait 0.1 ms # the first mesh draw of the run [hos Presentation Thread] vk: a draw without a program (frame 11154); its code: 1:c2a9f81ce89730ad 6:2c56dc1006942f74 7:6942222ec7d54fe9 # the 12 skips a frame are the upscaler dispatches, not the mesh draws [hos Presentation Thread] vk: skips a frame by vk_draw.cpp line: 5007: 12.0 # last stats before the window closed vk: 11040 presents, 53.3 fps; a frame: 6 draws (12 skipped), 2 dispatches, 3 passes, 14 barriers, 6 submits, GPU-bound wait 0.1 ms; 17 pipelines (527 ms), 21718 programs (10 failed) vk: memory heaps: heap 0 (device): 37 blocks 2401 MB, 154 allocations 1889 MB; used 2596 of 17695 MB ``` Note on the two skip counters: `skips a frame by vk_draw.cpp line: 5007` is `vk_draw.cpp`'s compute-dispatch path (the failed upscaler networks, expected here), and it is present from the title screen on. The mesh skip is a different site, `vk_draw.cpp:3954`, and its log is capped at 12 lines, all at `frame 11154` — which is also how the first mesh draw of the run can be dated.
Malokiro commented 2026-11-08 10:38:52 +00:00 (Migrated from github.com)

Same here: AMD RX 5500 XT 8 GB (RDNA1 / Navi 14) on CachyOS (Linux, Mesa/RADV).
vulkaninfo | grep -i mesh_shader returns nothing, so the card is in the
same situation

Same here: AMD RX 5500 XT 8 GB (RDNA1 / Navi 14) on CachyOS (Linux, Mesa/RADV). `vulkaninfo | grep -i mesh_shader` returns nothing, so the card is in the same situation
NotRexed commented 2026-11-09 05:49:09 +00:00 (Migrated from github.com)

Tracked in #1001, follow there. That issue collects every report of GPUs without mesh shaders, and this one is linked from it with its GPU, version and log details. v2.0.6 ships the compute fallback this issue asked for (PR #779); the tracker collects results on these cards. If it still happens on v2.0.6 (https://github.com/NotRexed/Hookshot/releases/tag/v2.0.6; Update next to Play in the launcher), please add a comment there with your hookshot_log.txt.

Tracked in #1001, follow there. That issue collects every report of GPUs without mesh shaders, and this one is linked from it with its GPU, version and log details. v2.0.6 ships the compute fallback this issue asked for (PR #779); the tracker collects results on these cards. If it still happens on v2.0.6 (https://github.com/NotRexed/Hookshot/releases/tag/v2.0.6; Update next to Play in the launcher), please add a comment there with your `hookshot_log.txt`.
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#454
No description provided.