summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--package.json2
-rw-r--r--py_modules/lsfg_vk/config_schema_generated.py20
-rw-r--r--py_modules/lsfg_vk/configuration_helpers_generated.py2
-rw-r--r--scripts/generate_python_boilerplate.py17
-rw-r--r--shared_config.py8
-rw-r--r--src/components/ConfigurationSection.tsx11
-rw-r--r--src/config/configSchema.ts2
-rw-r--r--src/config/generatedConfigSchema.ts10
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,
};
}