@@ -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