def get_toggle_settings(): """Get predefined toggle settings with descriptions.""" from portprotonqt.localization import _ return { 'PW_MANGOHUD': _("Using FPS and system load monitoring (Turns on and off by the key combination - right Shift + F12)"), 'PW_MANGOHUD_USER_CONF': _("Forced use of MANGOHUD system settings (GOverlay, etc.)"), 'PW_VKBASALT': _("Enable vkBasalt by default to improve graphics in games running on Vulkan. (The HOME hotkey disables vkbasalt)"), 'PW_VKBASALT_USER_CONF': _("Forced use of VKBASALT system settings (GOverlay, etc.)"), 'PW_DGVOODOO2': _("Enable dgVoodoo2. Forced use all dgVoodoo2 libs (Glide 2.11-3.1, DirectDraw 1-7, Direct3D 2-9) on all 3D API."), 'PW_GAMESCOPE': _("Super + F : Toggle fullscreen\nSuper + N : Toggle nearest neighbour filtering\nSuper + U : Toggle FSR upscaling\nSuper + Y : Toggle NIS upscaling\nSuper + I : Increase FSR sharpness by 1\nSuper + O : Decrease FSR sharpness by 1\nSuper + S : Take screenshot (currently goes to /tmp/gamescope_DATE.png)\nSuper + G : Toggle keyboard grab\nSuper + C : Update clipboard"), 'PW_USE_ESYNC': _("Enable in-process synchronization primitives based on eventfd."), 'PW_USE_FSYNC': _("Enable futex-based in-process synchronization primitives."), 'PW_USE_NTSYNC': _("Enable in-process synchronization via the Linux ntsync driver."), 'PW_USE_RAY_TRACING': _("Enable vkd3d support - Ray Tracing"), 'PW_USE_NVAPI_AND_DLSS': _("Enable DLSS on supported NVIDIA graphics cards"), 'PW_USE_OPTISCALER': _("Enable OptiScaler (replacement upscaler / frame generator)"), 'PW_USE_LS_FRAME_GEN': _("Enable Lossless Scaling frame generation (experimental)"), 'PW_WINE_FULLSCREEN_FSR': _("FSR upscaling in fullscreen with ProtonGE below native resolution"), 'PW_HIDE_NVIDIA_GPU': _("Disguise all NVIDIA GPU features"), 'PW_VIRTUAL_DESKTOP': _("Run the application in WINE virtual desktop"), 'PW_USE_TERMINAL': _("Run the application in a terminal"), 'PW_GUI_DISABLED_CS': _("Disable startup mode and WINE version selector window"), 'PW_USE_GAMEMODE': _("Use system GameMode for performance optimization"), 'PW_USE_D3D_EXTRAS': _("Enable forced use of third-party DirectX libraries"), 'PW_FIX_VIDEO_IN_GAME': _("Fix pink-tinted video playback in some games"), 'PW_REDUCE_PULSE_LATENCY': _("Reduce PulseAudio latency to fix intermittent sound"), 'PW_USE_US_LAYOUT': _("Force US keyboard layout"), 'PW_USE_GSTREAMER': _("Use GStreamer for in-game clips (WMF support)"), 'PW_USE_SHADER_CACHE': _("Use WINE shader caching"), 'PW_USE_WINE_DXGI': _("Force use of built-in DXGI library"), 'PW_USE_EAC_AND_BE': _("Enable Easy Anti-Cheat and BattlEye runtimes"), 'PW_USE_SYSTEM_VK_LAYERS': _("Use system Vulkan layers (MangoHud, vkBasalt, OBS, etc.)"), 'PW_USE_OBS_VKCAPTURE': _("Enable OBS Studio capture via obs-vkcapture"), 'PW_DISABLE_COMPOSITING': _("Disable desktop compositing for performance"), 'PW_USE_RUNTIME': _("Use container launch mode (recommended default)"), 'PW_DINPUT_PROTOCOL': _("Force DirectInput protocol instead of XInput"), 'PW_USE_NATIVE_WAYLAND': _("Enable experimental native Wayland support"), 'PW_USE_DXVK_HDR': _("Enable HDR settings under native Wayland"), 'PW_USE_GALLIUM_ZINK': _("Use Gallium Zink (OpenGL via Vulkan)"), 'PW_USE_GALLIUM_NINE': _("Use Gallium Nine (native DirectX 9 for Mesa)"), 'PW_USE_WINED3D_VULKAN': _("Use WineD3D Vulkan backend (Damavand)"), 'PW_USE_SUPPLIED_DXVK_VKD3D': _("Use bundled dxvk/vkd3d from Wine/Proton"), 'PW_USE_SAREK_ASYNC': _("Use async dxvk-sarek (experimental)") } def get_advanced_settings(disabled_text, logical_core_options, locale_options, amd_vulkan_drivers, is_amd, numa_nodes): """Get advanced settings configuration.""" from portprotonqt.localization import _ advanced_settings = [] # 1. Windows version advanced_settings.append({ 'key': 'PW_WINDOWS_VER', 'name': _("Windows version"), 'description': _("Changing the WINDOWS emulation version may be required to run older games. WINDOWS versions below 10 do not support new games with DirectX 12"), 'type': 'combo', 'options': ['11', '10', '7', 'XP'], 'default': '10' }) # 2. DLL Overrides advanced_settings.append({ 'key': 'WINEDLLOVERRIDES', 'name': _("DLL Overrides"), 'description': _("Forced to use/disable the library only for the given application.\n\nA brief instruction:\n* libraries are written WITHOUT the .dll file extension\n* libraries are separated by semicolons - ;\n* library=n - use the WINDOWS (third-party) library\n* library=b - use WINE (built-in) library\n* library=n,b - use WINDOWS library and then WINE\n* library=b,n - use WINE library and then WINDOWS\n* library= - disable the use of this library\n\nExample: libglesv2=;d3dx9_36,d3dx9_42=n,b;mfc120=b,n"), 'type': 'text', 'default': '' }) # 3. Launch arguments advanced_settings.append({ 'key': 'LAUNCH_PARAMETERS', 'name': _("Launch Arguments"), 'description': _("Adding an argument after the .exe file, just like you would add an argument in a shortcut on a WINDOWS system.\n\nExample: -dx11 -skipintro 1"), 'type': 'text', 'default': '' }) # 4. CPU cores limit advanced_settings.append({ 'key': 'PW_WINE_CPU_TOPOLOGY', 'name': _("CPU Cores Limit"), 'description': _("Limiting the number of CPU cores is useful for Unity games (It is recommended to set the value equal to 8)"), 'type': 'combo', 'options': [disabled_text] + logical_core_options, 'default': disabled_text }) # 5. OpenGL version advanced_settings.append({ 'key': 'PW_MESA_GL_VERSION_OVERRIDE', 'name': _("OpenGL Version"), 'description': _("You can select the required OpenGL version, some games require a forced Compatibility Profile (COMP)."), 'type': 'combo', 'options': [disabled_text, '4.6COMPAT', '4.5COMPAT', '4.3COMPAT', '4.1COMPAT', '3.3COMPAT', '3.2COMPAT'], 'default': disabled_text }) # 6. VKD3D feature level advanced_settings.append({ 'key': 'PW_VKD3D_FEATURE_LEVEL', 'name': _("VKD3D Feature Level"), 'description': _("You can set a forced feature level VKD3D for games on DirectX12"), 'type': 'combo', 'options': [disabled_text, '12_2', '12_1', '12_0', '11_1', '11_0'], 'default': disabled_text }) # 7. Locale advanced_settings.append({ 'key': 'PW_LOCALE_SELECT', 'name': _("Locale"), 'description': _("Force certain locale for an app. Fixes encoding issues in legacy software"), 'type': 'combo', 'options': [disabled_text] + locale_options, 'default': disabled_text }) # 8. Present mode advanced_settings.append({ 'key': 'PW_MESA_VK_WSI_PRESENT_MODE', 'name': _("Window Mode"), 'description': _("Window mode (for Vulkan and OpenGL):\nfifo - First in, first out. Limits the frame rate + no tearing. (VSync)\nimmediate - Unlimited frame rate + tearing.\nmailbox - Triple buffering. Unlimited frame rate + no tearing.\nrelaxed - Same as fifo but allows tearing when below the monitors refresh rate."), 'type': 'combo', 'options': [disabled_text, 'fifo', 'immediate', 'mailbox', 'relaxed'], 'default': disabled_text }) # 9. AMD Vulkan driver amd_options = [disabled_text] + amd_vulkan_drivers if is_amd and amd_vulkan_drivers else [disabled_text] advanced_settings.append({ 'key': 'PW_AMD_VULKAN_USE', 'name': _("AMD Vulkan Driver"), 'description': _("Select needed AMD vulkan implementation. Choosing which implementation of vulkan will be used to run the game"), 'type': 'combo', 'options': amd_options, 'default': disabled_text }) # 10. NUMA node numa_ids = sorted(numa_nodes.keys()) numa_options = [disabled_text] + numa_ids if len(numa_ids) > 1 else [disabled_text] advanced_settings.append({ 'key': 'PW_CPU_NUMA_NODE_INDEX', 'name': _("NUMA Node"), 'description': _("NUMA node for CPU affinity. In multi-core systems, CPUs are split into NUMA nodes, each with its own local memory and cores. Binding a game to a single node reduces memory-access latency and limits costly core-to-core switches."), 'type': 'combo', 'options': numa_options, 'default': disabled_text }) return advanced_settings # Keys that should be recognized as advanced settings ADVANCED_SETTING_KEYS = [ 'PW_WINDOWS_VER', 'WINEDLLOVERRIDES', 'LAUNCH_PARAMETERS', 'PW_WINE_CPU_TOPOLOGY', 'PW_MESA_GL_VERSION_OVERRIDE', 'PW_VKD3D_FEATURE_LEVEL', 'PW_LOCALE_SELECT', 'PW_MESA_VK_WSI_PRESENT_MODE', 'PW_AMD_VULKAN_USE', 'PW_CPU_NUMA_NODE_INDEX', ]