build(linux): the AppImage's renderer is compiled by the player's build, as with DLSS and FSR 4; no prebuilt renderer #574
No reviewers
Labels
No labels
area/accessibility
area/audio
area/input
area/install
area/menu
area/renderer
area/saves
area/upscaling
beanstalk: approved @ 1697603
beanstalk: approved @ 2c5a62e
beanstalk: approved @ 4fd82b7
beanstalk: approved @ 64d6d09
beanstalk: approved @ 6f91fae
beanstalk: approved @ 70a78f9
beanstalk: approved @ 8d361dc
beanstalk: approved @ 9d8356e
beanstalk: approved @ abf2227
beanstalk: approved @ d82f202
beanstalk: approved @ e5f1e40
beanstalk: approved @ ee8ab5f
ci: approved
good first issue
gpu/amd
gpu/igpu
gpu/intel
gpu/nvidia
help wanted
kind
bug
kind
chore
kind
docs
kind
feature
kind
performance
kind
question
needs measurements
platform/linux
platform/macos
platform/steam-deck
platform/windows
preview
priority
critical
priority
high
priority
low
regression
status
blocked
status
confirmed
status
duplicate
status
invalid
status
needs-info
status
wontfix
testing wanted
ci: approved
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
MagicBeanDev/Longshot!574
Loading…
Reference in a new issue
No description provided.
Delete branch "HumanBean/Longshot:build/no-prebuilt-renderer"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Why
Most players build with DLSS or FSR 4, and those builds compile the Vulkan renderer on their own PC anyway, so the Linux AppImage's prebuilt
longshot_vk.soreaches few players. It also needed AVX2: a Linux CPU without it was refused outright (the no-AVX2 Xeon crash thatnx2/build.pycites as issue 363). With this PR every build compiles the renderer, so there is one build path to test, the play profile (#569) and native CPU builds (#524) reach every Linux player, and CPUs without AVX2 can build and play.What changed
scripts/linux/appimage.shno longer has the "Vulkan back end, built here once" step. That step held the x86-64-v3RX_VK_ONLYbuild and the play-profile selection and xz unpack that #569 added. The script also no longer copies$VKintousr/lib/longshot, and the image has nousr/lib/longshotfolder. It still carriesgpu/vk,gpu/compat,gpu/third_party, imgui/zstd/fonts/fidelityfx/zbic,assets/(withassets/profiles/) and thework/loop for developer profiles. The comments now match.builder/linux/AppRun: noLIB=and noexport LONGSHOT_VK_PREBUILT=....nx2/build.py:prebuilt_renderer()is gone, and so are the "as built" branch, the prebuilt copy into the game folder and the prebuilt file in the dry run's missing list.build_vkis nowa.standalone and <headers>. The missing-headers message no longer suggestsLONGSHOT_VK_PREBUILT, and the header, FSR and fonts comments are updated.nx2/make_game.py:check_cpu()and both calls to it are gone (the AVX2 refusal from the no-AVX2 Xeon crash thatnx2/build.pycites as issue 363), along with the--fsr"not the prebuilt one" message.check_linux_prerequisites()now always checks the renderer headers (plus FSR's when--fsr) and always needsclang++. A stale comment inngx_script()is corrected..forgejo/workflows/build-linux.yml: the AppImage step no longer compiles the renderer, so a new steplongshot_vk.so (build check)compiles it the way a player's build does. It picks the play profile the same waymake_game.py'svk_profile_fordoes (the checkout'swork/longshot_vk.profdata, else the committed one). It builds intobuild-linux/vk-work, so the PR object cache works as before, and usesRX_MARCH=x86-64-v3so cache keys don't depend on the runner's CPU. The FSR 4 check still copies that work folder and now builds with the sameRX_VK_PGO, so onlyvk_fsr4.cpprecompiles. Both checks are gated byRELEASE_CHECKEDlike other build checks that ship nothing. Header comments are updated, andrelease.ymlhas a one-line comment fix.scripts/linux/check_player_build.sh: the plain dry run (no DLSS or FSR) from the extracted image must now printthe Vulkan back end: Vulkan ...and must not print FSR 4. The image must not carryusr/lib/longshot/longshot_vk.so. The FSR variant still has to saywith AMD FSR 4.tests/test_appimage_player_build.py: the dry runs no longer use a stub prebuilt. The plain run must compile the back end. A newtest_no_prebuilt_rendererchecks that nothing innx2/,scripts/,builder/or the workflows sets or readsLONGSHOT_VK_PREBUILT, that AppRun names no.so, thatappimage.shbuilds no renderer and has nousr/lib/longshot, and that it still copiesgpu/vkandassets/. A newtest_the_image_carries_the_renderer_sources_and_assetschecks the packaged tree.tests/test_cpu_target.py: theAppImageCheckclass becomesNoCpuRefusal(nocheck_cpu, no "no AVX2" inmake_game.py). The appimage assertion now says the AppImage builds no fixed-level renderer.tests/test_linux_preflight.py: the three prebuilt tests become "every build needs the renderer headers / clang++" tests. ALONGSHOT_VK_PREBUILTleft in the shell is ignored. The NGX and FSR tests still expect SPIR-V to be missing. The bundled-FFmpeg test gets headers instead of a prebuilt.check_cpuis dropped from the patched names.tests/test_missing_nup.py:check_cpudropped from the patched names.tests/test_vk_pgo.pycheck_release: the AppImage builds no renderer and carriesassets/. CI's build check takes the profile the waymake_game.pydoes.tests/test_make_game_ngx.py,tests/test_appimage_licenses.py: theprebuilt_rendererassertions become "always compiled" assertions.tests/test_windows_on_linux.py: the release-checked gated steps now include the new build check.docs/development.md(prerequisites paragraph, theLONGSHOT_VK_PREBUILTswitch row removed, the play-profile paragraph),README.md(AVX2 no longer required, the FSR 4 line),docs/common-issues.md(the AVX2 requirement),docs/releases.md(what the AppImage carries),assets/profiles/README.md.Flags and settings
LONGSHOT_VK_PREBUILT(removed)longshot_vk.soto use in place of compiling one (the AppImage's)Measurements
Not measured. This PR changes the build, not the renderer, and nothing was built or run here (no build and no tests on this PC). The cost is extra first-build time for Linux players without DLSS or FSR 4, mostly Steam Deck owners, who now compile the renderer: about 35 of Longshot's own files plus Eden, sirit, ImGui and zstd. An estimate, not a measurement: about 3 minutes for one compile job from scratch on a Ryzen 9 7900X, and on a Steam Deck's 4 cores probably 1 to 3 extra minutes on the first build. Later builds reuse the object cache. This needs a measured Steam Deck first build, main vs this PR (request to open).
main:
7ff5256e(2026-11-14)this PR: build/no-prebuilt-renderer @
ad867049, on main4e80ea63(after #569 merged)Hardware: not measured
Scene: none (build time)
Method: not measured
How to reproduce: on a Steam Deck, a first build from a clean work folder with each AppImage (main's, this PR's), without DLSS or FSR 4, timed from start to "game ready"; at least 2 runs each
7ff5256e15a016eeTesting
Tested: Nothing was run here: no tests, no build and no game, by the owner's rule for this PC. CI runs the checks. I read the changed code paths and every check that reads them (
grepforLONGSHOT_VK_PREBUILT,prebuilt_renderer,check_cpu,longshot_vk.soacross scripts, tests, workflows and docs).Not tested:
check_player_build.shcover that once it runs.Needs other testers:
the Vulkan back end: Vulkan ...),longshot_vk.soin the game folder and the game starting (request to open)Screenshots
Nothing on screen
Risk and rollback
check_linux_prerequisites()before the game is read.Reviewer notes
nx2/build.pyaroundbuild_vk,nx2/make_game.pycheck_linux_prerequisites(), and the new CI step in.forgejo/workflows/build-linux.yml. That step takes over the renderer compile and profile selection that used to live inappimage.sh, so the object cache and the FSR 4 check keep working.appimage.sh's compiler sanity check still compiles a test program with-march=x86-64-v3. It runs on the machine that builds the AppImage, not on players' PCs.docs/design.mdand thedocs/tested-configurations.mdrows.Issues
See the no-AVX2 Xeon crash that
nx2/build.pycites as issue 363 (the AVX2 refusal this removes along with its cause)Checklist
For everyone
type(scope): description).main(4e80ea63, with #569).python -I -B tests/run_all.pyrun and passing (not run here: left to CI).third_party/untouched (a new folder with aPROVENANCE.mdinstead).If applicable
Assisted-by:/Co-Authored-By:trailers.tests/that reads changed source updated in this PR, not weakened.🤖 Generated with Claude Code
15a016ee3bad867049bdRebased onto main
4e80ea63now that #569 is merged: the diff is this PR's own commit only (ad867049, no conflicts). Description: the stacking note removed, the commit lines updated. Nothing run here.ad867049bdd2e02d55edRebased onto main
414f56e2(after #569 and #573 merged), no conflicts. Nothing run here.Rebased onto main
b2911d33(after #572, #372 and #404), no conflicts. Nothing run here.d2e02d55ed295bf6e6adWIP: build(linux): the AppImage's renderer is compiled by the player's build, as with DLSS and FSR 4; no prebuilt rendererto build(linux): the AppImage's renderer is compiled by the player's build, as with DLSS and FSR 4; no prebuilt renderer