glamor: Make glamor_solid_boxes take a DrawablePtr
Instead of a PixmapPtr. Gives better results if the window depth doesn't match the backing pixmap depth. Closes: https://gitlab.freedesktop.org/xorg/xserver/-/issues/1565
This commit is contained in:
		
							parent
							
								
									2de50de563
								
							
						
					
					
						commit
						d4e11f4c92
					
				|  | @ -227,12 +227,10 @@ glamor_composite_rectangles(CARD8 op, | |||
|     boxes = pixman_region_rectangles(®ion, &num_boxes); | ||||
|     if (op == PictOpSrc || op == PictOpClear) { | ||||
|         CARD32 pixel; | ||||
|         int dst_x, dst_y; | ||||
| 
 | ||||
|         glamor_get_drawable_deltas(dst->pDrawable, pixmap, &dst_x, &dst_y); | ||||
|         pixman_region_translate(®ion, dst_x, dst_y); | ||||
|         pixman_region_translate(®ion, -dst->pDrawable->x, -dst->pDrawable->y); | ||||
| 
 | ||||
|         DEBUGF("%s: pixmap +(%d, %d) extents (%d, %d),(%d, %d)\n", | ||||
|         DEBUGF("%s: drawable extents (%d, %d),(%d, %d)\n", | ||||
|                __FUNCTION__, dst_x, dst_y, | ||||
|                RegionExtents(®ion)->x1, RegionExtents(®ion)->y1, | ||||
|                RegionExtents(®ion)->x2, RegionExtents(®ion)->y2); | ||||
|  | @ -241,7 +239,7 @@ glamor_composite_rectangles(CARD8 op, | |||
|             pixel = 0; | ||||
|         else | ||||
|             miRenderColorToPixel(dst->pFormat, color, &pixel); | ||||
|         glamor_solid_boxes(pixmap, boxes, num_boxes, pixel); | ||||
|         glamor_solid_boxes(dst->pDrawable, boxes, num_boxes, pixel); | ||||
| 
 | ||||
|         goto done; | ||||
|     } | ||||
|  |  | |||
|  | @ -895,7 +895,7 @@ glamor_solid(PixmapPtr pixmap, int x, int y, int width, int height, | |||
|              unsigned long fg_pixel); | ||||
| 
 | ||||
| void | ||||
| glamor_solid_boxes(PixmapPtr pixmap, | ||||
| glamor_solid_boxes(DrawablePtr drawable, | ||||
|                    BoxPtr box, int nbox, unsigned long fg_pixel); | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
|  | @ -432,7 +432,6 @@ glamor_image_text(DrawablePtr drawable, GCPtr gc, | |||
|         int c; | ||||
|         RegionRec region; | ||||
|         BoxRec box; | ||||
|         int off_x, off_y; | ||||
| 
 | ||||
|         /* Check planemask before drawing background to
 | ||||
|          * bail early if it's not OK | ||||
|  | @ -443,8 +442,6 @@ glamor_image_text(DrawablePtr drawable, GCPtr gc, | |||
|             if (charinfo[c]) | ||||
|                 width += charinfo[c]->metrics.characterWidth; | ||||
| 
 | ||||
|         glamor_get_drawable_deltas(drawable, pixmap, &off_x, &off_y); | ||||
| 
 | ||||
|         if (width >= 0) { | ||||
|             box.x1 = drawable->x + x; | ||||
|             box.x2 = drawable->x + x + width; | ||||
|  | @ -456,8 +453,8 @@ glamor_image_text(DrawablePtr drawable, GCPtr gc, | |||
|         box.y2 = drawable->y + y + gc->font->info.fontDescent; | ||||
|         RegionInit(®ion, &box, 1); | ||||
|         RegionIntersect(®ion, ®ion, gc->pCompositeClip); | ||||
|         RegionTranslate(®ion, off_x, off_y); | ||||
|         glamor_solid_boxes(pixmap, RegionRects(®ion), RegionNumRects(®ion), gc->bgPixel); | ||||
|         RegionTranslate(®ion, -drawable->x, -drawable->y); | ||||
|         glamor_solid_boxes(drawable, RegionRects(®ion), RegionNumRects(®ion), gc->bgPixel); | ||||
|         RegionUninit(®ion); | ||||
|     } | ||||
| 
 | ||||
|  |  | |||
|  | @ -23,10 +23,9 @@ | |||
| #include "glamor_priv.h" | ||||
| 
 | ||||
| void | ||||
| glamor_solid_boxes(PixmapPtr pixmap, | ||||
| glamor_solid_boxes(DrawablePtr drawable, | ||||
|                    BoxPtr box, int nbox, unsigned long fg_pixel) | ||||
| { | ||||
|     DrawablePtr drawable = &pixmap->drawable; | ||||
|     GCPtr gc; | ||||
|     xRectangle *rect; | ||||
|     int n; | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue