summaryrefslogtreecommitdiff
path: root/py_modules
diff options
context:
space:
mode:
authorxXJSONDeruloXx <danielhimebauch@gmail.com>2025-07-19 09:02:50 -0400
committerxXJSONDeruloXx <danielhimebauch@gmail.com>2025-07-19 09:02:50 -0400
commit8448c823c000d494480bde677f76c60969805723 (patch)
tree0a011fe8fa67fcc4989d8a2b657c3bfe0392a38c /py_modules
parentf010473bfdf6b9a58960a5dac71fa48837ae6a1c (diff)
downloaddecky-lsfg-vk-8448c823c000d494480bde677f76c60969805723.tar.gz
decky-lsfg-vk-8448c823c000d494480bde677f76c60969805723.zip
move env vars into lsfg script, getting sunset in lsfg-vk config soon
Diffstat (limited to 'py_modules')
-rw-r--r--py_modules/lsfg_vk/config_schema.py34
-rw-r--r--py_modules/lsfg_vk/configuration.py15
-rw-r--r--py_modules/lsfg_vk/plugin.py8
3 files changed, 34 insertions, 23 deletions
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]: