diff options
| -rw-r--r-- | package.json | 2 | ||||
| -rw-r--r-- | py_modules/lsfg_vk/config_schema_generated.py | 20 | ||||
| -rw-r--r-- | py_modules/lsfg_vk/configuration_helpers_generated.py | 2 | ||||
| -rw-r--r-- | scripts/generate_python_boilerplate.py | 17 | ||||
| -rw-r--r-- | shared_config.py | 8 | ||||
| -rw-r--r-- | src/components/ConfigurationSection.tsx | 11 | ||||
| -rw-r--r-- | src/config/configSchema.ts | 2 | ||||
| -rw-r--r-- | src/config/generatedConfigSchema.ts | 10 |
8 files changed, 64 insertions, 8 deletions
diff --git a/package.json b/package.json index c881134..8714f2f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "decky-lsfg-vk", - "version": "0.10.6", + "version": "0.10.7", "description": "Use Lossless Scaling on the Steam Deck using the lsfg-vk vulkan layer", "type": "module", "scripts": { diff --git a/py_modules/lsfg_vk/config_schema_generated.py b/py_modules/lsfg_vk/config_schema_generated.py index 4e701ac..6a0a7f6 100644 --- a/py_modules/lsfg_vk/config_schema_generated.py +++ b/py_modules/lsfg_vk/config_schema_generated.py @@ -27,6 +27,7 @@ MANGOHUD_WORKAROUND = "mangohud_workaround" DISABLE_VKBASALT = "disable_vkbasalt" FORCE_ENABLE_VKBASALT = "force_enable_vkbasalt" ENABLE_WSI = "enable_wsi" +ENABLE_ZINK = "enable_zink" class ConfigurationData(TypedDict): @@ -45,6 +46,7 @@ class ConfigurationData(TypedDict): disable_vkbasalt: bool force_enable_vkbasalt: bool enable_wsi: bool + enable_zink: bool def get_script_parsing_logic(): @@ -79,6 +81,12 @@ def get_script_parsing_logic(): script_values["force_enable_vkbasalt"] = value == "1" if key == "ENABLE_GAMESCOPE_WSI": script_values["enable_wsi"] = value != "0" + if key == "__GLX_VENDOR_LIBRARY_NAME" and value == "mesa": + script_values["enable_zink"] = True + if key == "MESA_LOADER_DRIVER_OVERRIDE" and value == "zink": + script_values["enable_zink"] = True + if key == "GALLIUM_DRIVER" and value == "zink": + script_values["enable_zink"] = True return script_values return parse_script_values @@ -103,6 +111,10 @@ def get_script_generation_logic(): lines.append("export ENABLE_VKBASALT=1") if not config.get("enable_wsi", False): lines.append("export ENABLE_GAMESCOPE_WSI=0") + if config.get("enable_zink", False): + lines.append("export __GLX_VENDOR_LIBRARY_NAME=mesa") + lines.append("export MESA_LOADER_DRIVER_OVERRIDE=zink") + lines.append("export GALLIUM_DRIVER=zink") return lines return generate_script_lines @@ -122,7 +134,8 @@ def get_function_parameters() -> str: mangohud_workaround: bool = False, disable_vkbasalt: bool = False, force_enable_vkbasalt: bool = False, - enable_wsi: bool = False""" + enable_wsi: bool = False, + enable_zink: bool = False""" def create_config_dict(**kwargs) -> ConfigurationData: @@ -142,10 +155,11 @@ def create_config_dict(**kwargs) -> ConfigurationData: "disable_vkbasalt": kwargs.get("disable_vkbasalt"), "force_enable_vkbasalt": kwargs.get("force_enable_vkbasalt"), "enable_wsi": kwargs.get("enable_wsi"), + "enable_zink": kwargs.get("enable_zink"), }) # Field lists for dynamic operations TOML_FIELDS = ['dll', 'no_fp16', 'multiplier', 'flow_scale', 'performance_mode', 'hdr_mode', 'experimental_present_mode'] -SCRIPT_FIELDS = ['dxvk_frame_rate', 'enable_wow64', 'disable_steamdeck_mode', 'mangohud_workaround', 'disable_vkbasalt', 'force_enable_vkbasalt', 'enable_wsi'] -ALL_FIELDS = ['dll', 'no_fp16', 'multiplier', 'flow_scale', 'performance_mode', 'hdr_mode', 'experimental_present_mode', 'dxvk_frame_rate', 'enable_wow64', 'disable_steamdeck_mode', 'mangohud_workaround', 'disable_vkbasalt', 'force_enable_vkbasalt', 'enable_wsi'] +SCRIPT_FIELDS = ['dxvk_frame_rate', 'enable_wow64', 'disable_steamdeck_mode', 'mangohud_workaround', 'disable_vkbasalt', 'force_enable_vkbasalt', 'enable_wsi', 'enable_zink'] +ALL_FIELDS = ['dll', 'no_fp16', 'multiplier', 'flow_scale', 'performance_mode', 'hdr_mode', 'experimental_present_mode', 'dxvk_frame_rate', 'enable_wow64', 'disable_steamdeck_mode', 'mangohud_workaround', 'disable_vkbasalt', 'force_enable_vkbasalt', 'enable_wsi', 'enable_zink'] diff --git a/py_modules/lsfg_vk/configuration_helpers_generated.py b/py_modules/lsfg_vk/configuration_helpers_generated.py index f8edd97..1383174 100644 --- a/py_modules/lsfg_vk/configuration_helpers_generated.py +++ b/py_modules/lsfg_vk/configuration_helpers_generated.py @@ -9,7 +9,7 @@ from .config_schema_generated import ConfigurationData, ALL_FIELDS def log_configuration_update(logger, config: ConfigurationData) -> None: """Log configuration update with all field values""" - logger.info(f"Updated lsfg TOML configuration: dll={config['dll']}, no_fp16={config['no_fp16']}, multiplier={config['multiplier']}, flow_scale={config['flow_scale']}, performance_mode={config['performance_mode']}, hdr_mode={config['hdr_mode']}, experimental_present_mode={config['experimental_present_mode']}, dxvk_frame_rate={config['dxvk_frame_rate']}, enable_wow64={config['enable_wow64']}, disable_steamdeck_mode={config['disable_steamdeck_mode']}, mangohud_workaround={config['mangohud_workaround']}, disable_vkbasalt={config['disable_vkbasalt']}, force_enable_vkbasalt={config['force_enable_vkbasalt']}, enable_wsi={config['enable_wsi']}") + logger.info(f"Updated lsfg TOML configuration: dll={config['dll']}, no_fp16={config['no_fp16']}, multiplier={config['multiplier']}, flow_scale={config['flow_scale']}, performance_mode={config['performance_mode']}, hdr_mode={config['hdr_mode']}, experimental_present_mode={config['experimental_present_mode']}, dxvk_frame_rate={config['dxvk_frame_rate']}, enable_wow64={config['enable_wow64']}, disable_steamdeck_mode={config['disable_steamdeck_mode']}, mangohud_workaround={config['mangohud_workaround']}, disable_vkbasalt={config['disable_vkbasalt']}, force_enable_vkbasalt={config['force_enable_vkbasalt']}, enable_wsi={config['enable_wsi']}, enable_zink={config['enable_zink']}") def get_config_field_names() -> list[str]: diff --git a/scripts/generate_python_boilerplate.py b/scripts/generate_python_boilerplate.py index d09ef91..26bcfa5 100644 --- a/scripts/generate_python_boilerplate.py +++ b/scripts/generate_python_boilerplate.py @@ -36,7 +36,8 @@ def get_env_var_name(field_name: str) -> str: "mangohud_workaround": "MANGOHUD", "disable_vkbasalt": "DISABLE_VKBASALT", "force_enable_vkbasalt": "ENABLE_VKBASALT", - "enable_wsi": "ENABLE_GAMESCOPE_WSI" + "enable_wsi": "ENABLE_GAMESCOPE_WSI", + "enable_zink": "ZINK_ENABLE" } return env_map.get(field_name, field_name.upper()) @@ -110,6 +111,14 @@ def generate_script_parsing() -> str: # Special case: ENABLE_GAMESCOPE_WSI=0 means enable_wsi=False lines.append(f' elif key == "{env_var}":') lines.append(f' script_values["{field_name}"] = value != "0"') + elif field_name == "enable_zink": + # Special case: Zink uses multiple environment variables + lines.append(f' elif key == "__GLX_VENDOR_LIBRARY_NAME" and value == "mesa":') + lines.append(f' script_values["{field_name}"] = True') + lines.append(f' elif key == "MESA_LOADER_DRIVER_OVERRIDE" and value == "zink":') + lines.append(f' script_values["{field_name}"] = True') + lines.append(f' elif key == "GALLIUM_DRIVER" and value == "zink":') + lines.append(f' script_values["{field_name}"] = True') else: lines.append(f' elif key == "{env_var}":') lines.append(f' script_values["{field_name}"] = value == "1"') @@ -155,6 +164,12 @@ def generate_script_generation() -> str: # Special case: enable_wsi=False should export ENABLE_GAMESCOPE_WSI=0 lines.append(f' if not config.get("{field_name}", False):') lines.append(f' lines.append("export {env_var}=0")') + elif field_name == "enable_zink": + # Special case: enable_zink=True should export multiple Zink environment variables + lines.append(f' if config.get("{field_name}", False):') + lines.append(f' lines.append("export __GLX_VENDOR_LIBRARY_NAME=mesa")') + lines.append(f' lines.append("export MESA_LOADER_DRIVER_OVERRIDE=zink")') + lines.append(f' lines.append("export GALLIUM_DRIVER=zink")') else: lines.append(f' if config.get("{field_name}", False):') lines.append(f' lines.append("export {env_var}=1")') diff --git a/shared_config.py b/shared_config.py index c9df045..5b0a45d 100644 --- a/shared_config.py +++ b/shared_config.py @@ -130,6 +130,14 @@ CONFIG_SCHEMA_DEF = { "default": False, "description": "Enable Gamescope WSI Layer, disable if frame generation isn't applying or isn't feeling smooth (use with HDR off)", "location": "script" + }, + + "enable_zink": { + "name": "enable_zink", + "fieldType": ConfigFieldType.BOOLEAN, + "default": False, + "description": "Enable Zink (Vulkan-based OpenGL implementation) for OpenGL games", + "location": "script" } } diff --git a/src/components/ConfigurationSection.tsx b/src/components/ConfigurationSection.tsx index 094cb02..9afc650 100644 --- a/src/components/ConfigurationSection.tsx +++ b/src/components/ConfigurationSection.tsx @@ -6,7 +6,7 @@ import { FpsMultiplierControl } from "./FpsMultiplierControl"; import { NO_FP16, FLOW_SCALE, PERFORMANCE_MODE, HDR_MODE, EXPERIMENTAL_PRESENT_MODE, DXVK_FRAME_RATE, DISABLE_STEAMDECK_MODE, - MANGOHUD_WORKAROUND, DISABLE_VKBASALT, FORCE_ENABLE_VKBASALT, ENABLE_WSI + MANGOHUD_WORKAROUND, DISABLE_VKBASALT, FORCE_ENABLE_VKBASALT, ENABLE_WSI, ENABLE_ZINK } from "../config/generatedConfigSchema"; interface ConfigurationSectionProps { @@ -221,6 +221,15 @@ export function ConfigurationSection({ }} /> </PanelSectionRow> + + <PanelSectionRow> + <ToggleField + label="Enable Zink for OpenGL Games" + description="Use Vulkan-based OpenGL implementation for OpenGL games (may cause crashes or freezes with some games)" + checked={config.enable_zink} + onChange={(value) => onConfigChange(ENABLE_ZINK, value)} + /> + </PanelSectionRow> </> )} </> diff --git a/src/config/configSchema.ts b/src/config/configSchema.ts index b6ed9bb..d7da4f5 100644 --- a/src/config/configSchema.ts +++ b/src/config/configSchema.ts @@ -23,7 +23,7 @@ export { DLL, NO_FP16, MULTIPLIER, FLOW_SCALE, PERFORMANCE_MODE, HDR_MODE, EXPERIMENTAL_PRESENT_MODE, DXVK_FRAME_RATE, ENABLE_WOW64, DISABLE_STEAMDECK_MODE, MANGOHUD_WORKAROUND, DISABLE_VKBASALT, - FORCE_ENABLE_VKBASALT, ENABLE_WSI + FORCE_ENABLE_VKBASALT, ENABLE_WSI, ENABLE_ZINK } from './generatedConfigSchema'; /** diff --git a/src/config/generatedConfigSchema.ts b/src/config/generatedConfigSchema.ts index 9e61128..3c5d34e 100644 --- a/src/config/generatedConfigSchema.ts +++ b/src/config/generatedConfigSchema.ts @@ -22,6 +22,7 @@ export const MANGOHUD_WORKAROUND = "mangohud_workaround" as const; export const DISABLE_VKBASALT = "disable_vkbasalt" as const; export const FORCE_ENABLE_VKBASALT = "force_enable_vkbasalt" as const; export const ENABLE_WSI = "enable_wsi" as const; +export const ENABLE_ZINK = "enable_zink" as const; // Configuration field definition export interface ConfigField { @@ -117,6 +118,12 @@ export const CONFIG_SCHEMA: Record<string, ConfigField> = { default: false, description: "Enable Gamescope WSI Layer, disable if frame generation isn't applying or isn't feeling smooth (use with HDR off)" }, + enable_zink: { + name: "enable_zink", + fieldType: ConfigFieldType.BOOLEAN, + default: false, + description: "Enable Zink (Vulkan-based OpenGL implementation) for OpenGL games" + }, }; // Type-safe configuration data structure @@ -135,6 +142,7 @@ export interface ConfigurationData { disable_vkbasalt: boolean; force_enable_vkbasalt: boolean; enable_wsi: boolean; + enable_zink: boolean; } // Helper functions @@ -158,6 +166,7 @@ export function getDefaults(): ConfigurationData { disable_vkbasalt: false, force_enable_vkbasalt: false, enable_wsi: false, + enable_zink: false, }; } @@ -177,6 +186,7 @@ export function getFieldTypes(): Record<string, ConfigFieldType> { disable_vkbasalt: ConfigFieldType.BOOLEAN, force_enable_vkbasalt: ConfigFieldType.BOOLEAN, enable_wsi: ConfigFieldType.BOOLEAN, + enable_zink: ConfigFieldType.BOOLEAN, }; } |
