summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--main.py21
-rwxr-xr-xsrc/index.tsx36
2 files changed, 46 insertions, 11 deletions
diff --git a/main.py b/main.py
index 1e4cd6f..96845fa 100644
--- a/main.py
+++ b/main.py
@@ -63,6 +63,7 @@ export ENABLE_LSFG=1
export LSFG_MULTIPLIER=2
export LSFG_FLOW_SCALE=1.0
# export LSFG_HDR=1
+# export LSFG_PERF_MODE=1
# export MESA_VK_WSI_PRESENT_MODE=immediate # - disable vsync
# Execute the passed command with the environment variables set
@@ -227,6 +228,7 @@ exec "$@"
"multiplier": 2,
"flow_scale": 1.0,
"hdr": False,
+ "perf_mode": False,
"immediate_mode": False
}
@@ -270,6 +272,16 @@ exec "$@"
elif line.startswith('# export LSFG_HDR='):
config["hdr"] = False
+ # Handle LSFG_PERF_MODE - check if it's commented out or not
+ elif line.startswith('export LSFG_PERF_MODE='):
+ try:
+ value = line.split('=')[1].strip()
+ config["perf_mode"] = value == '1'
+ except:
+ pass
+ elif line.startswith('# export LSFG_PERF_MODE='):
+ config["perf_mode"] = False
+
# Handle MESA_VK_WSI_PRESENT_MODE - check if it's commented out or not
elif line.startswith('export MESA_VK_WSI_PRESENT_MODE='):
try:
@@ -296,7 +308,7 @@ exec "$@"
"error": str(e)
}
- async def update_lsfg_config(self, enable_lsfg: bool, multiplier: int, flow_scale: float, hdr: bool, immediate_mode: bool) -> dict:
+ async def update_lsfg_config(self, enable_lsfg: bool, multiplier: int, flow_scale: float, hdr: bool, perf_mode: bool, immediate_mode: bool) -> dict:
"""Update lsfg script configuration"""
try:
user_home = os.path.expanduser("~")
@@ -318,6 +330,11 @@ exec "$@"
else:
script_content += "# export LSFG_HDR=1\n"
+ if perf_mode:
+ script_content += "export LSFG_PERF_MODE=1\n"
+ else:
+ script_content += "# export LSFG_PERF_MODE=1\n"
+
if immediate_mode:
script_content += "export MESA_VK_WSI_PRESENT_MODE=immediate # - disable vsync\n"
else:
@@ -334,7 +351,7 @@ exec "$@"
# Make sure it's executable
os.chmod(lsfg_script_path, 0o755)
- decky.logger.info(f"Updated lsfg script configuration: enable={enable_lsfg}, multiplier={multiplier}, flow_scale={flow_scale}, hdr={hdr}, immediate_mode={immediate_mode}")
+ decky.logger.info(f"Updated lsfg script configuration: enable={enable_lsfg}, multiplier={multiplier}, flow_scale={flow_scale}, hdr={hdr}, perf_mode={perf_mode}, immediate_mode={immediate_mode}")
return {
"success": True,
diff --git a/src/index.tsx b/src/index.tsx
index a900f67..2b895b3 100755
--- a/src/index.tsx
+++ b/src/index.tsx
@@ -28,10 +28,10 @@ const checkLsfgVkInstalled = callable<[], { installed: boolean; lib_exists: bool
const checkLosslessScalingDll = callable<[], { detected: boolean; path?: string; source?: string; message?: string; error?: string }>("check_lossless_scaling_dll");
// Function to get lsfg configuration
-const getLsfgConfig = callable<[], { success: boolean; config?: { enable_lsfg: boolean; multiplier: number; flow_scale: number; hdr: boolean; immediate_mode: boolean }; error?: string }>("get_lsfg_config");
+const getLsfgConfig = callable<[], { success: boolean; config?: { enable_lsfg: boolean; multiplier: number; flow_scale: number; hdr: boolean; perf_mode: boolean; immediate_mode: boolean }; error?: string }>("get_lsfg_config");
// Function to update lsfg configuration
-const updateLsfgConfig = callable<[boolean, number, number, boolean, boolean], { success: boolean; message?: string; error?: string }>("update_lsfg_config");
+const updateLsfgConfig = callable<[boolean, number, number, boolean, boolean, boolean], { success: boolean; message?: string; error?: string }>("update_lsfg_config");
function Content() {
const [isInstalled, setIsInstalled] = useState<boolean>(false);
@@ -46,6 +46,7 @@ function Content() {
const [multiplier, setMultiplier] = useState<number>(2);
const [flowScale, setFlowScale] = useState<number>(1.0);
const [hdr, setHdr] = useState<boolean>(false);
+ const [perfMode, setPerfMode] = useState<boolean>(false);
const [immediateMode, setImmediateMode] = useState<boolean>(false);
// Check installation status on component mount
@@ -86,6 +87,7 @@ function Content() {
setMultiplier(result.config.multiplier);
setFlowScale(result.config.flow_scale);
setHdr(result.config.hdr);
+ setPerfMode(result.config.perf_mode);
setImmediateMode(result.config.immediate_mode);
console.log("Loaded lsfg config:", result.config);
} else {
@@ -117,6 +119,7 @@ function Content() {
setMultiplier(result.config.multiplier);
setFlowScale(result.config.flow_scale);
setHdr(result.config.hdr);
+ setPerfMode(result.config.perf_mode);
setImmediateMode(result.config.immediate_mode);
console.log("Reloaded lsfg config after installation detected:", result.config);
}
@@ -148,6 +151,7 @@ function Content() {
setMultiplier(configResult.config.multiplier);
setFlowScale(configResult.config.flow_scale);
setHdr(configResult.config.hdr);
+ setPerfMode(configResult.config.perf_mode);
setImmediateMode(configResult.config.immediate_mode);
}
} catch (error) {
@@ -202,9 +206,9 @@ function Content() {
}
};
- const updateConfig = async (newEnableLsfg: boolean, newMultiplier: number, newFlowScale: number, newHdr: boolean, newImmediateMode: boolean) => {
+ const updateConfig = async (newEnableLsfg: boolean, newMultiplier: number, newFlowScale: number, newHdr: boolean, newPerfMode: boolean, newImmediateMode: boolean) => {
try {
- const result = await updateLsfgConfig(newEnableLsfg, newMultiplier, newFlowScale, newHdr, newImmediateMode);
+ const result = await updateLsfgConfig(newEnableLsfg, newMultiplier, newFlowScale, newHdr, newPerfMode, newImmediateMode);
if (!result.success) {
toaster.toast({
title: "Update Failed",
@@ -222,27 +226,32 @@ function Content() {
const handleEnableLsfgChange = async (value: boolean) => {
setEnableLsfg(value);
- await updateConfig(value, multiplier, flowScale, hdr, immediateMode);
+ await updateConfig(value, multiplier, flowScale, hdr, perfMode, immediateMode);
};
const handleMultiplierChange = async (value: number) => {
setMultiplier(value);
- await updateConfig(enableLsfg, value, flowScale, hdr, immediateMode);
+ await updateConfig(enableLsfg, value, flowScale, hdr, perfMode, immediateMode);
};
const handleFlowScaleChange = async (value: number) => {
setFlowScale(value);
- await updateConfig(enableLsfg, multiplier, value, hdr, immediateMode);
+ await updateConfig(enableLsfg, multiplier, value, hdr, perfMode, immediateMode);
};
const handleHdrChange = async (value: boolean) => {
setHdr(value);
- await updateConfig(enableLsfg, multiplier, flowScale, value, immediateMode);
+ await updateConfig(enableLsfg, multiplier, flowScale, value, perfMode, immediateMode);
+ };
+
+ const handlePerfModeChange = async (value: boolean) => {
+ setPerfMode(value);
+ await updateConfig(enableLsfg, multiplier, flowScale, hdr, value, immediateMode);
};
const handleImmediateModeChange = async (value: boolean) => {
setImmediateMode(value);
- await updateConfig(enableLsfg, multiplier, flowScale, hdr, value);
+ await updateConfig(enableLsfg, multiplier, flowScale, hdr, perfMode, value);
};
return (
@@ -358,6 +367,15 @@ function Content() {
<PanelSectionRow>
<ToggleField
+ label="Performance Mode"
+ description="Enable performance mode (can quintuple performance)"
+ checked={perfMode}
+ onChange={handlePerfModeChange}
+ />
+ </PanelSectionRow>
+
+ <PanelSectionRow>
+ <ToggleField
label="Immediate Mode"
description="Disable vsync for reduced input lag"
checked={immediateMode}