From 8448c823c000d494480bde677f76c60969805723 Mon Sep 17 00:00:00 2001 From: xXJSONDeruloXx Date: Sat, 19 Jul 2025 09:02:50 -0400 Subject: move env vars into lsfg script, getting sunset in lsfg-vk config soon --- py_modules/lsfg_vk/config_schema.py | 34 ++++++++++++++++++++-------------- py_modules/lsfg_vk/configuration.py | 15 ++++++++++----- py_modules/lsfg_vk/plugin.py | 8 ++++---- 3 files changed, 34 insertions(+), 23 deletions(-) (limited to 'py_modules') diff --git a/py_modules/lsfg_vk/config_schema.py b/py_modules/lsfg_vk/config_schema.py index 45afc2d..54e414f 100644 --- a/py_modules/lsfg_vk/config_schema.py +++ b/py_modules/lsfg_vk/config_schema.py @@ -1,7 +1,7 @@ """ Centralized configuration schema for lsfg-vk. -This module defines the complete configuration structure for TOML-based config files, including: +This module defines the complete configuration structure for lsfg-vk, managing TOML-based config files, including: - Field definitions with types, defaults, and metadata - TOML generation logic - Validation rules @@ -76,15 +76,18 @@ CONFIG_SCHEMA: Dict[str, ConfigField] = { "experimental_present_mode": ConfigField( name="experimental_present_mode", field_type=ConfigFieldType.STRING, - default="", - description="experimental: override vulkan present mode (empty/fifo/vsync/mailbox/immediate)" + default="fifo", + description="experimental: override vulkan present mode (fifo/mailbox/immediate)" ), - - "experimental_fps_limit": ConfigField( - name="experimental_fps_limit", +} + +# Fields that should ONLY be in the lsfg script, not in TOML config +SCRIPT_ONLY_FIELDS = { + "dxvk_frame_rate": ConfigField( + name="dxvk_frame_rate", field_type=ConfigFieldType.INTEGER, default=0, - description="experimental: base framerate cap for dxvk games, before frame multiplier (0 = disabled)" + description="base framerate cap for DirectX games, before frame multiplier (0 = disabled, requires game re-launch)" ), "enable_wow64": ConfigField( @@ -102,6 +105,9 @@ CONFIG_SCHEMA: Dict[str, ConfigField] = { ) } +# Complete configuration schema (TOML + script-only fields) +COMPLETE_CONFIG_SCHEMA = {**CONFIG_SCHEMA, **SCRIPT_ONLY_FIELDS} + class ConfigurationData(TypedDict): """Type-safe configuration data structure""" @@ -111,7 +117,7 @@ class ConfigurationData(TypedDict): performance_mode: bool hdr_mode: bool experimental_present_mode: str - experimental_fps_limit: int + dxvk_frame_rate: int enable_wow64: bool disable_steamdeck_mode: bool @@ -124,7 +130,7 @@ class ConfigurationManager: """Get default configuration values""" return cast(ConfigurationData, { field.name: field.default - for field in CONFIG_SCHEMA.values() + for field in COMPLETE_CONFIG_SCHEMA.values() }) @staticmethod @@ -158,7 +164,7 @@ class ConfigurationManager: @staticmethod def get_field_names() -> list[str]: """Get ordered list of configuration field names""" - return list(CONFIG_SCHEMA.keys()) + return list(COMPLETE_CONFIG_SCHEMA.keys()) @staticmethod def get_field_types() -> Dict[str, ConfigFieldType]: @@ -173,7 +179,7 @@ class ConfigurationManager: """Validate and convert configuration data""" validated = {} - for field_name, field_def in CONFIG_SCHEMA.items(): + for field_name, field_def in COMPLETE_CONFIG_SCHEMA.items(): value = config.get(field_name, field_def.default) # Type validation and conversion @@ -312,8 +318,8 @@ class ConfigurationManager: @staticmethod def create_config_from_args(dll: str, multiplier: int, flow_scale: float, performance_mode: bool, hdr_mode: bool, - experimental_present_mode: str = "", - experimental_fps_limit: int = 0, + experimental_present_mode: str = "fifo", + dxvk_frame_rate: int = 0, enable_wow64: bool = False, disable_steamdeck_mode: bool = False) -> ConfigurationData: """Create configuration from individual arguments""" @@ -324,7 +330,7 @@ class ConfigurationManager: "performance_mode": performance_mode, "hdr_mode": hdr_mode, "experimental_present_mode": experimental_present_mode, - "experimental_fps_limit": experimental_fps_limit, + "dxvk_frame_rate": dxvk_frame_rate, "enable_wow64": enable_wow64, "disable_steamdeck_mode": disable_steamdeck_mode }) diff --git a/py_modules/lsfg_vk/configuration.py b/py_modules/lsfg_vk/configuration.py index 1952a49..1336f21 100644 --- a/py_modules/lsfg_vk/configuration.py +++ b/py_modules/lsfg_vk/configuration.py @@ -67,8 +67,8 @@ class ConfigurationService(BaseService): def update_config(self, dll: str, multiplier: int, flow_scale: float, performance_mode: bool, hdr_mode: bool, - experimental_present_mode: str = "", - experimental_fps_limit: int = 0, + experimental_present_mode: str = "fifo", + dxvk_frame_rate: int = 0, enable_wow64: bool = False, disable_steamdeck_mode: bool = False) -> ConfigurationResponse: """Update TOML configuration @@ -80,7 +80,7 @@ class ConfigurationService(BaseService): performance_mode: Whether to enable performance mode hdr_mode: Whether to enable HDR mode experimental_present_mode: Experimental Vulkan present mode override - experimental_fps_limit: Experimental FPS limit for DXVK games + dxvk_frame_rate: Frame rate cap for DirectX games, before frame multiplier (0 = disabled) enable_wow64: Whether to enable PROTON_USE_WOW64=1 for 32-bit games disable_steamdeck_mode: Whether to disable Steam Deck mode @@ -91,7 +91,7 @@ class ConfigurationService(BaseService): # Create configuration from individual arguments config = ConfigurationManager.create_config_from_args( dll, multiplier, flow_scale, performance_mode, hdr_mode, - experimental_present_mode, experimental_fps_limit, enable_wow64, disable_steamdeck_mode + experimental_present_mode, dxvk_frame_rate, enable_wow64, disable_steamdeck_mode ) # Generate TOML content using centralized manager @@ -112,7 +112,7 @@ class ConfigurationService(BaseService): f"dll='{dll}', multiplier={multiplier}, flow_scale={flow_scale}, " f"performance_mode={performance_mode}, hdr_mode={hdr_mode}, " f"experimental_present_mode='{experimental_present_mode}', " - f"experimental_fps_limit={experimental_fps_limit}, " + f"dxvk_frame_rate={dxvk_frame_rate}, " f"enable_wow64={enable_wow64}, disable_steamdeck_mode={disable_steamdeck_mode}") return { @@ -248,6 +248,11 @@ class ConfigurationService(BaseService): if config.get("disable_steamdeck_mode", False): lines.append("export SteamDeck=0") + # Add DXVK_FRAME_RATE if dxvk_frame_rate is set + dxvk_frame_rate = config.get("dxvk_frame_rate", 0) + if dxvk_frame_rate > 0: + lines.append(f"export DXVK_FRAME_RATE={dxvk_frame_rate}") + # Always add the LSFG_PROCESS export lines.append("export LSFG_PROCESS=decky-lsfg-vk") diff --git a/py_modules/lsfg_vk/plugin.py b/py_modules/lsfg_vk/plugin.py index 4e19a2a..ae5c8e7 100644 --- a/py_modules/lsfg_vk/plugin.py +++ b/py_modules/lsfg_vk/plugin.py @@ -186,8 +186,8 @@ class Plugin: async def update_lsfg_config(self, dll: str, multiplier: int, flow_scale: float, performance_mode: bool, hdr_mode: bool, - experimental_present_mode: str = "", - experimental_fps_limit: int = 0, + experimental_present_mode: str = "fifo", + dxvk_frame_rate: int = 0, enable_wow64: bool = False, disable_steamdeck_mode: bool = False) -> Dict[str, Any]: """Update lsfg TOML configuration @@ -199,7 +199,7 @@ class Plugin: performance_mode: Whether to enable performance mode hdr_mode: Whether to enable HDR mode experimental_present_mode: Experimental Vulkan present mode override - experimental_fps_limit: Experimental FPS limit for DXVK games + dxvk_frame_rate: Frame rate cap for DirectX games, before frame multiplier (0 = disabled) enable_wow64: Whether to enable PROTON_USE_WOW64=1 for 32-bit games disable_steamdeck_mode: Whether to disable Steam Deck mode @@ -208,7 +208,7 @@ class Plugin: """ return self.configuration_service.update_config( dll, multiplier, flow_scale, performance_mode, hdr_mode, - experimental_present_mode, experimental_fps_limit, enable_wow64, disable_steamdeck_mode + experimental_present_mode, dxvk_frame_rate, enable_wow64, disable_steamdeck_mode ) async def update_dll_path(self, dll_path: str) -> Dict[str, Any]: -- cgit v1.2.3