mirror of
https://github.com/Droid-Deck/DroidDeck.git
synced 2026-11-11 02:51:10 +00:00
main
249
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
3c96df4ab1 |
feat(ubisoft): Ubisoft Connect store with native sign-in, library, downloads and launch (#2322)
* feat(ubisoft): sign in to Ubisoft Connect and list the owned library * feat(ubisoft): download games natively through Demux and Ubisoft's CDN * fix(ubisoft): show the owned games on the store page * fix(ctl): reach the agent bridge by broadcast when the shell has no content command * feat(ubisoft): run Ubisoft games in one prefix with Ubisoft Connect installed and the game registered * feat(ubisoft): launch games through a native stand-in for Ubisoft Connect's local service * feat(ubisoft): document the launcher pipes, log why owned games have no download, drop the installer after extraction * feat(ubisoft): Steam-owned Ubisoft games install through Steam, and the launch session carries the game's application id * feat(ubisoft): answer Denuvo activations through Ubisoft's activation service and log unanswered pipe traffic * feat(ubisoft): report installed chunks to the game and skip add-ons the account does not own * fix(ubisoft): the overlay stays off, Ubisoft's install steps pick Windows components, and shared-prefix games keep their own settings * fix(ubisoft): write the manifest's registry values, and pick the game's exe over Ubisoft's installer stubs * fix(ubisoft): stream download slices, guard the launch hook, and keep per-game components in the shared prefix * fix(ubisoft): direct launches in the shared prefix keep their own game id * ci(ubisoft): build the launcher service after the prepared components are verified * fix(ubisoft): verify reused files, drop syncs from a signed-out account, and clear activation requests before launch * fix(ubisoft): fetch again a reused file whose slices cannot be checked |
||
|
|
d8ed02f2cf |
feat: EA store with sign-in, library, native downloads, updates and launch without the EA app (#2259)
* docs: research and plan for EA and Ubisoft stores * feat(ea): EA store with sign-in, library, native downloads, updates and launch without the EA app * perf(ea): fetch large archive records as parallel ranges * fix(ea): register game display names * fix(ea): license legacy EA Core games and harden the LSX endpoint * fix(ea): run legacy Origin SDK games with a stand-in Origin process * fix(ea): trust only the prepared game on LSX and stop stale library syncs * fix(ea): close LSX sessions on stop and drop clients that never hand-shake * fix(ea): require every hashed field before licensing or caching a probe * fix(ea): trust one LSX session per launch * fix(ea): serialize the library cache write with sign-out and rerun a skipped sync * fix(ea): hand off library sync requests under one lock * fix(ea): clear the sign-in before invalidating the library * fix(ea): serialize sign-out with token refresh and with the library cache * fix(ea): LSX trusts only verified peers, new launch closes old sessions, exit stops its own game * fix(ea): LSX hides profile and presence from unverified peers * fix(ea): LSX handshake has a fixed deadline and untrusted sessions yield their slot * fix(ea): LSX never registers a client after its listener was stopped * fix(ea): LSX evicts each untrusted session at most once * fix(ea): LSX admission and eviction share one lock and keep the cap * fix(ea): LSX trust promotion excludes eviction * fix(ea): LSX launch generation guards restarts and drops results after shutdown * fix(ea): LSX publishes launch state under the admission lock and tags accepts by generation * fix(ea): LSX restarts rebind its listener and promotion checks the launch generation * fix(ea): record why EA refuses a game licence in the store log * chore(ea): log owned offers and the full licence refusal * chore(ea): log the account's entitlements when no game licence is granted * chore(ea): log legacy entitlements when no game licence is granted * chore(ea): log only the refused game's own entitlements * fix(ea): skip trial launchers flagged 1 and license games whose LSX peer Android cannot name |
||
|
|
aa1984bb94 |
docs: DroidDeck 0.7.1 release notes (#2399)
* docs: DroidDeck 0.7.1 release notes * docs: add #2392 to 0.7.1 notes |
||
|
|
6b110581ac |
fix(gog): install scripts' support files reach the prefix (#2294)
* fix(gog): install scripts' support files reach the prefix
A goggame-<id>.script can copy files into the prefix with supportData
actions: default INI files, Plugins.txt and other settings that mods such
as one-click editions need. Only setRegistry actions were applied, so
those games started without their configuration and ran as the base game.
droiddeck-store-launch now applies supportData after the registry, once
per script revision: copies from {app} and {supportDir} into {userdocs}
and {localappdata}, matching paths without regard to case. Links are
copied as links, paths outside those folders are refused, and existing
files are replaced only when the action asks for it.
* Keep GOG support data copies inside the game and prefix folders
* Copy linked GOG support sources as links and keep a player's own links
|
||
|
|
b7b96875a1 |
docs: DroidDeck 0.7.0 release notes (#2170)
* docs: DroidDeck 0.7.0 release notes * docs: add 0.7.0 release note media * docs: drop the 30 second summary from the 0.7.0 notes * docs: add the dual-screen Dashboard shots to the 0.7.0 notes * docs: show the Dashboard as one stacked dual-screen image * docs: add the swap screens GIF to the 0.7.0 notes * docs: swap in the new Syncthing screenshot * docs: add the HUD dock GIF to the 0.7.0 notes * docs: add the Game Jolt screenshot to the 0.7.0 notes * docs: show the full screen in the HUD dock GIF * docs: merge the GPU bullets, add the no proprietary components line, put images above their bullets * docs: add the 0.7.0 APK download button to the release notes * docs: add the first-time contributors to the 0.7.0 notes * docs: add KeegantheVeganat0r as a first-time contributor * docs: add the shared Steam libraries screenshot to the 0.7.0 notes * docs: rewrite the shared Steam libraries bullet and move it up * docs: add the Mali support photo to the 0.7.0 notes * docs: center 0.7.0 release media * docs: credit The412Banner for Mali support in 0.7.0 notes * docs: add the KDE desktop GIF to the 0.7.0 notes * docs: add the desktop and swapped game clips to the 0.7.0 notes * docs: use the Duo photo for the swapped screens * docs: replace the swap screens GIF with the Duo recording * docs: drop the swap screens GIF * docs: keep a blank line before each release image * docs: tweak 0.7.0 release notes * docs: move smaller 0.7.0 items to improvements * docs: fold the bottom-screen HUD into the Strip HUD bullet * docs: pair the swap screens and KDE desktop media * docs: move Game Jolt and Syncthing up in 0.7.0 features * docs: put the swap screens and KDE desktop cluster after Mali in 0.7.0 features * docs: reword shared Steam libraries and reorder KDE desktop bullet * docs: add recent merged PRs to the 0.7.0 notes * docs: auto component updates follow DroidDeck-Proton only * docs: add input profiles, low-RAM memory, driver Auto and other recent changes to the 0.7.0 notes * docs: add the second-screen layout editor to the 0.7.0 controller profiles notes * docs: refresh the 0.7.0 pull request and contributor counts, mention controller profiles in the summary * docs: 0.7.0 notes add the latest fixes and the DroidDeck-Proton, DD-Turnip and component changes Adds the user-visible pull requests merged after the last refresh (Library sort, runtime pack update, desktop app launches, GitHub AppImage variant, DroidDeck-Proton default, component auto-update cleanup, UBWC and FEX preset settings, controller navigation) and a section for what shipped in DroidDeck-Proton 11-11.10 to 11-12.3, DD-Turnip 0.4.0 and DroidDeck-Components since 0.6.9. --------- Co-authored-by: maxjivi05 <maxjividen@gmail.com> |
||
|
|
d74575ed7f |
fix(components): DXVK Auto on Adreno 6xx keeps DroidDeck-Proton on DXVK-gplasync 2.7.1 (#2226)
* fix(components): DXVK Auto on Adreno 6xx keeps DroidDeck-Proton on DXVK-gplasync 2.7.1 * fix(components): DXVK Auto says so when the pinned DXVK could not be installed * fix(components): a DXVK the player picked is shown as their choice, not a failed pinned install |
||
|
|
11218f0b24 |
perf(hud): reduce Strip rendering cost with bitmap graph and logo (#2235)
perf(hud): rasterize Strip graph and logo separately Replace PR2194's whole-View software layer with a hardware-accelerated Strip that rasterizes its graph and logo into small reusable bitmaps. Keep the 66 ms graph invalidation cap, clear stale graph pixels, and refresh cached logo colours when the theme changes. Include the comparison method and six sanitized benchmark samples. With matched Steam navigation, the hybrid averaged 12.2% less UI-thread CPU and 34.0% lower draw p95 than the PR2194 software path. App-process CPU averaged 5.9% lower in this run; whole-device and battery savings are not established. Current-build physical flicker confirmation is recorded separately from timing validation. Validation: all 12 DroidDeckHudPanelTest checks passed; comparison APK built and six alternating device samples completed with matched input counts, no focus loss, thermal status 0, and no frame metric report drops. |
||
|
|
22a675a664 |
Unify controller and screen input profiles for game and desktop sessions (#1439)
## Problem and intent Desktop sessions need configurable mouse, keyboard and application actions from a controller. On dual-screen devices, a lower-screen trackpad may already handle the pointer, leaving the physical controls available for other assignments. This PR gives physical controllers and local touch controls a shared profile/action model instead of separate configuration paths. This follows the centralization direction discussed in [#1202](https://github.com/Droid-Deck/DroidDeck/pull/1202#issuecomment-6299647180) and addresses the controller-input portion of #860 and #1356. Those discussions are context, **not prior maintainer approval** of this implementation. I would appreciate architectural feedback and guidance on splitting or coordinating this work if that would make review easier. ## Profiles and configuration - Controller stays within the existing Setup tabs. Game and Desktop each have a default-profile selector, followed by one profile list and device settings. - Named profiles reference three independently reusable parts: Physical controller, Main screen and Second screen. Layout geometry and action bindings are stored separately. Profiles can share physical controls while assigning different touch actions. - The session menu selects a complete profile, or expands to mix the three parts. A mixed selection can be saved as a new profile; Game and Desktop retain separate selections. - Both screens use the same full-size editor, with add, move, resize, snapping, undo and shared properties. The main-screen editor has movable, collapsible tools and is transparent above a running session. When editing the secondary display, its entire area is the canvas and the main display hosts tools/properties. - The old fixed gamepad, fixed Deck controls and separate Screen keys editor are replaced with editable presets and the shared renderer. Existing positions, bindings, shapes, symbols, imported images and toggle behavior migrate; legacy Screen keys become additional profiles without replacing the user's selected profile. Migration retains a backup before removing old preferences. - Saved layouts have thumbnails and screen targeting. Actions include compatible native output/remapping, keys/combinations, mouse buttons, pointer movement, vertical/horizontal scrolling, directional keys, existing menu/keyboard commands, and disabled. Buttons can use symbols, shapes and toggle behavior. ## Architecture and latency ```mermaid flowchart LR Library[Profiles + reusable layouts and bindings] --> Router[InputRouter] Physical[Physical controller adapters] --> Router Touch[Main + secondary InputSurfaceView] --> Sources[Owned pad / Deck sources] Sources --> Router BLE[Steam Controller BLE adapter] --> Router Router --> Native[Existing controller publication] Native --> Steam[Steam Input / guest controller] Router --> Held[Shared key and mouse ownership] Held --> Guest[Existing guest input outputs] Router --> UI[Existing menu / keyboard hosts] ``` Bindings resolve when the profile changes, outside event dispatch. Native forwarding has no additional frame/timer queue; identity routes reuse existing state/reports. Only synthesized continuous stick pointer/scroll motion uses a frame callback. One source releasing a key/button does not release another source's hold. Menu, profile, suspension and removal transitions release old outputs and gate held controls until neutral. Steam continues to own game-specific mappings and action sets. Steam Mobile Touch and VR retain their specialized paths. Raw device adapters remain responsible for transport/calibration and must join routing before publishing consumed controls; this does not claim that every adapter has been unified. Historical Thor measurements on the native Game path found kernel-event-to-guest-observer upper-bound medians of **3.061 ms baseline versus 2.999–3.403 ms candidate**, with a subsequent installed-APK check at **3.039 ms / 300 matched edges**. These are relative software-path measurements, not button-to-photon latency. Some tails increased, simultaneous BLE contention remains unmeasured, and **this UI revision has not had a new latency measurement**. The previous cursor fix changed visual update intervals from roughly 33.3 ms to 16.7 ms without changing sensitivity or adding smoothing. [Full design, migration and boundaries](https://github.com/Delete228/DroidDeck/blob/codex/unified-controller-input/docs/development/unified-input-proposal.md). ## Validation Updated through upstream 542bbf89c; current PR head |
||
|
|
aba55031c3 | perf: answer chown and bound thermal paths through the proot fast path (#2203) | ||
|
|
18c7d56409 | fix: Auto components update only DroidDeck-Proton and delete old builds (#2193) | ||
|
|
066834d17d | feat: compress idle game memory before low-RAM devices run out (#2187) | ||
|
|
08526f8283 | Preserve second-screen state when refreshing input profiles | ||
|
|
f44826ae3a | Merge main and retain unified input behavior | ||
|
|
31b8adbb55 | Guard shared input slots and mouse backend transitions | ||
|
|
a81da1e476 |
feat(components): Auto updates for FEX, DXVK and VKD3D-Proton (#2156)
* feat(components): Auto updates for FEX, DXVK and VKD3D-Proton Each component gets an Auto or Manual mode on the Default Components page. Auto installs the newest DroidDeck-Components nightly into every Proton that ships the component, matching each Proton's ARM64EC or x64 flavour, keeps the current and replaced builds, and removes older builds it downloaded. A game that ran on the previous build and exits within 30 seconds twice on the new one rolls the line back; the failed build is skipped until a newer one is published. Existing manual choices keep that component on Manual, and DXVK stays on Manual while a GPU rule pins its version. * fix(components): Auto notes per line, Original label and first-update rollback Boot history on the Original is recorded before the first update so that update can roll back, rollback notes stay with their own component, the Original shows by name, and new Protons get the current build even when no newer one is published. * fix(components): Auto owns only its own downloads and follows in-place Proton updates Auto deletes only builds it downloaded, re-swaps a Proton whose version changed under an existing choice, reports a missing nightly listing as a failed check, writes its state atomically so the page can read it without waiting on a download, and words the rollback and download messages to match what it does. * fix(components): Auto keeps a rollback and reads updated Protons' own files After a rollback only a build newer than every rejected one is taken, so an older build still listed in the nightly cannot replace the restored one. Flavour detection treats a choice saved for an older Proton version as not applied, so a Proton Steam updated in place is read from its own files and re-swapped. A failed state rename falls back to a direct write and is logged. * fix(components): Keep the last good Auto state when a save fails * fix(components): Serialise Auto state reads and writes * Install the Linux runtime by itself on first launch The runtime auto-update skipped devices with no runtime, so FEX, Proton, DXVK and VKD3D waited for the first Steam launch to install it. Claim a first install when the device never had a runtime, on a usable network, outside battery saver and with a supported GPU, and check Proton as soon as the runtime is ready. A runtime the user removed stays removed. * fix(components): Check components as soon as Proton is installed The Auto check stamped its hourly timer even when no Proton was installed yet, so a fresh device waited an hour after Proton arrived. Skip the stamp until a Proton exists and run the check right after a Proton install finishes. * fix(components): Apply stored builds on every check and retry unfinished rollbacks A held or failed download no longer skips applying the stored build or stamps the hourly timer. Stored builds are applied on every check, so a new Proton is reconciled inside the hour, and a check requested while one runs is queued. A rollback that could not restore or swap a Proton is retried and reported only once it finishes. Removing the runtime marks it as seen so it is not installed again, and the failed-save test skips where the process can still write read-only files. * fix(components): Keep rollback restores pending until applied and save state on failure * fix(components): Hold newer builds until a pending rollback is applied * fix(components): Drop pending restores for removed Protons * fix(components): Never auto-install a non-ARM64X build over a Proton's own ARM64X DXVK or VKD3D * fix(components): Read probe archives outside the lock and block auto updates while the original build is unknown * fix(components): Require ARM64X when any Proton on the line needs it, and before each swap |
||
|
|
915f373d82 |
Harden input migration and session lifecycle
Keep migration binding IDs stable, preserve unreadable libraries before recovery, and retain forward-version protection. Release keyboard owners on focus loss, handle unavailable settings displays, and allow controller confirmation or cancellation after physical key capture. Stop BLE routing and publication synchronously before asynchronous disconnect. Add regression coverage and record local and Thor validation. |
||
|
|
7b7722bd25 | Preserve replacement session Deck input routing | ||
|
|
63004567fd | Unify configurable control surfaces and profile management | ||
|
|
ba5876bf6d |
Merge latest upstream main before Controller UI integration
# Conflicts: # app/src/main/java/com/droiddeck/launcher/SessionActivity.kt # app/src/main/java/com/droiddeck/launcher/input/OnScreenControls.kt # app/src/main/java/com/droiddeck/launcher/input/PadBridge.java # app/src/main/java/com/droiddeck/launcher/ui/DeckControlsPanel.kt # app/src/test/java/com/droiddeck/launcher/input/PadBridgeQamTest.kt |
||
|
+1 |
3733c50902 |
feat: non-Adreno graphics stack (Venus, open driver pairs, gamescope patches) (#2029)
* Retain compositor resources when GPU completion is unconfirmed * Stop quarantined GPU callers before retries and mapped writes * Support Android hardware-buffer presentation over Wayland * Support PowerVR swapchains and linear image imports in Gamescope * Bundle verified PowerVR graphics components through existing build preparation * Detect and select the system Vulkan backend on PowerVR * Apply PowerVR Steam and game compatibility during normal launches * Show PowerVR support through existing driver and component controls * Update existing hardware guidance for system Vulkan support * Import the shared system Vulkan readiness check * Discover and propagate the actual PowerVR render node * Prune obsolete PowerVR runtimes after guest processes exit * Retain external DMA-BUF ownership after GPU quarantine * Name the PowerVR HAL selection explicitly * Isolate component UI tests from application startup * Cover the inherited FEX preset in PowerVR profile tests * Log test worker failures for CI diagnosis * Remove temporary test logging after diagnostic CI * Prefer system dependencies for the Android Vulkan loader * Capture raw stderr before test worker termination * Remove the temporary test worker crash probe * Import pinned DXVK recipe prerequisite from PowerVR PR570 Copy only the standalone build recipe, source pin, BC-format prerequisite and presentation-sync patch/check from wallentx/DroidDeck at |
||
|
|
6a681bcbc2 |
docs: clarify DX12 budget consumers and physical limits (#2148)
* docs: clarify DX12 budget consumers and physical limits * docs: record controlled Thor gameplay limits |
||
|
|
cd452e2b60 |
fix: upload GOG cloud saves in Galaxy's gzip + metadata format (#1952)
fix: upload GOG cloud saves in Galaxy's gzip format |
||
|
|
9d2580d502 |
perf: reclaim launcher memory earlier under pressure (#2138)
* perf: reclaim launcher memory under system pressure * docs: record Caravan save-load OOM with spare swap * fix: wait for completed reclaim before increasing backoff |
||
|
|
d64205ba5b |
fix: report Vulkan memory budgets without rejecting allocations (#2014)
Extend the VRAM setting to Vulkan memory-budget reports for DXVK and D3D12 while preserving real heap capacity and allocation results, removing the hard rejection that caused game crashes in FIT and Discord tests. |
||
|
|
7a78d2b66b |
fix(agent): secure and refresh unrooted log exports (#2131)
## Summary - Keep raw diagnostic staging in private cache and give each exported archive a unique request directory. - Remove that request directory after the CLI pull, including failed transfers. - Replace files from the previous extracted snapshot while preserving unrelated destination files. - Document that the old rooted-device fallback is not scrubbed. Follow-up to #2061. The refreshed export tests now cover independent archive outputs and stale snapshot replacement. ## Validation - `wsl python3 -m unittest tools.tests.test_droiddeckctl` — 49 passed. - `:app:testDebugUnitTest -x buildVkBridgeServer --tests com.droiddeck.launcher.session.SessionLogShareZipTest.anArchiveCanBeWrittenOutsideTheShareFolder` — passed. - `git diff --check` — passed. |
||
|
|
285ff7956b | test: cover independent agent log exports | ||
|
|
64f114c96f | fix: detect graphics capabilities and drop redundant title overrides | ||
|
|
718712eb01 | fix: secure and refresh unrooted log exports | ||
|
|
2fb066507a |
fix(droiddeckctl): logs latest works without root
`logs latest` pulled the session folder under getFilesDir(), which adb cannot read on an unrooted device, so it always failed with "Permission denied" and droiddeck-scenario kept no logs for failed runs. The agent bridge gets a `logs` method that writes the Share logs archive to the app's external files folder (agent-logs/), and droiddeckctl pulls that zip and unpacks it into the destination with the session's files at the top, as before. Builds without the method still get the old pull. |
||
|
|
7053058db6 | Harden enhanced diagnostics collection and sharing | ||
|
|
5614bd5d5a | Add enhanced one-session diagnostic bundles | ||
|
|
e72cddccd9 |
perf(steam): decode requested appinfo records only
Avoid decoding every app when Start without Steam resolves one game launch. Use wanted-app selection in the single-game helpers while keeping the existing field decoder and full-reader default for bulk callers. Track partial coverage separately from complete results, share one immutable byte snapshot for incremental queries, and keep timestamp invalidation and warm hits. Preserve the last valid duplicate record and release the raw snapshot after a full decode. Add format/cache/structural-budget and launch-resolution regressions, reuse the existing binary fixture encoder, and document the host-only performance scope. |
||
|
|
e879375ca4 |
fix: upscale game buffers before native-resolution composition (#1367)
* fix: upscale game buffers before native-resolution composition * fix: drop an added code comment from the effects source draw * fix: effects source keeps pillarboxed games and near-full source rectangles * fix: a larger opaque draw above keeps the full composition path --------- Co-authored-by: maxjivi05 <maxjividen@gmail.com> |
||
|
|
68b0396dfe | Merge upstream PC input and dual-screen updates | ||
|
|
0110dc3c0f |
fix: a GOG install launches the game, not its config tool (#1644)
Blood Omen ships dxconfig.exe beside kain.exe and the shortcut pointed at the config tool: pickExe kept the first .exe the folder listing returned when no title match was found. Read the game's play task from GOG's own goggame-<id>.info manifest first - a primary game task, or a primary launcher task for launcher games, and the product's manifest ahead of any other goggame-*.info - then the product's temp_executable; without either, rank the folder's exes so a word of the title wins, config and tool names lose, and depth then size break the remaining ties. GOG's galaxy_*.exe support installer is not the game either. The Witcher: Enhanced Edition ships galaxy_the_witcher_enhanced_edition_2.1.0.15.exe beside launcher.exe, and its build metadata names that file as the product's temp executable, so launching it starts a 32-bit installer that stops at "Path not found" under ARM64 FEX - the same dialog as the setup stub #1174 removed. Play tasks, the hint and the name search skip it. Fixes #680 Fixes #694 Only a primary launcher task counts as a launch task: GOG files the configuration tool beside a game as a non-primary launcher, so it now falls through to the executable search instead of becoming the game. The temp_executable hint is matched by basename with either separator and must resolve inside the install folder, so a nested galaxy_*.exe is skipped too and a hint cannot point outside the game. GOG runs a task from the working directory it declares, and from the install root when it declares none. That directory now reaches the sidecar and the shortcut's Start In: a game in a subfolder (System/witcher.exe) starts where GOG starts it instead of in System/, where it cannot find its Data folder. |
||
|
|
45fb017496 | perf(steam): batch compatibility mapping updates (#1755) | ||
|
|
a2a05ebc5b | fix: preserve the runtime PATH when overriding guest binaries (#1826) | ||
|
|
ad0d39f457 | fix(quest): gamescope no longer aborts at start with vk.WaitSemaphores -13 (#1938) | ||
|
|
8e480d0e84 |
feat(droiddeckctl): thermal and wait cool
Nothing in droiddeckctl reported temperature, so a before/after comparison could start one run hot and the next cold. `thermal` reads the battery temperature from dumpsys battery, the thermal status from dumpsys thermalservice, and each CPU policy's scaling_max_freq against cpuinfo_max_freq (capped when lower), all readable over plain adb. `wait cool --below <C>` polls it every 10 s until the battery is under that temperature, or exits 5 at --timeout. |
||
|
|
0cc187025f | fix: read installed depots from completed manifest names too | ||
|
|
4e571f1f99 | fix(quest): answer denied KGSL timestamp reads so Steam starts on Quest 3 | ||
|
|
3a4c6a4a7a | fix: DNS gateway pick and public fallback slot, drop reference to an unshipped script | ||
|
|
34a1cbbead | fix: keep PRoot out of the APK, VPN DNS first, bridge failure exits, HUD polling stays on | ||
|
|
f05e0df39e | Merge remote-tracking branch 'origin/main' into review/malibridge-1950 | ||
|
|
cdde9d3390 | fix: a GOG game whose installer cannot run gets its install registry (#2022) | ||
|
|
3583643a11 | feat: Add the Game Jolt store (#1986) | ||
|
|
2fdc8b0841 | docs: preserve unrelated settings when recovering guest PATH | ||
|
|
8171bf20fd | Merge latest origin/main and resolve conflicts | ||
|
|
99dce74b09 | fix: address maintainer review (restore README, revert version bump) | ||
|
|
40dfcd94f9 |
fix(game-env): DOOM (2016) keeps the swapchain image count it asks for (#1987)
DOOM (2016) asks for exactly two swapchain images and stops with "FATAL ERROR: getSwapchainImagesKHR failed with error (VK_SUCCESS)" when it gets more. Every game launch gets GAMESCOPE_WSI_MIN_IMAGE_COUNT=8 and GAMESCOPE_WSI_ENSURE_MIN_IMAGE_COUNT=1, so gamescope's WSI layer gave it 8 images (3 with only the count removed) and the game crashed on start. When DOOMx64vk.exe sits beside the launched program (DOOMx64.exe for a GOG install, or DOOMx64vk.exe), both variables are removed and vk_x11_strict_image_count=true is set, the option Mesa's driconf gives the game. Other games keep the defaults. A per-game value in the environment editor still wins. Tested on an AYANEO Pocket FIT with DroidDeck 0.6.9 and the same values set per game: the swapchain gets 2 images and the game reaches its main menu at 60 fps; before, it crashed on every launch. |