Skip to content

Commit fe2f3a1

Browse files
committed
[volt/readme] remove _handle_glx_vendor_change, add zink support and update glx_vendor_combo to ogl_provider_combo
1 parent b90fa58 commit fe2f3a1

File tree

2 files changed

+64
-74
lines changed

2 files changed

+64
-74
lines changed

README.md

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -152,9 +152,8 @@ volt flatpak run net.pcsx2.PCSX2
152152

153153
## GPU Selector explained:
154154

155-
- `GLX Vendor Library` Select a GLX provider between the NVIDIA Proprietary Drivers and Mesa Drivers.
156-
- `Mesa Select GPU` Select which to use GPU among those available on the system. (Only for GPUs using the Mesa Drivers)
157-
- `OpenGL Software Rendering` Use Mesa OpenGL Software Rendering; this will ignore the `Mesa Select GPU` option.
155+
- `OpenGL Provider` Select a OpenGL provider between the NVIDIA Proprietary Drivers and Mesa Drivers.
156+
- `Mesa Select GPU` In this case “select” means the GPU will be first in the reported physical devices list, It applies to OpenGL and Vulkan and only GPUs using the Mesa Drivers. Something to add its that the `OpenGL Provider` and `Vulkan ICD` settings have priority over this.
158157
- `Vulkan ICD` Selects the Vulkan Installable Client Driver, obtained from `/usr/share/vulkan/icd.d/`.
159158

160159
## Technical References:

src/gpu_launch.py

Lines changed: 62 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,14 @@ class GPULaunchManager:
6060
]
6161

6262
RENDER_SETTINGS = [
63-
("GLX Vendor Library:", 'glx_vendor_combo', ["unset", "nvidia", "mesa"]),
63+
("OpenGL Provider:", 'ogl_provider_combo', [
64+
"unset",
65+
"nvidia",
66+
"mesa",
67+
"mesa (software rendering)",
68+
"mesa (zink)"
69+
]),
6470
("Mesa Select GPU:", 'dri_prime_combo', ["unset"] + [str(i) for i in range(0, 11)]),
65-
("OpenGL Software Rendering:", 'libgl_software_combo', ["unset", "on", "off"]),
6671
("Vulkan ICD:", 'vulkan_render_combo', ["unset"]),
6772
]
6873

@@ -171,20 +176,20 @@ class GPULaunchManager:
171176
}
172177

173178
RENDER_ENV_MAPPINGS = {
174-
'glx_vendor_combo': {
179+
'ogl_provider_combo': {
175180
'var_name': '__GLX_VENDOR_LIBRARY_NAME',
176-
'direct_value': True
181+
'values': {
182+
'nvidia': 'nvidia',
183+
'mesa': 'mesa',
184+
'mesa (software rendering)': 'mesa',
185+
'mesa (zink)': 'mesa'
186+
}
177187
},
178188
'dri_prime_combo': {
179189
'var_name': 'DRI_PRIME',
180190
'direct_value': True,
181191
'dependency': 'mesa_only'
182192
},
183-
'libgl_software_combo': {
184-
'var_name': 'LIBGL_ALWAYS_SOFTWARE',
185-
'values': {'on': '1', 'off': '0'},
186-
'dependency': 'mesa_only'
187-
},
188193
'vulkan_render_combo': {
189194
'var_name': 'VK_DRIVER_FILES',
190195
'special_handling': 'vulkan_icd'
@@ -364,10 +369,6 @@ def _create_render_selector_tab():
364369
widgets['vulkan_render_combo'].clear()
365370
widgets['vulkan_render_combo'].addItems(vulkan_options)
366371
widgets['vulkan_render_combo'].setCurrentText("unset")
367-
368-
widgets['glx_vendor_combo'].currentTextChanged.connect(lambda: GPULaunchManager._handle_glx_vendor_change(widgets))
369-
370-
GPULaunchManager._handle_glx_vendor_change(widgets)
371372

372373
return render_tab, widgets
373374

@@ -475,17 +476,6 @@ def create_launch_apply_button(layout, widgets):
475476
button_layout.addStretch(1)
476477
layout.addWidget(button_container)
477478

478-
@staticmethod
479-
def _handle_glx_vendor_change(widgets):
480-
"""
481-
Handles GLX vendor selection changes to enable/disable Mesa-only options.
482-
"""
483-
glx_vendor = widgets['glx_vendor_combo'].currentText()
484-
mesa_enabled = glx_vendor == "mesa"
485-
486-
widgets['dri_prime_combo'].setEnabled(mesa_enabled)
487-
widgets['libgl_software_combo'].setEnabled(mesa_enabled)
488-
489479
@staticmethod
490480
def _generate_mesa_env_vars(mesa_widgets):
491481
"""
@@ -551,59 +541,60 @@ def _generate_render_selector_env_vars(render_widgets):
551541
"""
552542
env_vars = []
553543

554-
if not render_widgets or 'glx_vendor_combo' not in render_widgets:
544+
if not render_widgets or 'ogl_provider_combo' not in render_widgets:
555545
return env_vars
556546

557-
glx_vendor = render_widgets['glx_vendor_combo'].currentText()
558-
mesa_enabled = glx_vendor == "mesa"
559-
560-
for widget_key, mapping in GPULaunchManager.RENDER_ENV_MAPPINGS.items():
561-
if widget_key not in render_widgets:
562-
continue
547+
provider = render_widgets['ogl_provider_combo'].currentText()
548+
vulkan_selection = render_widgets['vulkan_render_combo'].currentText()
549+
550+
if provider != "unset":
551+
mapping = GPULaunchManager.RENDER_ENV_MAPPINGS['ogl_provider_combo']
552+
mapped_value = mapping['values'].get(provider)
553+
if mapped_value:
554+
env_vars.append(f"{mapping['var_name']}={mapped_value}")
563555

564-
widget = render_widgets[widget_key]
565-
value = widget.currentText()
566-
if value == "unset":
567-
continue
568-
569-
if mapping.get('dependency') == 'mesa_only' and not mesa_enabled:
570-
continue
571-
572-
var_name = mapping['var_name']
556+
if provider == "mesa (software rendering)":
557+
env_vars.append("LIBGL_ALWAYS_SOFTWARE=1")
558+
elif provider == "mesa (zink)":
559+
env_vars.append("MESA_LOADER_DRIVER_OVERRIDE=zink")
560+
env_vars.append("LIBGL_KOPPER_DRI2=1")
561+
if "(software rendering)" in vulkan_selection.lower():
562+
env_vars.append("LIBGL_ALWAYS_SOFTWARE=1")
563+
564+
if provider.startswith("mesa"):
565+
mapping = GPULaunchManager.RENDER_ENV_MAPPINGS['dri_prime_combo']
566+
value = render_widgets['dri_prime_combo'].currentText()
567+
if value != "unset":
568+
env_vars.append(f"{mapping['var_name']}={value}")
569+
570+
mapping = GPULaunchManager.RENDER_ENV_MAPPINGS['vulkan_render_combo']
571+
value = vulkan_selection
572+
if value != "unset":
573+
if "(software rendering)" in value.lower():
574+
vulkan_selection_name = re.sub(r'\s*\(software rendering\)', '', value, flags=re.IGNORECASE)
575+
else:
576+
vulkan_selection_name = value
573577

574-
if mapping.get('special_handling') == 'vulkan_icd':
575-
vulkan_selection = value
576-
if "(software rendering)" in vulkan_selection.lower():
577-
vulkan_selection = re.sub(r'\s*\(software rendering\)', '', vulkan_selection, flags=re.IGNORECASE)
578-
579-
icd_files = []
580-
581-
try:
582-
for file in os.listdir(GPULaunchManager.ICD_DIR):
583-
if file.endswith('.json'):
584-
base_name = file[:-5]
585-
if '.' in base_name:
586-
pure_name = base_name.split('.')[0]
587-
if pure_name == vulkan_selection:
588-
icd_files.append(os.path.join(GPULaunchManager.ICD_DIR, file))
589-
else:
590-
if base_name == vulkan_selection:
591-
icd_files.append(os.path.join(GPULaunchManager.ICD_DIR, file))
592-
except OSError:
593-
pass
594-
595-
if icd_files:
596-
driver_paths = ":".join(icd_files)
597-
env_vars.append(f'{var_name}={driver_paths}')
598-
env_vars.append('DISABLE_LAYER_AMD_SWITCHABLE_GRAPHICS_1=1')
578+
icd_files = []
599579

600-
elif mapping.get('direct_value', False):
601-
env_vars.append(f'{var_name}={value}')
580+
try:
581+
for file in os.listdir(GPULaunchManager.ICD_DIR):
582+
if file.endswith('.json'):
583+
base_name = file[:-5]
584+
if '.' in base_name:
585+
pure_name = base_name.split('.')[0]
586+
if pure_name == vulkan_selection_name:
587+
icd_files.append(os.path.join(GPULaunchManager.ICD_DIR, file))
588+
else:
589+
if base_name == vulkan_selection_name:
590+
icd_files.append(os.path.join(GPULaunchManager.ICD_DIR, file))
591+
except OSError:
592+
pass
602593

603-
elif 'values' in mapping:
604-
mapped_value = mapping['values'].get(value)
605-
if mapped_value:
606-
env_vars.append(f'{var_name}={mapped_value}')
594+
if icd_files:
595+
driver_paths = ":".join(icd_files)
596+
env_vars.append(f"{mapping['var_name']}={driver_paths}")
597+
env_vars.append('DISABLE_LAYER_AMD_SWITCHABLE_GRAPHICS_1=1')
607598

608599
return env_vars
609600

0 commit comments

Comments
 (0)