EXA: exaAssertNotDirty improvements.
* Return early if the valid region is empty or the pixmap is pinned. * Fix loop for several cliprects.
This commit is contained in:
		
							parent
							
								
									d3f8667341
								
							
						
					
					
						commit
						e869573b52
					
				| 
						 | 
					@ -464,12 +464,10 @@ exaAssertNotDirty (PixmapPtr pPixmap)
 | 
				
			||||||
    BoxPtr pBox = REGION_RECTS(pValidReg);
 | 
					    BoxPtr pBox = REGION_RECTS(pValidReg);
 | 
				
			||||||
    Bool ret = TRUE;
 | 
					    Bool ret = TRUE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (pExaPixmap == NULL || pExaPixmap->fb_ptr == NULL)
 | 
					    if (!nbox || exaPixmapIsPinned(pPixmap) || pExaPixmap->fb_ptr == NULL)
 | 
				
			||||||
	return ret;
 | 
						return ret;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    dst = pExaPixmap->sys_ptr;
 | 
					 | 
				
			||||||
    dst_pitch = pExaPixmap->sys_pitch;
 | 
					    dst_pitch = pExaPixmap->sys_pitch;
 | 
				
			||||||
    src = pExaPixmap->fb_ptr;
 | 
					 | 
				
			||||||
    src_pitch = pExaPixmap->fb_pitch;
 | 
					    src_pitch = pExaPixmap->fb_pitch;
 | 
				
			||||||
    cpp = pPixmap->drawable.bitsPerPixel / 8;
 | 
					    cpp = pPixmap->drawable.bitsPerPixel / 8;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -486,21 +484,18 @@ exaAssertNotDirty (PixmapPtr pPixmap)
 | 
				
			||||||
		continue;
 | 
							continue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	    rowbytes = (pBox->x2 - pBox->x1) * cpp;
 | 
						    rowbytes = (pBox->x2 - pBox->x1) * cpp;
 | 
				
			||||||
	    src += pBox->y1 * src_pitch + pBox->x1 * cpp;
 | 
						    src = pExaPixmap->fb_ptr + pBox->y1 * src_pitch + pBox->x1 * cpp;
 | 
				
			||||||
	    dst += pBox->y1 * dst_pitch + pBox->x1 * cpp;
 | 
						    dst = pExaPixmap->sys_ptr + pBox->y1 * dst_pitch + pBox->x1 * cpp;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	    for (y = pBox->y2 - pBox->y1; y; y--) {
 | 
						    for (y = pBox->y1; y < pBox->y2;
 | 
				
			||||||
		if (memcmp(dst + pBox->y1 * dst_pitch + pBox->x1 * cpp,
 | 
							 y++, src += src_pitch, dst += dst_pitch) {
 | 
				
			||||||
			   src + pBox->y1 * src_pitch + pBox->x1 * cpp,
 | 
							if (memcmp(dst, src, rowbytes) != 0) {
 | 
				
			||||||
			   (pBox->x2 - pBox->x1) * cpp) != 0) {
 | 
					 | 
				
			||||||
		    ret = FALSE;
 | 
							    ret = FALSE;
 | 
				
			||||||
 | 
							    exaPixmapDirty(pPixmap, pBox->x1, pBox->y1, pBox->x2,
 | 
				
			||||||
 | 
									   pBox->y2);
 | 
				
			||||||
		    break;
 | 
							    break;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		src += src_pitch;
 | 
					 | 
				
			||||||
		dst += dst_pitch;
 | 
					 | 
				
			||||||
	    }
 | 
						    }
 | 
				
			||||||
	    src -= pBox->y1 * src_pitch + pBox->x1 * cpp;
 | 
					 | 
				
			||||||
	    dst -= pBox->y1 * dst_pitch + pBox->x1 * cpp;
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    exaFinishAccess(&pPixmap->drawable, EXA_PREPARE_SRC);
 | 
					    exaFinishAccess(&pPixmap->drawable, EXA_PREPARE_SRC);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue