prime: Sync shared pixmap from root window instead of screen pixmap
The screen pixmap doesn't receive updates while there's a Present flip window. Reviewed-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Michel Dänzer <michel.daenzer@amd.com>
This commit is contained in:
		
							parent
							
								
									eb04b20160
								
							
						
					
					
						commit
						b5b292896f
					
				
							
								
								
									
										16
									
								
								dix/pixmap.c
								
								
								
								
							
							
						
						
									
										16
									
								
								dix/pixmap.c
								
								
								
								
							|  | @ -233,7 +233,8 @@ PixmapStartDirtyTracking(PixmapPtr src, | ||||||
|     RegionUnion(damageregion, damageregion, &dstregion); |     RegionUnion(damageregion, damageregion, &dstregion); | ||||||
|     RegionUninit(&dstregion); |     RegionUninit(&dstregion); | ||||||
| 
 | 
 | ||||||
|     DamageRegister(&src->drawable, dirty_update->damage); |     DamageRegister(screen->root ? &screen->root->drawable : &src->drawable, | ||||||
|  |                    dirty_update->damage); | ||||||
|     xorg_list_add(&dirty_update->ent, &screen->pixmap_dirty_list); |     xorg_list_add(&dirty_update->ent, &screen->pixmap_dirty_list); | ||||||
|     return TRUE; |     return TRUE; | ||||||
| } | } | ||||||
|  | @ -260,6 +261,7 @@ PixmapDirtyCopyArea(PixmapPtr dst, | ||||||
|                     RegionPtr dirty_region) |                     RegionPtr dirty_region) | ||||||
| { | { | ||||||
|     ScreenPtr pScreen = dirty->src->drawable.pScreen; |     ScreenPtr pScreen = dirty->src->drawable.pScreen; | ||||||
|  |     DrawablePtr src = pScreen->root ? &pScreen->root->drawable : &dirty->src->drawable; | ||||||
|     int n; |     int n; | ||||||
|     BoxPtr b; |     BoxPtr b; | ||||||
|     GCPtr pGC; |     GCPtr pGC; | ||||||
|  | @ -267,7 +269,13 @@ PixmapDirtyCopyArea(PixmapPtr dst, | ||||||
|     n = RegionNumRects(dirty_region); |     n = RegionNumRects(dirty_region); | ||||||
|     b = RegionRects(dirty_region); |     b = RegionRects(dirty_region); | ||||||
| 
 | 
 | ||||||
|     pGC = GetScratchGC(dirty->src->drawable.depth, pScreen); |     pGC = GetScratchGC(src->depth, pScreen); | ||||||
|  |     if (pScreen->root) { | ||||||
|  |         ChangeGCVal subWindowMode; | ||||||
|  | 
 | ||||||
|  |         subWindowMode.val = IncludeInferiors; | ||||||
|  |         ChangeGC(NullClient, pGC, GCSubwindowMode, &subWindowMode); | ||||||
|  |     } | ||||||
|     ValidateGC(&dst->drawable, pGC); |     ValidateGC(&dst->drawable, pGC); | ||||||
| 
 | 
 | ||||||
|     while (n--) { |     while (n--) { | ||||||
|  | @ -278,7 +286,7 @@ PixmapDirtyCopyArea(PixmapPtr dst, | ||||||
|         w = dst_box.x2 - dst_box.x1; |         w = dst_box.x2 - dst_box.x1; | ||||||
|         h = dst_box.y2 - dst_box.y1; |         h = dst_box.y2 - dst_box.y1; | ||||||
| 
 | 
 | ||||||
|         pGC->ops->CopyArea(&dirty->src->drawable, &dst->drawable, pGC, |         pGC->ops->CopyArea(src, &dst->drawable, pGC, | ||||||
|                            dirty->x + dst_box.x1, dirty->y + dst_box.y1, w, h, |                            dirty->x + dst_box.x1, dirty->y + dst_box.y1, w, h, | ||||||
|                            dirty->dst_x + dst_box.x1, |                            dirty->dst_x + dst_box.x1, | ||||||
|                            dirty->dst_y + dst_box.y1); |                            dirty->dst_y + dst_box.y1); | ||||||
|  | @ -301,7 +309,7 @@ PixmapDirtyCompositeRotate(PixmapPtr dst_pixmap, | ||||||
|     int error; |     int error; | ||||||
| 
 | 
 | ||||||
|     src = CreatePicture(None, |     src = CreatePicture(None, | ||||||
|                         &dirty->src->drawable, |                         &pScreen->root->drawable, | ||||||
|                         format, |                         format, | ||||||
|                         CPSubwindowMode, |                         CPSubwindowMode, | ||||||
|                         &include_inferiors, serverClient, &error); |                         &include_inferiors, serverClient, &error); | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue