mirror of
https://github.com/Droid-Deck/DroidDeck.git
synced 2026-10-14 19:27:09 -04:00
feat: add persistent per-game compatibility profiles (#449)
* feat(profiles): add persistent per-game compatibility profiles * fix(profiles): show Windows component overrides Include per-game Windows component selections in the resolved profile summary so the session overlay marks those games as custom and shows the selected components. * fix(session): detect Proton games across runtime paths * fix(profiles): select the active Gamescope game * fix(profiles): improve per-game reset feedback * fix(profiles): align session components with game overrides * fix(session): prefer selected Steam game during refresh * fix(session): resume profile following when reopening games * chore: keep local dev testing outside the repository * test(session): remove local dev package path * fix(session): preserve profiles when refresh fails * fix(session): reject empty game profile reset scope * perf(session): cache drawer inventory by refresh revision * fix(profiles): align game presets and profile reset behavior * fix(profiles): preserve originals and normalize shortcut ids * fix(profiles): keep editor scope stable after rebase * fix(tests): host Compose tests in both build variants * fix(profiles): recover interrupted component selection saves --------- Co-authored-by: Kurt Himebauch <[email protected]>
This commit is contained in:
1 parent
78fcb60fd5
commit
435beb7f19
46 files changed
+3501
-150
No files matched your search
@@ -3,16 +3,52 @@
|
||||
Open **Games → Game environment**, directly below **FEX preset**, in Steam
|
||||
settings or the in-session drawer. Choose all Proton games, an installed game, or enter a Steam app ID. For a
|
||||
non-Steam shortcut, use its numeric `compatdata` directory ID (unsigned 32-bit).
|
||||
The drawer opens the editor on its selected game profile. That editing scope stays
|
||||
fixed if Steam's selected game changes in the background; use the editor's own
|
||||
profile picker to switch deliberately.
|
||||
Changes apply on the next game launch, including when Steam is already running.
|
||||
A running game must be restarted. Native Linux games and Steam itself are outside
|
||||
this editor's scope.
|
||||
|
||||
The Components page also has a **Configuration** dropdown. **Default profile** owns the
|
||||
default Proton and FEX preset. An installed game can inherit those defaults or
|
||||
choose its own Proton and FEX preset. Proton choices are applied through Steam's
|
||||
per-app compatibility mapping, including while Steam is running when its live
|
||||
compatibility helper is attached. A newly installed Proton that the running
|
||||
client has not discovered yet applies when Steam next starts.
|
||||
|
||||
Each game can also override the stored FEX, DXVK and VKD3D-Proton package used
|
||||
by its selected Proton. The launch wrapper applies that game’s component files
|
||||
immediately before Proton starts, removes managed files that are absent from the
|
||||
selection, and restores Default component choices for the next game. **Use
|
||||
Default** removes the game override. Component packages must first be downloaded
|
||||
or imported on the Default Components page.
|
||||
|
||||
Before publishing game component choices, DroidDeck preserves each Proton build's
|
||||
original components, including an explicitly empty bundle when a component is not
|
||||
shipped. Those restore choices remain after the last override is cleared. A missing
|
||||
or unreadable original is an error, not permission to delete the component's files.
|
||||
If an original is missing after a build may already have used a game override,
|
||||
DroidDeck refuses to capture those potentially modified files as originals.
|
||||
|
||||
Component selections and the launch table are saved with a recovery record.
|
||||
Publishing the launch table commits the selection: if the app stops before its
|
||||
settings file is updated, the next component read recovers the matching settings.
|
||||
An interruption before publication leaves the previous selections in place.
|
||||
Unused staged packages are removed only after both files have been saved.
|
||||
|
||||
**Reset game profile** removes all overrides owned by the selected game: Proton,
|
||||
FEX preset, component packages, environment variables, texture filtering and
|
||||
Windows components. The game then inherits the Default profile again.
|
||||
|
||||
The order is inherited process environment, selected FEX preset and built-in
|
||||
settings, shared edits, then game-specific edits. Editor entries therefore win
|
||||
over matching Steam launch-option variables. **Remove** explicitly unsets a
|
||||
variable. **Restore inherited settings** removes the override. **Reset this
|
||||
profile** clears only that profile's overrides. Values are literal strings, with
|
||||
no shell expansion; quotes are only needed when the consuming program expects them.
|
||||
variable. **Restore inherited settings** removes the override. The environment
|
||||
editor's **Clear environment overrides** action clears only the selected
|
||||
environment entries and is intentionally narrower than **Reset game profile**.
|
||||
Values are literal strings, with no shell expansion; quotes are only needed when
|
||||
the consuming program expects them.
|
||||
|
||||
## Defaults and available suggestions
|
||||
|
||||
@@ -71,14 +107,18 @@ wrapper and adopted third-party Proton wrappers execute `droiddeck-game-env`,
|
||||
which reads that snapshot for each real game launch and uses `execvpe` to start
|
||||
Proton. Probe prefix `compatdata/0` and non-launch verbs are unchanged. Malformed
|
||||
configuration falls back to the inherited environment without evaluating its
|
||||
contents. Signed non-Steam prefix IDs are normalized to unsigned IDs.
|
||||
contents. Both component and environment selection normalize signed non-Steam
|
||||
prefix IDs to unsigned IDs.
|
||||
|
||||
The published file also carries a `dxvkConfig` string the app's own file never
|
||||
has: the session menu's texture filtering (Effects page; `core/TextureFiltering`)
|
||||
as `d3d9/d3d11.samplerAnisotropy` and `samplerLodBias` options. The launcher
|
||||
appends it to `DXVK_CONFIG` after the profiles, so a user's own `DXVK_CONFIG`
|
||||
entry keeps its options. "Auto" texture sharpness is `-log2(panel / session)`,
|
||||
derived when the session is sized, and applies from the next launch.
|
||||
The published file also carries generated `dxvkConfig` and `dxvkConfigGames`
|
||||
values the app's own file never has. The session menu's texture filtering
|
||||
(`core/TextureFiltering`) becomes `d3d9/d3d11.samplerAnisotropy` and
|
||||
`samplerLodBias` options. Default choices apply to games without overrides; each
|
||||
game can save either choice independently or return it to **Use Default**. The
|
||||
launcher appends the selected options to `DXVK_CONFIG` after the environment
|
||||
profile, so a user's own `DXVK_CONFIG` entry keeps its options. "Auto" texture
|
||||
sharpness is `-log2(panel / session)`, derived when the session is sized, and
|
||||
applies from the next launch.
|
||||
|
||||
Upstream references: [VKD3D capability parsing](https://github.com/HansKristian-Work/vkd3d-proton/blob/master/libs/vkd3d/device.c),
|
||||
[VKD3D options](https://github.com/HansKristian-Work/vkd3d-proton#environment-variables),
|
||||
|
||||
Reference in new issue
Block a user