Repository navigation
fix(vk): handle RDNA 1 wave32 and wave64 shader stages - #1657
Merged
Merged
Conversation
brunobaccari
marked this pull request as ready for review
November 10, 2026 12:39
brunobaccari
force-pushed
the
fix/rdna1-wave32-wave64
branch
from
November 10, 2026 12:51
cbc2269 to
afa5ea9
Compare
Use the actual Vulkan shader stage to choose the guest-warp profile, preserving 32-lane compute pinning and partitioning unpinned 64-lane graphics waves. Enable the AMD proprietary fragment shuffle broadcast fallback, retain the quad path and include the subgroup profile in translated-program cache keys. Based on Robin Irfan's AMD subgroup work in b17e373 and butterfly correction in 5c2004f, including the fragment workaround attributed there to Lichii NotRexed#273. Assisted-by: OpenAI Codex Co-Authored-By: Codex <codex@openai.com> Co-Authored-By: Robin Irfan <87516521+rakefire-impala@users.noreply.github.com>
brunobaccari
force-pushed
the
fix/rdna1-wave32-wave64
branch
from
November 11, 2026 01:07
afa5ea9 to
363038d
Compare
Contributor
Author
|
@hckrman101 rebased |
NotRexed
pushed a commit
that referenced
this pull request
Nov 11, 2026
🤖 I have created a release *beep* *boop* --- ## [2.1.0-rc.2](v2.1.0-rc.1...v2.1.0-rc.2) (2026-11-11) ### Features * **vk:** GPU- and settings-independent pipeline state list (HKSTATE2) ([#2046](#2046)) ([667ba79](667ba79)) ### Bug Fixes * **vk:** handle RDNA 1 wave32 and wave64 shader stages ([#1657](#1657)) ([fc8c858](fc8c858)) ### Build System * **release:** a contributed pipeline list from an AMD card with FSR 4, 1273 pipelines ([#2044](#2044)) ([f8efe05](f8efe05)) ### Continuous Integration * **release:** list every commit type in the changelog ([#2055](#2055)) ([737e4f5](737e4f5)) ### Tests * **display:** the startup fixture stubs driver_cache_room (main is red since [#2033](#2033)) ([#2051](#2051)) ([d47206e](d47206e)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
madebyjordan
added a commit
to madebyjordan/Longshot
that referenced
this pull request
Nov 11, 2026
48 commits of Hookshot's, by hand (docs/merging-hookshot.md): its release candidates (release-please, Promote, the nightly), the update track, the pipeline state list in separate sources and its version 2 records, one start-up bar. 17 files clashed: .github/workflows/release.yml: Hookshot's new workflow, still started by hand only (dev's side: no push starts it). With no push, release-please opens no release pull request and makes no release candidate; by hand it is now Promote, which stops when there is no published release candidate. Its publish job names LongshotBuilder.exe. .github/workflows/windows-builder.yml, linux-appimage.yml: Hookshot's new jobs (called by the Release workflow, the nightly, SHA256SUMS, the build provenance) with Longshot's file names, and the checks still on pushes to dev. Nothing is published that was not before: the Windows release job stays on only with vars.CI_RELEASE_WINDOWS = 'true' (as it was here; Hookshot made it on unless 'false'), the Linux one only with vars.CI_RELEASE_LINUX = 'true', and the nightly of a push to main is behind a new switch, vars.CI_RELEASE_NIGHTLY = 'true', in both (without it the setup of a run that is no release installs the latest release, as before, not a nightly that is not there). CHANGELOG.md: kept dev's (Longshot's releases; nx2/version.py reads its unreleased heading). Hookshot's, which release-please now writes, is kept as docs/hookshot-changelog.md, and rule 4 says so. readme.md: kept dev's. docs/hookshot-readme.md is brought up to Hookshot's readme at 6cecdd1, links as seen from docs/. docs/development.md: Hookshot's new text on the list's sources, with Longshot's paragraph on lists/pipeline_states.bin. nx2/make_game.py, tests/test_pipeline_states.py: Hookshot's ship_state_list (the sources in assets/pipeline_states/ merged). Longshot's lists/pipeline_states.bin still ships in the merged list's place when the source has one; the test checks both. Hookshot's sources (12800 pipelines, among them 1273 from this PC, Hookshot NotRexed#2044) hold 1646 of its 2648. gpu/vk/vk_draw.cpp: Hookshot's version 2 state list. The player's own list and the version 1 one kept beside it go through cache_path() (RX_VK_CACHE_DIR), in state_open_locked, state_list_prepare and prepare_guess; read-only (RX_VK_CACHE_READONLY), state_open_locked neither moves a version 1 list aside nor starts a new one. state_list_noted is set as before, and prepare_guess leaves the predicted pipelines out of the one bar's total when a state list will leave them out. predict_run takes Hookshot's thread count and still counts its workers (prep_workers_n). gpu/vk/vk_main.cpp: Hookshot's one bar (StartupState::whole) and Longshot's diagnostics lines, both. gpu/vk/vk_menu.cpp: Hookshot's version line that shrinks to fit, saying Longshot. host/hos_update.c, builder/linux/linux_update.py, builder/setup/setup.c: Hookshot's update tracks, asking Longshot's releases (madebyjordan/longshot) under Longshot's name. The setup keeps --engine --tag and the 127.0.0.1 exception. builder/HookshotBuilder/Updater.cs: Hookshot's tracks (TrackOf, Newer, Target, LatestTag(track)) on Longshot's repository, beside the launcher's list of releases, now ReleaseList() (Hookshot's Releases is the API's address). UpdateFolder's "exact" is Hookshot's "named": the release its tag names. builder/HookshotBuilder/MainWindow.xaml: kept dev's (the launcher's window; Hookshot's change was to the installer page it no longer has). Hookshot's Update track choice is a row of the menu's build options, under a heading of its own (Updates). builder/HookshotBuilder/MainWindow.xaml.cs: Hookshot's Track, TrackChanged and OlderOk on the build's own screen (RefreshMode, StartBuild); its old launch page's ShowLauncher and buttons are not brought back. Launcher.cs: back from a build's choices, the launcher's latest is the latest release again, whatever track was asked for there. Not in a clash, by hand: scripts/release_files.sh and scripts/release_upload.sh name LongshotBuilder.exe and Longshot-*-Windows-x64.zip; the Windows workflow's provenance step names them too; linux_update.py's list_url asks Longshot's releases. Tests adjusted to Longshot's code: test_update_tracks.py expects Longshot's addresses; test_pipeline_notes_open.py expects the version 1 list through cache_path(). docs/merging-hookshot.md and lists/README.md say which pipeline list ships. Checked on Windows: python -I -B tests/run_all.py fails on the six checks that fail on Hookshot's main (6cecdd1) here (test_nup_paths, test_nup_read_name, test_fpx_sticky, test_precompile_compute_guard, test_recorder_sync, test_make_game_ngx) and no other (326 pass, 27 skipped); scripts/build-vk.ps1 builds and links hookshot_vk.dll, in a work folder of its own; the builder compiles with no warnings; tests/builder_launcher (27 + 25 + 27 checks) and its rig pass. The workflows were not run. Not played yet: the first start after it prepares every shader again (Hookshot's translator stamp changed, and its AMD subgroup sizes with it, NotRexed#1657), on one bar. Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Unpinned SPIR-V 1.6 stages may use a subgroup wider than the device's default, so the translator must use the supported maximum to preserve 32-lane guest warp boundaries. Quad-only fragment operations must also keep their existing path instead of inheriting AMD's fragment shuffle broadcast workaround.
Rebased onto
f8efe057(currentmain). Main has since incorporated the stage-specific profiles and AMD fragment workaround from #1507; this PR preserves that implementation and carries only the remaining changes:subgroup_maxfor the unpinned base profile, including devices whose default is 32 but maximum is 64. Existing compute and graphics stage pinning stays intact.RX_VK_WARP64in the cache stamp, since an explicit override can select a different graphics profile even when the base width is unchanged. This invalidates incompatible translated-program caches.RUN_ALL_ARGSdeclarations, with 11 isolated device/override scenarios. Preserve the existing AMD fragment test.The subgroup rule follows the Vulkan specification. Device selection remains capability-based, covering the RX 5500 XT / RX 5600 XT / RX 5700 XT family without a name allowlist.
Validation for this rebase:
f8efe057with the same toolchain: FPX, recorder sync, display startup fixture, precompile compute guard, NUP symlink privileges and missing zstd for bake_ds.--stricton final commit363038d: 4 passed, 0 failed, 0 skipped.git diff --checkpassed. The six rebase conflicts are resolved. No new game binary or hardware run is claimed for this rebased revision.Related: #1001; also relevant to the broader #996, #1000 and #995 trackers, without claiming to resolve them in full. Memory retention, pipeline scheduling, resolution, image quality and frame generation are outside this PR.
Historical hardware context: an earlier local experimental build showed 20 FPS in Link's house on the RX 5500 XT at 2560x1440, 100% scale, without upscaling or frame generation. The screenshot below is not a benchmark of this rebased revision. RX 5600 XT, RX 5700 XT and Linux/RADV still need hardware testing.
Credits: follows Robin Irfan's AMD warp work and butterfly/quad correction, including the Lichii #273 fragment workaround credited to jonmakegames. This PR carries only the remaining subgroup/fragment pieces needed on current main.