diff options
| author | Kurt Himebauch <136133082+xXJSONDeruloXx@users.noreply.github.com> | 2025-07-22 13:33:13 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-07-22 13:33:13 -0400 |
| commit | 42668d412105b972e0cc7440b64e8e24aeef4587 (patch) | |
| tree | c8f20ccbe508ac6684a38c115d63602476575493 /src | |
| parent | 97bb41947bd44a712ad26905771a9d2cc4692878 (diff) | |
| parent | 43def41747d3b75bb547b649a00f12653c3ae537 (diff) | |
| download | decky-lsfg-vk-42668d412105b972e0cc7440b64e8e24aeef4587.tar.gz decky-lsfg-vk-42668d412105b972e0cc7440b64e8e24aeef4587.zip | |
Merge pull request #67 from xXJSONDeruloXx/workaround-envs
add workaround env vars, rm old tests
Diffstat (limited to 'src')
| -rw-r--r-- | src/api/lsfgApi.ts | 11 | ||||
| -rw-r--r-- | src/components/ConfigurationSection.tsx | 63 | ||||
| -rw-r--r-- | src/config/configSchema.ts | 27 | ||||
| -rw-r--r-- | src/config/generatedConfigSchema.ts | 31 |
4 files changed, 91 insertions, 41 deletions
diff --git a/src/api/lsfgApi.ts b/src/api/lsfgApi.ts index 74caa57..8d14da6 100644 --- a/src/api/lsfgApi.ts +++ b/src/api/lsfgApi.ts @@ -1,5 +1,5 @@ import { callable } from "@decky/api"; -import { ConfigurationData, ConfigurationManager } from "../config/configSchema"; +import { ConfigurationData } from "../config/configSchema"; // Type definitions for API responses export interface InstallationResult { @@ -99,16 +99,15 @@ export const getLaunchOption = callable<[], LaunchOptionResult>("get_launch_opti export const getConfigFileContent = callable<[], FileContentResult>("get_config_file_content"); export const getLaunchScriptContent = callable<[], FileContentResult>("get_launch_script_content"); -// Updated config function using centralized configuration +// Updated config function using object-based configuration (single source of truth) export const updateLsfgConfig = callable< - [string, number, number, boolean, boolean, string, number, boolean, boolean], + [ConfigurationData], ConfigUpdateResult >("update_lsfg_config"); -// Helper function to create config update from configuration object +// Legacy helper function for backward compatibility export const updateLsfgConfigFromObject = async (config: ConfigurationData): Promise<ConfigUpdateResult> => { - const args = ConfigurationManager.createArgsFromConfig(config); - return updateLsfgConfig(...args as [string, number, number, boolean, boolean, string, number, boolean, boolean]); + return updateLsfgConfig(config); }; // Self-updater API functions diff --git a/src/components/ConfigurationSection.tsx b/src/components/ConfigurationSection.tsx index 59ad880..c0b67fd 100644 --- a/src/components/ConfigurationSection.tsx +++ b/src/components/ConfigurationSection.tsx @@ -1,5 +1,10 @@ import { PanelSectionRow, ToggleField, SliderField, DropdownItem } from "@decky/ui"; import { ConfigurationData } from "../config/configSchema"; +import { + MULTIPLIER, FLOW_SCALE, PERFORMANCE_MODE, HDR_MODE, + EXPERIMENTAL_PRESENT_MODE, DXVK_FRAME_RATE, DISABLE_STEAMDECK_MODE, + MANGOHUD_WORKAROUND, DISABLE_VKBASALT +} from "../config/generatedConfigSchema"; interface ConfigurationSectionProps { config: ConfigurationData; @@ -45,7 +50,7 @@ export function ConfigurationSection({ ]} showValue={false} notchTicksVisible={true} - onChange={(value) => onConfigChange('multiplier', value)} + onChange={(value) => onConfigChange(MULTIPLIER, value)} /> </PanelSectionRow> @@ -57,7 +62,7 @@ export function ConfigurationSection({ min={0.25} max={1.0} step={0.01} - onChange={(value) => onConfigChange('flow_scale', value)} + onChange={(value) => onConfigChange(FLOW_SCALE, value)} /> </PanelSectionRow> @@ -66,7 +71,7 @@ export function ConfigurationSection({ label="Performance Mode" description="Uses a lighter model for FG (Recommended for most games)" checked={config.performance_mode} - onChange={(value) => onConfigChange('performance_mode', value)} + onChange={(value) => onConfigChange(PERFORMANCE_MODE, value)} /> </PanelSectionRow> @@ -75,7 +80,7 @@ export function ConfigurationSection({ label="HDR Mode" description="Enables HDR mode (only for games that support HDR)" checked={config.hdr_mode} - onChange={(value) => onConfigChange('hdr_mode', value)} + onChange={(value) => onConfigChange(HDR_MODE, value)} /> </PanelSectionRow> @@ -101,7 +106,7 @@ export function ConfigurationSection({ description="Select a specific Vulkan presentation mode for better performance or compatibility (May cause crashes)" menuLabel="Select presentation mode" selectedOption={config.experimental_present_mode || "fifo"} - onChange={(value) => onConfigChange('experimental_present_mode', value.data)} + onChange={(value) => onConfigChange(EXPERIMENTAL_PRESENT_MODE, value.data)} rgOptions={[ { data: "fifo", label: "FIFO (VSync) - Default" }, { data: "mailbox", label: "Mailbox" } @@ -112,16 +117,26 @@ export function ConfigurationSection({ <PanelSectionRow> <div style={{ - fontSize: "14px", - fontWeight: "bold", - marginTop: "16px", - marginBottom: "8px", - borderBottom: "1px solid rgba(255, 255, 255, 0.2)", - paddingBottom: "4px", - color: "white" + fontSize: "14px", + fontWeight: "bold", + marginTop: "16px", + marginBottom: "2px", + borderBottom: "1px solid rgba(255, 255, 255, 0.2)", + paddingBottom: "2px", + color: "white" + }} + > + Environment Variables + </div> + <div + style={{ + fontSize: "12px", + color: "#cccccc", + marginTop: "2px", + marginBottom: "8px" }} > - Environment Variables (Requires re-launch) + Must be toggled before game start or restart game to take effect </div> </PanelSectionRow> @@ -133,7 +148,7 @@ export function ConfigurationSection({ min={0} max={60} step={1} - onChange={(value) => onConfigChange('dxvk_frame_rate', value)} + onChange={(value) => onConfigChange(DXVK_FRAME_RATE, value)} /> </PanelSectionRow> @@ -151,7 +166,25 @@ export function ConfigurationSection({ label="Disable Steam Deck Mode" description="Disables Steam Deck mode (Unlocks hidden settings in some games)" checked={config.disable_steamdeck_mode} - onChange={(value) => onConfigChange('disable_steamdeck_mode', value)} + onChange={(value) => onConfigChange(DISABLE_STEAMDECK_MODE, value)} + /> + </PanelSectionRow> + + <PanelSectionRow> + <ToggleField + label="MangoHud Workaround" + description="Enables a transparent mangohud overlay, sometimes fixes issues with 2X multiplier in game mode" + checked={config.mangohud_workaround} + onChange={(value) => onConfigChange(MANGOHUD_WORKAROUND, value)} + /> + </PanelSectionRow> + + <PanelSectionRow> + <ToggleField + label="Disable vkBasalt" + description="Disables vkBasalt layer which can conflict with LSFG (Reshade, some Decky plugins)" + checked={config.disable_vkbasalt} + onChange={(value) => onConfigChange(DISABLE_VKBASALT, value)} /> </PanelSectionRow> </> diff --git a/src/config/configSchema.ts b/src/config/configSchema.ts index 4ab0d25..9568fd8 100644 --- a/src/config/configSchema.ts +++ b/src/config/configSchema.ts @@ -8,6 +8,7 @@ import { callable } from "@decky/api"; import type { ConfigurationData } from './generatedConfigSchema'; import { getDefaults } from './generatedConfigSchema'; +import { updateLsfgConfig } from "../api/lsfgApi"; // Re-export all auto-generated configuration constants export { @@ -17,7 +18,11 @@ export { ConfigurationData, getFieldNames, getDefaults, - getFieldTypes + getFieldTypes, + // Field name constants for type-safe access + DLL, MULTIPLIER, FLOW_SCALE, PERFORMANCE_MODE, HDR_MODE, + EXPERIMENTAL_PRESENT_MODE, DXVK_FRAME_RATE, ENABLE_WOW64, + DISABLE_STEAMDECK_MODE, MANGOHUD_WORKAROUND, DISABLE_VKBASALT } from './generatedConfigSchema'; /** @@ -30,7 +35,6 @@ export class ConfigurationManager { // Callable methods for backend communication private getConfiguration = callable<[], { success: boolean; data?: ConfigurationData; error?: string }>("get_configuration"); - private setConfiguration = callable<[{ config_data: ConfigurationData }], { success: boolean; error?: string }>("set_configuration"); private resetConfiguration = callable<[], { success: boolean; data?: ConfigurationData; error?: string }>("reset_configuration"); private constructor() {} @@ -50,23 +54,6 @@ export class ConfigurationManager { } /** - * Create args array from config object for lsfg API calls - */ - static createArgsFromConfig(config: ConfigurationData): [string, number, number, boolean, boolean, string, number, boolean, boolean] { - return [ - config.dll, - config.multiplier, - config.flow_scale, - config.performance_mode, - config.hdr_mode, - config.experimental_present_mode, - config.dxvk_frame_rate, - config.enable_wow64, - config.disable_steamdeck_mode - ]; - } - - /** * Load configuration from backend */ async loadConfig(): Promise<ConfigurationData> { @@ -89,7 +76,7 @@ export class ConfigurationManager { */ async saveConfig(config: ConfigurationData): Promise<void> { try { - const result = await this.setConfiguration({ config_data: config }); + const result = await updateLsfgConfig(config); if (result.success) { this._config = config; } else { diff --git a/src/config/generatedConfigSchema.ts b/src/config/generatedConfigSchema.ts index 5f0e368..4a301a1 100644 --- a/src/config/generatedConfigSchema.ts +++ b/src/config/generatedConfigSchema.ts @@ -7,6 +7,19 @@ export enum ConfigFieldType { STRING = "string" } +// Field name constants for type-safe access +export const DLL = "dll" as const; +export const MULTIPLIER = "multiplier" as const; +export const FLOW_SCALE = "flow_scale" as const; +export const PERFORMANCE_MODE = "performance_mode" as const; +export const HDR_MODE = "hdr_mode" as const; +export const EXPERIMENTAL_PRESENT_MODE = "experimental_present_mode" as const; +export const DXVK_FRAME_RATE = "dxvk_frame_rate" as const; +export const ENABLE_WOW64 = "enable_wow64" as const; +export const DISABLE_STEAMDECK_MODE = "disable_steamdeck_mode" as const; +export const MANGOHUD_WORKAROUND = "mangohud_workaround" as const; +export const DISABLE_VKBASALT = "disable_vkbasalt" as const; + // Configuration field definition export interface ConfigField { name: string; @@ -71,6 +84,18 @@ export const CONFIG_SCHEMA: Record<string, ConfigField> = { default: false, description: "disable Steam Deck mode (unlocks hidden settings in some games)" }, + mangohud_workaround: { + name: "mangohud_workaround", + fieldType: ConfigFieldType.BOOLEAN, + default: false, + description: "Enables a transparent mangohud overlay, sometimes fixes issues with 2X multiplier in game mode" + }, + disable_vkbasalt: { + name: "disable_vkbasalt", + fieldType: ConfigFieldType.BOOLEAN, + default: false, + description: "Disables vkBasalt layer which can conflict with LSFG (Reshade, some Decky plugins)" + }, }; // Type-safe configuration data structure @@ -84,6 +109,8 @@ export interface ConfigurationData { dxvk_frame_rate: number; enable_wow64: boolean; disable_steamdeck_mode: boolean; + mangohud_workaround: boolean; + disable_vkbasalt: boolean; } // Helper functions @@ -102,6 +129,8 @@ export function getDefaults(): ConfigurationData { dxvk_frame_rate: 0, enable_wow64: false, disable_steamdeck_mode: false, + mangohud_workaround: false, + disable_vkbasalt: false, }; } @@ -116,6 +145,8 @@ export function getFieldTypes(): Record<string, ConfigFieldType> { dxvk_frame_rate: ConfigFieldType.INTEGER, enable_wow64: ConfigFieldType.BOOLEAN, disable_steamdeck_mode: ConfigFieldType.BOOLEAN, + mangohud_workaround: ConfigFieldType.BOOLEAN, + disable_vkbasalt: ConfigFieldType.BOOLEAN, }; } |
