From eb1c32ee61d4d4098feb1441ea5bf3b73f520780 Mon Sep 17 00:00:00 2001 From: xXJSONDeruloXx Date: Wed, 16 Jul 2025 10:42:54 -0400 Subject: initial add of fps cap ui toggle --- src/api/lsfgApi.ts | 3 ++- src/components/ConfigurationSection.tsx | 27 ++++++++++++++++++++++++++- src/components/Content.tsx | 20 +++++++++++++------- src/components/UsageInstructions.tsx | 5 +++++ src/hooks/useLsfgHooks.ts | 14 ++++++++++---- 5 files changed, 56 insertions(+), 13 deletions(-) (limited to 'src') diff --git a/src/api/lsfgApi.ts b/src/api/lsfgApi.ts index 0a0b502..31ecbb5 100644 --- a/src/api/lsfgApi.ts +++ b/src/api/lsfgApi.ts @@ -35,6 +35,7 @@ export interface LsfgConfig { perf_mode: boolean; immediate_mode: boolean; disable_vkbasalt: boolean; + frame_cap: number; } export interface ConfigResult { @@ -56,6 +57,6 @@ export const checkLsfgVkInstalled = callable<[], InstallationStatus>("check_lsfg export const checkLosslessScalingDll = callable<[], DllDetectionResult>("check_lossless_scaling_dll"); export const getLsfgConfig = callable<[], ConfigResult>("get_lsfg_config"); export const updateLsfgConfig = callable< - [boolean, number, number, boolean, boolean, boolean, boolean], + [boolean, number, number, boolean, boolean, boolean, boolean, number], ConfigUpdateResult >("update_lsfg_config"); diff --git a/src/components/ConfigurationSection.tsx b/src/components/ConfigurationSection.tsx index 34955f8..6c6f50a 100644 --- a/src/components/ConfigurationSection.tsx +++ b/src/components/ConfigurationSection.tsx @@ -8,6 +8,7 @@ interface LsfgConfig { perfMode: boolean; immediateMode: boolean; disableVkbasalt: boolean; + frameCap: number; } interface ConfigurationSectionProps { @@ -19,6 +20,7 @@ interface ConfigurationSectionProps { onPerfModeChange: (value: boolean) => Promise; onImmediateModeChange: (value: boolean) => Promise; onDisableVkbasaltChange: (value: boolean) => Promise; + onFrameCapChange: (value: number) => Promise; } export function ConfigurationSection({ @@ -29,7 +31,8 @@ export function ConfigurationSection({ onHdrChange, onPerfModeChange, onImmediateModeChange, - onDisableVkbasaltChange + onDisableVkbasaltChange, + onFrameCapChange }: ConfigurationSectionProps) { return ( <> @@ -114,6 +117,28 @@ export function ConfigurationSection({ /> + + + + {/* { setters.setEnableLsfg(value); - await updateConfig(value, config.multiplier, config.flowScale, config.hdr, config.perfMode, config.immediateMode, config.disableVkbasalt); + await updateConfig(value, config.multiplier, config.flowScale, config.hdr, config.perfMode, config.immediateMode, config.disableVkbasalt, config.frameCap); }; const handleMultiplierChange = async (value: number) => { setters.setMultiplier(value); - await updateConfig(config.enableLsfg, value, config.flowScale, config.hdr, config.perfMode, config.immediateMode, config.disableVkbasalt); + await updateConfig(config.enableLsfg, value, config.flowScale, config.hdr, config.perfMode, config.immediateMode, config.disableVkbasalt, config.frameCap); }; const handleFlowScaleChange = async (value: number) => { setters.setFlowScale(value); - await updateConfig(config.enableLsfg, config.multiplier, value, config.hdr, config.perfMode, config.immediateMode, config.disableVkbasalt); + await updateConfig(config.enableLsfg, config.multiplier, value, config.hdr, config.perfMode, config.immediateMode, config.disableVkbasalt, config.frameCap); }; const handleHdrChange = async (value: boolean) => { setters.setHdr(value); - await updateConfig(config.enableLsfg, config.multiplier, config.flowScale, value, config.perfMode, config.immediateMode, config.disableVkbasalt); + await updateConfig(config.enableLsfg, config.multiplier, config.flowScale, value, config.perfMode, config.immediateMode, config.disableVkbasalt, config.frameCap); }; const handlePerfModeChange = async (value: boolean) => { setters.setPerfMode(value); - await updateConfig(config.enableLsfg, config.multiplier, config.flowScale, config.hdr, value, config.immediateMode, config.disableVkbasalt); + await updateConfig(config.enableLsfg, config.multiplier, config.flowScale, config.hdr, value, config.immediateMode, config.disableVkbasalt, config.frameCap); }; const handleImmediateModeChange = async (value: boolean) => { setters.setImmediateMode(value); - await updateConfig(config.enableLsfg, config.multiplier, config.flowScale, config.hdr, config.perfMode, value, config.disableVkbasalt); + await updateConfig(config.enableLsfg, config.multiplier, config.flowScale, config.hdr, config.perfMode, value, config.disableVkbasalt, config.frameCap); }; const handleDisableVkbasaltChange = async (value: boolean) => { setters.setDisableVkbasalt(value); - await updateConfig(config.enableLsfg, config.multiplier, config.flowScale, config.hdr, config.perfMode, config.immediateMode, value); + await updateConfig(config.enableLsfg, config.multiplier, config.flowScale, config.hdr, config.perfMode, config.immediateMode, value, config.frameCap); + }; + + const handleFrameCapChange = async (value: number) => { + setters.setFrameCap(value); + await updateConfig(config.enableLsfg, config.multiplier, config.flowScale, config.hdr, config.perfMode, config.immediateMode, config.disableVkbasalt, value); }; const onInstall = () => { @@ -107,6 +112,7 @@ export function Content() { onPerfModeChange={handlePerfModeChange} onImmediateModeChange={handleImmediateModeChange} onDisableVkbasaltChange={handleDisableVkbasaltChange} + onFrameCapChange={handleFrameCapChange} /> )} diff --git a/src/components/UsageInstructions.tsx b/src/components/UsageInstructions.tsx index bf80630..3589c04 100644 --- a/src/components/UsageInstructions.tsx +++ b/src/components/UsageInstructions.tsx @@ -8,6 +8,7 @@ interface ConfigType { perfMode: boolean; immediateMode: boolean; disableVkbasalt: boolean; + frameCap: number; } interface UsageInstructionsProps { @@ -45,6 +46,10 @@ export function UsageInstructions({ config }: UsageInstructionsProps) { envVars.push("DISABLE_VKBASALT=1"); } + if (config.frameCap > 0) { + envVars.push(`DXVK_FRAME_RATE=${config.frameCap}`); + } + return envVars.length > 0 ? `${envVars.join(" ")} %command%` : "%command%"; }; diff --git a/src/hooks/useLsfgHooks.ts b/src/hooks/useLsfgHooks.ts index ad04305..f765ce6 100644 --- a/src/hooks/useLsfgHooks.ts +++ b/src/hooks/useLsfgHooks.ts @@ -77,6 +77,7 @@ export function useLsfgConfig() { const [perfMode, setPerfMode] = useState(true); const [immediateMode, setImmediateMode] = useState(false); const [disableVkbasalt, setDisableVkbasalt] = useState(true); + const [frameCap, setFrameCap] = useState(0); const loadLsfgConfig = async () => { try { @@ -89,6 +90,7 @@ export function useLsfgConfig() { setPerfMode(result.config.perf_mode); setImmediateMode(result.config.immediate_mode); setDisableVkbasalt(result.config.disable_vkbasalt); + setFrameCap(result.config.frame_cap); console.log("Loaded lsfg config:", result.config); } else { console.log("lsfg config not available, using defaults:", result.error); @@ -105,7 +107,8 @@ export function useLsfgConfig() { newHdr: boolean, newPerfMode: boolean, newImmediateMode: boolean, - newDisableVkbasalt: boolean + newDisableVkbasalt: boolean, + newFrameCap: number ): Promise => { try { const result = await updateLsfgConfig( @@ -115,7 +118,8 @@ export function useLsfgConfig() { newHdr, newPerfMode, newImmediateMode, - newDisableVkbasalt + newDisableVkbasalt, + newFrameCap ); if (!result.success) { toaster.toast({ @@ -145,7 +149,8 @@ export function useLsfgConfig() { hdr, perfMode, immediateMode, - disableVkbasalt + disableVkbasalt, + frameCap }, setters: { setEnableLsfg, @@ -154,7 +159,8 @@ export function useLsfgConfig() { setHdr, setPerfMode, setImmediateMode, - setDisableVkbasalt + setDisableVkbasalt, + setFrameCap }, loadLsfgConfig, updateConfig -- cgit v1.2.3