summaryrefslogtreecommitdiff
path: root/py_modules
diff options
context:
space:
mode:
authorxXJSONDeruloXx <danielhimebauch@gmail.com>2025-07-16 10:42:54 -0400
committerxXJSONDeruloXx <danielhimebauch@gmail.com>2025-07-16 10:42:54 -0400
commiteb1c32ee61d4d4098feb1441ea5bf3b73f520780 (patch)
tree4aa33d86c429f10f41051b5db0b7a494ff93c082 /py_modules
parent80247f76332d2704e21361192b774f31b1520e57 (diff)
downloaddecky-lsfg-vk-eb1c32ee61d4d4098feb1441ea5bf3b73f520780.tar.gz
decky-lsfg-vk-eb1c32ee61d4d4098feb1441ea5bf3b73f520780.zip
initial add of fps cap ui toggle
Diffstat (limited to 'py_modules')
-rw-r--r--py_modules/lsfg_vk/configuration.py27
-rw-r--r--py_modules/lsfg_vk/constants.py2
-rw-r--r--py_modules/lsfg_vk/plugin.py5
-rw-r--r--py_modules/lsfg_vk/types.py1
4 files changed, 27 insertions, 8 deletions
diff --git a/py_modules/lsfg_vk/configuration.py b/py_modules/lsfg_vk/configuration.py
index cf3c9a3..f18bc35 100644
--- a/py_modules/lsfg_vk/configuration.py
+++ b/py_modules/lsfg_vk/configuration.py
@@ -67,7 +67,8 @@ class ConfigurationService(BaseService):
"hdr": False,
"perf_mode": False,
"immediate_mode": False,
- "disable_vkbasalt": False
+ "disable_vkbasalt": False,
+ "frame_cap": 0
}
lines = content.split('\n')
@@ -107,11 +108,22 @@ class ConfigurationService(BaseService):
# Parse DISABLE_VKBASALT
elif match := re.match(r'^(#\s*)?export\s+DISABLE_VKBASALT=(\d+)', line):
config["disable_vkbasalt"] = not bool(match.group(1)) and match.group(2) == '1'
+
+ # Parse DXVK_FRAME_RATE
+ elif match := re.match(r'^(#\s*)?export\s+DXVK_FRAME_RATE=(\d+)', line):
+ if not bool(match.group(1)): # Not commented out
+ try:
+ config["frame_cap"] = int(match.group(2))
+ except ValueError:
+ pass
+ else:
+ # If it's commented out, frame cap is disabled (0)
+ config["frame_cap"] = 0
return config
def update_config(self, enable_lsfg: bool, multiplier: int, flow_scale: float,
- hdr: bool, perf_mode: bool, immediate_mode: bool, disable_vkbasalt: bool) -> ConfigurationResponse:
+ hdr: bool, perf_mode: bool, immediate_mode: bool, disable_vkbasalt: bool, frame_cap: int) -> ConfigurationResponse:
"""Update lsfg script configuration
Args:
@@ -122,6 +134,7 @@ class ConfigurationService(BaseService):
perf_mode: Whether to enable performance mode
immediate_mode: Whether to enable immediate present mode (disable vsync)
disable_vkbasalt: Whether to disable vkbasalt layer
+ frame_cap: Frame rate cap value (10-60)
Returns:
ConfigurationResponse with success status
@@ -129,7 +142,7 @@ class ConfigurationService(BaseService):
try:
# Generate script content using template
script_content = self._generate_script_content(
- enable_lsfg, multiplier, flow_scale, hdr, perf_mode, immediate_mode, disable_vkbasalt
+ enable_lsfg, multiplier, flow_scale, hdr, perf_mode, immediate_mode, disable_vkbasalt, frame_cap
)
# Write the updated script atomically
@@ -138,7 +151,7 @@ class ConfigurationService(BaseService):
self.log.info(f"Updated lsfg script configuration: enable={enable_lsfg}, "
f"multiplier={multiplier}, flow_scale={flow_scale}, hdr={hdr}, "
f"perf_mode={perf_mode}, immediate_mode={immediate_mode}, "
- f"disable_vkbasalt={disable_vkbasalt}")
+ f"disable_vkbasalt={disable_vkbasalt}, frame_cap={frame_cap}")
return {
"success": True,
@@ -158,7 +171,7 @@ class ConfigurationService(BaseService):
}
def _generate_script_content(self, enable_lsfg: bool, multiplier: int, flow_scale: float,
- hdr: bool, perf_mode: bool, immediate_mode: bool, disable_vkbasalt: bool) -> str:
+ hdr: bool, perf_mode: bool, immediate_mode: bool, disable_vkbasalt: bool, frame_cap: int) -> str:
"""Generate script content from configuration parameters
Args:
@@ -169,6 +182,7 @@ class ConfigurationService(BaseService):
perf_mode: Whether to enable performance mode
immediate_mode: Whether to enable immediate present mode
disable_vkbasalt: Whether to disable vkbasalt layer
+ frame_cap: Frame rate cap value (10-60)
Returns:
Generated script content
@@ -180,5 +194,6 @@ class ConfigurationService(BaseService):
hdr="export LSFG_HDR=1" if hdr else "# export LSFG_HDR=1",
perf_mode="export LSFG_PERF_MODE=1" if perf_mode else "# export LSFG_PERF_MODE=1",
immediate_mode="export MESA_VK_WSI_PRESENT_MODE=immediate # - disable vsync" if immediate_mode else "# export MESA_VK_WSI_PRESENT_MODE=immediate # - disable vsync",
- disable_vkbasalt="export DISABLE_VKBASALT=1" if disable_vkbasalt else "# export DISABLE_VKBASALT=1"
+ disable_vkbasalt="export DISABLE_VKBASALT=1" if disable_vkbasalt else "# export DISABLE_VKBASALT=1",
+ frame_cap=f"export DXVK_FRAME_RATE={frame_cap}" if frame_cap > 0 else "# export DXVK_FRAME_RATE=60"
)
diff --git a/py_modules/lsfg_vk/constants.py b/py_modules/lsfg_vk/constants.py
index 2440d9d..878ac2f 100644
--- a/py_modules/lsfg_vk/constants.py
+++ b/py_modules/lsfg_vk/constants.py
@@ -36,6 +36,7 @@ export LSFG_FLOW_SCALE={flow_scale}
{perf_mode}
{immediate_mode}
{disable_vkbasalt}
+{frame_cap}
# Execute the passed command with the environment variables set
exec "$@"
@@ -54,3 +55,4 @@ DEFAULT_HDR = False
DEFAULT_PERF_MODE = True
DEFAULT_IMMEDIATE_MODE = False
DEFAULT_DISABLE_VKBASALT = True
+DEFAULT_FRAME_CAP = 0
diff --git a/py_modules/lsfg_vk/plugin.py b/py_modules/lsfg_vk/plugin.py
index 5fb6c8f..7cda63a 100644
--- a/py_modules/lsfg_vk/plugin.py
+++ b/py_modules/lsfg_vk/plugin.py
@@ -73,7 +73,7 @@ class Plugin:
return self.configuration_service.get_config()
async def update_lsfg_config(self, enable_lsfg: bool, multiplier: int, flow_scale: float,
- hdr: bool, perf_mode: bool, immediate_mode: bool, disable_vkbasalt: bool) -> Dict[str, Any]:
+ hdr: bool, perf_mode: bool, immediate_mode: bool, disable_vkbasalt: bool, frame_cap: int) -> Dict[str, Any]:
"""Update lsfg script configuration
Args:
@@ -84,12 +84,13 @@ class Plugin:
perf_mode: Whether to enable performance mode
immediate_mode: Whether to enable immediate present mode (disable vsync)
disable_vkbasalt: Whether to disable vkbasalt layer
+ frame_cap: Frame rate cap value (10-60)
Returns:
ConfigurationResponse dict with success status
"""
return self.configuration_service.update_config(
- enable_lsfg, multiplier, flow_scale, hdr, perf_mode, immediate_mode, disable_vkbasalt
+ enable_lsfg, multiplier, flow_scale, hdr, perf_mode, immediate_mode, disable_vkbasalt, frame_cap
)
# Plugin lifecycle methods
diff --git a/py_modules/lsfg_vk/types.py b/py_modules/lsfg_vk/types.py
index 07dd768..9f44cf1 100644
--- a/py_modules/lsfg_vk/types.py
+++ b/py_modules/lsfg_vk/types.py
@@ -63,6 +63,7 @@ class ConfigurationData(TypedDict):
perf_mode: bool
immediate_mode: bool
disable_vkbasalt: bool
+ frame_cap: int
class ConfigurationResponse(BaseResponse):