mirror of
				https://gitlab.freedesktop.org/wlroots/wlroots.git
				synced 2025-10-29 05:40:12 -04:00 
			
		
		
		
	renderer: Don't crash when trying to fallback to pixman
Pixman won't be chosen by default if the system has a valid render node but gles2 and vulkan creation failed.
This commit is contained in:
		
							parent
							
								
									4f92ecde82
								
							
						
					
					
						commit
						d817ebb80f
					
				
					 1 changed files with 18 additions and 9 deletions
				
			
		|  | @ -346,6 +346,23 @@ static void log_creation_failure(bool is_auto, const char *msg) { | |||
| 	wlr_log(is_auto ? WLR_DEBUG : WLR_ERROR, "%s%s", msg, is_auto ? ". Skipping!" : ""); | ||||
| } | ||||
| 
 | ||||
| static bool has_render_node(struct wlr_backend *backend) { | ||||
| 	if (!backend) { | ||||
| 		return false; | ||||
| 	} | ||||
| 
 | ||||
| 	int backend_drm_fd = wlr_backend_get_drm_fd(backend); | ||||
| 	if (backend_drm_fd < 0) { | ||||
| 		return false; | ||||
| 	} | ||||
| 
 | ||||
| 	char *render_node = drmGetRenderDeviceNameFromFd(backend_drm_fd); | ||||
| 	bool has_render_node = render_node != NULL; | ||||
| 	free(render_node); | ||||
| 
 | ||||
| 	return has_render_node; | ||||
| } | ||||
| 
 | ||||
| static struct wlr_renderer *renderer_autocreate(struct wlr_backend *backend, int drm_fd) { | ||||
| 	const char *renderer_options[] = { | ||||
| 		"auto", | ||||
|  | @ -396,15 +413,7 @@ static struct wlr_renderer *renderer_autocreate(struct wlr_backend *backend, int | |||
| 	} | ||||
| #endif | ||||
| 
 | ||||
| 	bool has_render_node = false; | ||||
| 	int backend_drm_fd = wlr_backend_get_drm_fd(backend); | ||||
| 	if (is_auto && backend_drm_fd >= 0) { | ||||
| 		char *render_node = drmGetRenderDeviceNameFromFd(backend_drm_fd); | ||||
| 		has_render_node = render_node != NULL; | ||||
| 		free(render_node); | ||||
| 	} | ||||
| 
 | ||||
| 	if ((is_auto && !has_render_node) || strcmp(renderer_name, "pixman") == 0) { | ||||
| 	if ((is_auto && !has_render_node(backend)) || strcmp(renderer_name, "pixman") == 0) { | ||||
| 		renderer = wlr_pixman_renderer_create(); | ||||
| 		if (renderer) { | ||||
| 			goto out; | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Alexander Orzechowski
						Alexander Orzechowski