|
11 | 11 | Paths, |
12 | 12 | gamemode_available, |
13 | 13 | gamescope_available, |
| 14 | + lsfg_vk_version, |
14 | 15 | mangohud_available, |
15 | 16 | obs_vkc_available, |
16 | 17 | vmtouch_available, |
|
23 | 24 | from bottles.backend.utils.display import DisplayUtils |
24 | 25 | from bottles.backend.utils.generic import detect_encoding, is_ntsync_available |
25 | 26 | from bottles.backend.utils.gpu import GPUUtils |
| 27 | +from bottles.backend.utils.lsfgvk import get_lsfg_vk_dll_path |
26 | 28 | from bottles.backend.utils.manager import ManagerUtils |
27 | 29 | from bottles.backend.utils.steam import SteamUtils |
28 | 30 | from bottles.backend.utils.terminal import TerminalUtils |
@@ -180,6 +182,57 @@ def apply_hdr_preferences(env: "WineEnv", params, gamescope_activated: bool) -> |
180 | 182 | env.add("ENABLE_GAMESCOPE_WSI", "1", override=True) |
181 | 183 |
|
182 | 184 |
|
| 185 | +def apply_lsfg_vk_preferences( |
| 186 | + env: "WineEnv", params, bottle_path: str, version: Optional[int] = None |
| 187 | +) -> None: |
| 188 | + if version is None: |
| 189 | + version = lsfg_vk_version |
| 190 | + |
| 191 | + if not getattr(params, "lsfg_vk", False): |
| 192 | + return |
| 193 | + |
| 194 | + dll = get_lsfg_vk_dll_path(bottle_path) |
| 195 | + try: |
| 196 | + multiplier = int(getattr(params, "lsfg_vk_multiplier", 2)) |
| 197 | + flow_scale = float(getattr(params, "lsfg_vk_flow_scale", 1.0)) |
| 198 | + except (TypeError, ValueError): |
| 199 | + multiplier = 0 |
| 200 | + flow_scale = 0 |
| 201 | + enabled = ( |
| 202 | + version in (1, 2) |
| 203 | + and os.path.isfile(dll) |
| 204 | + and os.access(dll, os.R_OK) |
| 205 | + and 2 <= multiplier <= 4 |
| 206 | + and 0.25 <= flow_scale <= 1.0 |
| 207 | + ) |
| 208 | + if not enabled: |
| 209 | + env.add("DISABLE_LSFG", "1", override=True) |
| 210 | + env.add("DISABLE_LSFGVK", "1", override=True) |
| 211 | + return |
| 212 | + |
| 213 | + multiplier = str(multiplier) |
| 214 | + flow_scale = str(flow_scale) |
| 215 | + performance = "1" if getattr(params, "lsfg_vk_performance_mode", False) else "0" |
| 216 | + |
| 217 | + if version == 2: |
| 218 | + env.add("DISABLE_LSFG", "1", override=True) |
| 219 | + env.remove("DISABLE_LSFGVK") |
| 220 | + env.add("LSFGVK_ENV", "1", override=True) |
| 221 | + env.add("LSFGVK_DLL_PATH", dll, override=True) |
| 222 | + env.add("LSFGVK_MULTIPLIER", multiplier, override=True) |
| 223 | + env.add("LSFGVK_FLOW_SCALE", flow_scale, override=True) |
| 224 | + env.add("LSFGVK_PERFORMANCE_MODE", performance, override=True) |
| 225 | + return |
| 226 | + |
| 227 | + env.remove("DISABLE_LSFG") |
| 228 | + env.add("DISABLE_LSFGVK", "1", override=True) |
| 229 | + env.add("LSFG_LEGACY", "1", override=True) |
| 230 | + env.add("LSFG_DLL_PATH", dll, override=True) |
| 231 | + env.add("LSFG_MULTIPLIER", multiplier, override=True) |
| 232 | + env.add("LSFG_FLOW_SCALE", flow_scale, override=True) |
| 233 | + env.add("LSFG_PERFORMANCE_MODE", performance, override=True) |
| 234 | + |
| 235 | + |
183 | 236 | def _needs_steam_virtual_gamepad_workaround(runner_name: Optional[str]) -> bool: |
184 | 237 | """Return True if the runner should force SteamVirtualGamepadInfo.""" |
185 | 238 |
|
@@ -505,6 +558,13 @@ def get_env( |
505 | 558 | env.add("VKBASALT_CONFIG_FILE", vkbasalt_conf_path) |
506 | 559 | env.add("ENABLE_VKBASALT", "1") |
507 | 560 |
|
| 561 | + apply_lsfg_vk_preferences( |
| 562 | + env, |
| 563 | + params, |
| 564 | + bottle, |
| 565 | + version=lsfg_vk_version if arch != "win32" and not self.minimal else 0, |
| 566 | + ) |
| 567 | + |
508 | 568 | # OBS Vulkan Capture environment variables |
509 | 569 | if params.obsvkc and not self.minimal: |
510 | 570 | env.add("OBS_VKCAPTURE", "1") |
|
0 commit comments