From c02343e68874efd57c2e312cb6b7e4f02222e43a Mon Sep 17 00:00:00 2001 From: xXJSONDeruloXx Date: Tue, 22 Jul 2025 11:11:44 -0400 Subject: add workaround env vars, rm old tests --- py_modules/lsfg_vk/config_schema.py | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) (limited to 'py_modules/lsfg_vk/config_schema.py') diff --git a/py_modules/lsfg_vk/config_schema.py b/py_modules/lsfg_vk/config_schema.py index c82d1d3..6a68db1 100644 --- a/py_modules/lsfg_vk/config_schema.py +++ b/py_modules/lsfg_vk/config_schema.py @@ -73,6 +73,20 @@ SCRIPT_ONLY_FIELDS = { field_type=ConfigFieldType.BOOLEAN, default=False, description="disable Steam Deck mode (unlocks hidden settings in some games)" + ), + + "mangohud_workaround": ConfigField( + name="mangohud_workaround", + field_type=ConfigFieldType.BOOLEAN, + default=False, + description="Enables a transparent mangohud overlay, sometimes fixes issues with 2X multiplier in game mode" + ), + + "disable_vkbasalt": ConfigField( + name="disable_vkbasalt", + field_type=ConfigFieldType.BOOLEAN, + default=False, + description="Disables vkBasalt layer which can conflict with LSFG (Reshade, some Decky plugins)" ) } @@ -91,6 +105,8 @@ class ConfigurationData(TypedDict): dxvk_frame_rate: int enable_wow64: bool disable_steamdeck_mode: bool + mangohud_workaround: bool + disable_vkbasalt: bool class ConfigurationManager: @@ -335,6 +351,10 @@ class ConfigurationManager: script_values["enable_wow64"] = value == "1" elif key == "SteamDeck": script_values["disable_steamdeck_mode"] = value == "0" + elif key == "MANGOHUD": + script_values["mangohud_workaround"] = value == "1" + elif key == "DISABLE_VKBASALT": + script_values["disable_vkbasalt"] = value == "1" except (ValueError, KeyError, IndexError) as e: # If parsing fails, log the error and return empty dict (will use defaults) @@ -368,7 +388,9 @@ class ConfigurationManager: experimental_present_mode: str = "fifo", dxvk_frame_rate: int = 0, enable_wow64: bool = False, - disable_steamdeck_mode: bool = False) -> ConfigurationData: + disable_steamdeck_mode: bool = False, + mangohud_workaround: bool = False, + disable_vkbasalt: bool = False) -> ConfigurationData: """Create configuration from individual arguments""" return cast(ConfigurationData, { "dll": dll, @@ -379,5 +401,7 @@ class ConfigurationManager: "experimental_present_mode": experimental_present_mode, "dxvk_frame_rate": dxvk_frame_rate, "enable_wow64": enable_wow64, - "disable_steamdeck_mode": disable_steamdeck_mode + "disable_steamdeck_mode": disable_steamdeck_mode, + "mangohud_workaround": mangohud_workaround, + "disable_vkbasalt": disable_vkbasalt }) -- cgit v1.2.3 From f8139896f2077a95a78a54c818637f78dd102de8 Mon Sep 17 00:00:00 2001 From: xXJSONDeruloXx Date: Tue, 22 Jul 2025 12:11:53 -0400 Subject: consolidate toml and script values --- py_modules/lsfg_vk/config_schema.py | 54 +++++++++++++------------------------ 1 file changed, 18 insertions(+), 36 deletions(-) (limited to 'py_modules/lsfg_vk/config_schema.py') diff --git a/py_modules/lsfg_vk/config_schema.py b/py_modules/lsfg_vk/config_schema.py index 6a68db1..eac5a91 100644 --- a/py_modules/lsfg_vk/config_schema.py +++ b/py_modules/lsfg_vk/config_schema.py @@ -52,42 +52,16 @@ CONFIG_SCHEMA["dll"] = ConfigField( description="specify where Lossless.dll is stored" ) -# Fields that should ONLY be in the lsfg script, not in TOML config +# Get script-only fields dynamically from shared config SCRIPT_ONLY_FIELDS = { - "dxvk_frame_rate": ConfigField( - name="dxvk_frame_rate", - field_type=ConfigFieldType.INTEGER, - default=0, - description="base framerate cap for DirectX games, before frame multiplier (0 = disabled, requires game re-launch)" - ), - - "enable_wow64": ConfigField( - name="enable_wow64", - field_type=ConfigFieldType.BOOLEAN, - default=False, - description="enable PROTON_USE_WOW64=1 for 32-bit games (use with ProtonGE to fix crashing)" - ), - - "disable_steamdeck_mode": ConfigField( - name="disable_steamdeck_mode", - field_type=ConfigFieldType.BOOLEAN, - default=False, - description="disable Steam Deck mode (unlocks hidden settings in some games)" - ), - - "mangohud_workaround": ConfigField( - name="mangohud_workaround", - field_type=ConfigFieldType.BOOLEAN, - default=False, - description="Enables a transparent mangohud overlay, sometimes fixes issues with 2X multiplier in game mode" - ), - - "disable_vkbasalt": ConfigField( - name="disable_vkbasalt", - field_type=ConfigFieldType.BOOLEAN, - default=False, - description="Disables vkBasalt layer which can conflict with LSFG (Reshade, some Decky plugins)" + field_name: ConfigField( + name=field_def["name"], + field_type=ConfigFieldType(field_def["fieldType"]), + default=field_def["default"], + description=field_def["description"] ) + for field_name, field_def in CONFIG_SCHEMA_DEF.items() + if field_def.get("location") == "script" } # Complete configuration schema (TOML + script-only fields) @@ -107,6 +81,8 @@ class ConfigurationData(TypedDict): disable_steamdeck_mode: bool mangohud_workaround: bool disable_vkbasalt: bool + foobar_toggle: bool + test_config_only: str class ConfigurationManager: @@ -355,6 +331,8 @@ class ConfigurationManager: script_values["mangohud_workaround"] = value == "1" elif key == "DISABLE_VKBASALT": script_values["disable_vkbasalt"] = value == "1" + elif key == "FOOBAR": + script_values["foobar_toggle"] = value == "1" except (ValueError, KeyError, IndexError) as e: # If parsing fails, log the error and return empty dict (will use defaults) @@ -390,7 +368,9 @@ class ConfigurationManager: enable_wow64: bool = False, disable_steamdeck_mode: bool = False, mangohud_workaround: bool = False, - disable_vkbasalt: bool = False) -> ConfigurationData: + disable_vkbasalt: bool = False, + foobar_toggle: bool = False, + test_config_only: str = "default_value") -> ConfigurationData: """Create configuration from individual arguments""" return cast(ConfigurationData, { "dll": dll, @@ -403,5 +383,7 @@ class ConfigurationManager: "enable_wow64": enable_wow64, "disable_steamdeck_mode": disable_steamdeck_mode, "mangohud_workaround": mangohud_workaround, - "disable_vkbasalt": disable_vkbasalt + "disable_vkbasalt": disable_vkbasalt, + "foobar_toggle": foobar_toggle, + "test_config_only": test_config_only }) -- cgit v1.2.3 From f8c09209513507ad9af7822c32119cf6d6fae0ac Mon Sep 17 00:00:00 2001 From: xXJSONDeruloXx Date: Tue, 22 Jul 2025 12:40:23 -0400 Subject: rm test config options --- py_modules/lsfg_vk/config_schema.py | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) (limited to 'py_modules/lsfg_vk/config_schema.py') diff --git a/py_modules/lsfg_vk/config_schema.py b/py_modules/lsfg_vk/config_schema.py index eac5a91..6728106 100644 --- a/py_modules/lsfg_vk/config_schema.py +++ b/py_modules/lsfg_vk/config_schema.py @@ -81,8 +81,6 @@ class ConfigurationData(TypedDict): disable_steamdeck_mode: bool mangohud_workaround: bool disable_vkbasalt: bool - foobar_toggle: bool - test_config_only: str class ConfigurationManager: @@ -331,8 +329,6 @@ class ConfigurationManager: script_values["mangohud_workaround"] = value == "1" elif key == "DISABLE_VKBASALT": script_values["disable_vkbasalt"] = value == "1" - elif key == "FOOBAR": - script_values["foobar_toggle"] = value == "1" except (ValueError, KeyError, IndexError) as e: # If parsing fails, log the error and return empty dict (will use defaults) @@ -368,9 +364,7 @@ class ConfigurationManager: enable_wow64: bool = False, disable_steamdeck_mode: bool = False, mangohud_workaround: bool = False, - disable_vkbasalt: bool = False, - foobar_toggle: bool = False, - test_config_only: str = "default_value") -> ConfigurationData: + disable_vkbasalt: bool = False) -> ConfigurationData: """Create configuration from individual arguments""" return cast(ConfigurationData, { "dll": dll, @@ -383,7 +377,5 @@ class ConfigurationManager: "enable_wow64": enable_wow64, "disable_steamdeck_mode": disable_steamdeck_mode, "mangohud_workaround": mangohud_workaround, - "disable_vkbasalt": disable_vkbasalt, - "foobar_toggle": foobar_toggle, - "test_config_only": test_config_only + "disable_vkbasalt": disable_vkbasalt }) -- cgit v1.2.3 From df0635f1bba611b8b44975057acd579102d209dd Mon Sep 17 00:00:00 2001 From: xXJSONDeruloXx Date: Tue, 22 Jul 2025 13:06:46 -0400 Subject: further automate population of hardcoded fields --- py_modules/lsfg_vk/config_schema.py | 64 +++++++------------------------------ 1 file changed, 11 insertions(+), 53 deletions(-) (limited to 'py_modules/lsfg_vk/config_schema.py') diff --git a/py_modules/lsfg_vk/config_schema.py b/py_modules/lsfg_vk/config_schema.py index 6728106..a7827ae 100644 --- a/py_modules/lsfg_vk/config_schema.py +++ b/py_modules/lsfg_vk/config_schema.py @@ -19,6 +19,9 @@ from pathlib import Path sys.path.insert(0, str(Path(__file__).parent.parent.parent)) from shared_config import CONFIG_SCHEMA_DEF, ConfigFieldType, get_field_names, get_defaults, get_field_types +# Import auto-generated configuration components +from .config_schema_generated import ConfigurationData, get_script_parsing_logic, get_script_generation_logic + @dataclass class ConfigField: @@ -68,19 +71,11 @@ SCRIPT_ONLY_FIELDS = { COMPLETE_CONFIG_SCHEMA = {**CONFIG_SCHEMA, **SCRIPT_ONLY_FIELDS} -class ConfigurationData(TypedDict): - """Type-safe configuration data structure""" - dll: str - multiplier: int - flow_scale: float - performance_mode: bool - hdr_mode: bool - experimental_present_mode: str - dxvk_frame_rate: int - enable_wow64: bool - disable_steamdeck_mode: bool - mangohud_workaround: bool - disable_vkbasalt: bool +# Import auto-generated configuration components +from .config_schema_generated import ConfigurationData, get_script_parsing_logic, get_script_generation_logic + +# Note: ConfigurationData is now imported from generated file +# No need to manually maintain the TypedDict anymore! class ConfigurationManager: @@ -295,46 +290,9 @@ class ConfigurationManager: Returns: Dict containing parsed script-only field values """ - script_values = {} - - try: - lines = script_content.split('\n') - - for line in lines: - line = line.strip() - - # Skip comments, empty lines, and non-export lines - if not line or line.startswith('#') or not line.startswith('export '): - continue - - # Parse export statements: export VAR=value - if '=' in line: - # Remove 'export ' prefix - export_line = line[len('export '):] - key, value = export_line.split('=', 1) - key = key.strip() - value = value.strip() - - # Map environment variables to config field names - if key == "DXVK_FRAME_RATE": - try: - script_values["dxvk_frame_rate"] = int(value) - except ValueError: - pass - elif key == "PROTON_USE_WOW64": - script_values["enable_wow64"] = value == "1" - elif key == "SteamDeck": - script_values["disable_steamdeck_mode"] = value == "0" - elif key == "MANGOHUD": - script_values["mangohud_workaround"] = value == "1" - elif key == "DISABLE_VKBASALT": - script_values["disable_vkbasalt"] = value == "1" - - except (ValueError, KeyError, IndexError) as e: - # If parsing fails, log the error and return empty dict (will use defaults) - print(f"Error parsing script content: {e}") - - return script_values + # Use auto-generated parsing logic + parse_script_values = get_script_parsing_logic() + return parse_script_values(script_content.split('\n')) @staticmethod def merge_config_with_script(toml_config: ConfigurationData, script_values: Dict[str, Union[bool, int, str]]) -> ConfigurationData: -- cgit v1.2.3 From d063284dea10e82a23c2c332ecd4901d7254171b Mon Sep 17 00:00:00 2001 From: xXJSONDeruloXx Date: Tue, 22 Jul 2025 13:23:25 -0400 Subject: use generated kwargs and config in more hardcoded places --- py_modules/lsfg_vk/config_schema.py | 36 +++++++++++------------------------- 1 file changed, 11 insertions(+), 25 deletions(-) (limited to 'py_modules/lsfg_vk/config_schema.py') diff --git a/py_modules/lsfg_vk/config_schema.py b/py_modules/lsfg_vk/config_schema.py index a7827ae..bbace42 100644 --- a/py_modules/lsfg_vk/config_schema.py +++ b/py_modules/lsfg_vk/config_schema.py @@ -171,7 +171,9 @@ class ConfigurationManager: if config.get("dll"): lines.append("[global]") lines.append(f"# specify where Lossless.dll is stored") - lines.append(f'dll = "{config["dll"]}"') + # Generate TOML lines for TOML fields only - USE GENERATED CONSTANTS + from .config_schema_generated import DLL + lines.append(f'dll = "{config[DLL]}"') lines.append("") # Add game section with process name for LSFG_PROCESS approach @@ -248,9 +250,10 @@ class ConfigurationManager: elif value.startswith("'") and value.endswith("'"): value = value[1:-1] - # Handle global section (dll only) + # Handle global section (dll only) - USE GENERATED CONSTANTS if in_global_section and key == "dll": - config["dll"] = value + from .config_schema_generated import DLL + config[DLL] = value # Handle game section elif in_game_section: @@ -315,25 +318,8 @@ class ConfigurationManager: return cast(ConfigurationData, merged_config) @staticmethod - def create_config_from_args(dll: str, multiplier: int, flow_scale: float, - performance_mode: bool, hdr_mode: bool, - experimental_present_mode: str = "fifo", - dxvk_frame_rate: int = 0, - enable_wow64: bool = False, - disable_steamdeck_mode: bool = False, - mangohud_workaround: bool = False, - disable_vkbasalt: bool = False) -> ConfigurationData: - """Create configuration from individual arguments""" - return cast(ConfigurationData, { - "dll": dll, - "multiplier": multiplier, - "flow_scale": flow_scale, - "performance_mode": performance_mode, - "hdr_mode": hdr_mode, - "experimental_present_mode": experimental_present_mode, - "dxvk_frame_rate": dxvk_frame_rate, - "enable_wow64": enable_wow64, - "disable_steamdeck_mode": disable_steamdeck_mode, - "mangohud_workaround": mangohud_workaround, - "disable_vkbasalt": disable_vkbasalt - }) + @staticmethod + def create_config_from_args(**kwargs) -> ConfigurationData: + """Create configuration from keyword arguments - USES GENERATED CODE""" + from .config_schema_generated import create_config_dict + return create_config_dict(**kwargs) -- cgit v1.2.3