mirror of
				https://gitlab.freedesktop.org/wlroots/wlroots.git
				synced 2025-11-03 09:01:40 -05:00 
			
		
		
		
	Do not flush damage if swapping buffers failed
This should solve issues with multiple outputs on DRM backend.
This commit is contained in:
		
							parent
							
								
									7881d039b6
								
							
						
					
					
						commit
						20e6861021
					
				
					 2 changed files with 7 additions and 3 deletions
				
			
		| 
						 | 
					@ -210,7 +210,7 @@ static bool wlr_drm_connector_swap_buffers(struct wlr_output *output) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (conn->pageflip_pending) {
 | 
						if (conn->pageflip_pending) {
 | 
				
			||||||
		wlr_log(L_ERROR, "Skipping pageflip");
 | 
							wlr_log(L_ERROR, "Skipping pageflip");
 | 
				
			||||||
		return true;
 | 
							return false;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (drm->iface->crtc_pageflip(drm, conn, crtc, fb_id, NULL)) {
 | 
						if (drm->iface->crtc_pageflip(drm, conn, crtc, fb_id, NULL)) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -387,7 +387,9 @@ static void render_output(struct roots_output *output) {
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	int buffer_age = -1;
 | 
						int buffer_age = -1;
 | 
				
			||||||
	wlr_output_make_current(wlr_output, &buffer_age);
 | 
						if (!wlr_output_make_current(wlr_output, &buffer_age)) {
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	int width, height;
 | 
						int width, height;
 | 
				
			||||||
	output_get_transformed_size(output->wlr_output, &width, &height);
 | 
						output_get_transformed_size(output->wlr_output, &width, &height);
 | 
				
			||||||
| 
						 | 
					@ -482,7 +484,9 @@ static void render_output(struct roots_output *output) {
 | 
				
			||||||
renderer_end:
 | 
					renderer_end:
 | 
				
			||||||
	wlr_renderer_scissor(output->desktop->server->renderer, NULL);
 | 
						wlr_renderer_scissor(output->desktop->server->renderer, NULL);
 | 
				
			||||||
	wlr_renderer_end(server->renderer);
 | 
						wlr_renderer_end(server->renderer);
 | 
				
			||||||
	wlr_output_swap_buffers(wlr_output, &now, &damage);
 | 
						if (!wlr_output_swap_buffers(wlr_output, &now, &damage)) {
 | 
				
			||||||
 | 
							goto damage_finish;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	// same as decrementing, but works on unsigned integers
 | 
						// same as decrementing, but works on unsigned integers
 | 
				
			||||||
	output->previous_damage_idx += ROOTS_OUTPUT_PREVIOUS_DAMAGE_LEN - 1;
 | 
						output->previous_damage_idx += ROOTS_OUTPUT_PREVIOUS_DAMAGE_LEN - 1;
 | 
				
			||||||
	output->previous_damage_idx %= ROOTS_OUTPUT_PREVIOUS_DAMAGE_LEN;
 | 
						output->previous_damage_idx %= ROOTS_OUTPUT_PREVIOUS_DAMAGE_LEN;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue