mirror of
				https://gitlab.freedesktop.org/wlroots/wlroots.git
				synced 2025-11-03 09:01:40 -05:00 
			
		
		
		
	render/egl, backend/wayland: add workaround for split render/display setups
Split render/display setups have two separate devices: one display-only with a primary node, and one render-only with a render node. However in these cases the EGL implementation and the Wayland compositor will advertise the display device instead of the render device [1]. The EGL implementation will magically open the render device when the display device is passed in. So just pass the display device as if it were a render device. Maybe in the future Mesa will advertise the render device instead and we'll be able to remove this workaround. [1]: https://gitlab.freedesktop.org/mesa/mesa/-/issues/4178
This commit is contained in:
		
							parent
							
								
									741da702bc
								
							
						
					
					
						commit
						b89bcffea4
					
				
					 2 changed files with 12 additions and 2 deletions
				
			
		| 
						 | 
				
			
			@ -143,7 +143,12 @@ static char *get_render_name(const char *name) {
 | 
			
		|||
	if (match == NULL) {
 | 
			
		||||
		wlr_log(WLR_ERROR, "Cannot find DRM device %s", name);
 | 
			
		||||
	} else if (!(match->available_nodes & (1 << DRM_NODE_RENDER))) {
 | 
			
		||||
		wlr_log(WLR_ERROR, "DRM device %s has no render node", name);
 | 
			
		||||
		// Likely a split display/render setup. Pick the primary node and hope
 | 
			
		||||
		// Mesa will open the right render node under-the-hood.
 | 
			
		||||
		wlr_log(WLR_DEBUG, "DRM device %s has no render node, "
 | 
			
		||||
			"falling back to primary node", name);
 | 
			
		||||
		assert(match->available_nodes & (1 << DRM_NODE_PRIMARY));
 | 
			
		||||
		render_name = strdup(match->nodes[DRM_NODE_PRIMARY]);
 | 
			
		||||
	} else {
 | 
			
		||||
		render_name = strdup(match->nodes[DRM_NODE_RENDER]);
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -766,7 +766,12 @@ static char *get_render_name(const char *name) {
 | 
			
		|||
	if (match == NULL) {
 | 
			
		||||
		wlr_log(WLR_ERROR, "Cannot find DRM device %s", name);
 | 
			
		||||
	} else if (!(match->available_nodes & (1 << DRM_NODE_RENDER))) {
 | 
			
		||||
		wlr_log(WLR_ERROR, "DRM device %s has no render node", name);
 | 
			
		||||
		// Likely a split display/render setup. Pick the primary node and hope
 | 
			
		||||
		// Mesa will open the right render node under-the-hood.
 | 
			
		||||
		wlr_log(WLR_DEBUG, "DRM device %s has no render node, "
 | 
			
		||||
			"falling back to primary node", name);
 | 
			
		||||
		assert(match->available_nodes & (1 << DRM_NODE_PRIMARY));
 | 
			
		||||
		render_name = strdup(match->nodes[DRM_NODE_PRIMARY]);
 | 
			
		||||
	} else {
 | 
			
		||||
		render_name = strdup(match->nodes[DRM_NODE_RENDER]);
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue