glamor_render: Don't fallback when rendering glyphs with OpOver.
Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>
This commit is contained in:
		
							parent
							
								
									7acbe89561
								
							
						
					
					
						commit
						ea4c22716c
					
				|  | @ -996,7 +996,8 @@ Bool glamor_composite_choose_shader(CARD8 op, | ||||||
| 							   &source_solid_color[2], | 							   &source_solid_color[2], | ||||||
| 							   &source_solid_color[3], | 							   &source_solid_color[3], | ||||||
| 							   PICT_a8r8g8b8); | 							   PICT_a8r8g8b8); | ||||||
| 		} | 		} else | ||||||
|  | 			goto fail; | ||||||
| 	} else { | 	} else { | ||||||
| 		key.source = SHADER_SOURCE_TEXTURE_ALPHA; | 		key.source = SHADER_SOURCE_TEXTURE_ALPHA; | ||||||
| 	} | 	} | ||||||
|  | @ -1012,7 +1013,8 @@ Bool glamor_composite_choose_shader(CARD8 op, | ||||||
| 				     &mask_solid_color[1], | 				     &mask_solid_color[1], | ||||||
| 				     &mask_solid_color[2], | 				     &mask_solid_color[2], | ||||||
| 				     &mask_solid_color[3], PICT_a8r8g8b8); | 				     &mask_solid_color[3], PICT_a8r8g8b8); | ||||||
| 			} | 			} else | ||||||
|  | 				goto fail; | ||||||
| 		} else { | 		} else { | ||||||
| 			key.mask = SHADER_MASK_TEXTURE_ALPHA; | 			key.mask = SHADER_MASK_TEXTURE_ALPHA; | ||||||
| 		} | 		} | ||||||
|  | @ -1921,6 +1923,7 @@ glamor_composite_glyph_rects(CARD8 op, | ||||||
| { | { | ||||||
| 	int n; | 	int n; | ||||||
| 	glamor_composite_rect_t *r; | 	glamor_composite_rect_t *r; | ||||||
|  | 	Bool ok; | ||||||
| 
 | 
 | ||||||
| 	ValidatePicture(src); | 	ValidatePicture(src); | ||||||
| 	ValidatePicture(dst); | 	ValidatePicture(dst); | ||||||
|  | @ -1936,10 +1939,29 @@ glamor_composite_glyph_rects(CARD8 op, | ||||||
| 			mask_pixmap_priv = glamor_get_pixmap_private(glamor_get_drawable_pixmap(mask->pDrawable)); | 			mask_pixmap_priv = glamor_get_pixmap_private(glamor_get_drawable_pixmap(mask->pDrawable)); | ||||||
| 		if (src->pDrawable) | 		if (src->pDrawable) | ||||||
| 			src_pixmap_priv = glamor_get_pixmap_private(glamor_get_drawable_pixmap(src->pDrawable)); | 			src_pixmap_priv = glamor_get_pixmap_private(glamor_get_drawable_pixmap(src->pDrawable)); | ||||||
| 		if (glamor_composite_with_shader(op, src, mask, dst, src_pixmap_priv, | 
 | ||||||
|  | 		if (mask && mask->componentAlpha) { | ||||||
|  | 			if (op == PictOpOver) { | ||||||
|  | 				ok = glamor_composite_with_shader(PictOpOutReverse, | ||||||
|  | 						 src, mask, dst, src_pixmap_priv, | ||||||
|  | 						 mask_pixmap_priv, dst_pixmap_priv, nrect, rects); | ||||||
|  | 				if (!ok) | ||||||
|  | 					goto fallback; | ||||||
|  | 				ok |= glamor_composite_with_shader(PictOpAdd, | ||||||
|  | 						 src, mask, dst, src_pixmap_priv, | ||||||
|  | 						 mask_pixmap_priv, dst_pixmap_priv, nrect, rects); | ||||||
|  | 				if (ok) | ||||||
|  | 					return; | ||||||
|  | 				assert(0); | ||||||
|  | 			} | ||||||
|  | 		} else { | ||||||
|  | 				if (glamor_composite_with_shader(op, src, mask, dst, src_pixmap_priv, | ||||||
| 						 mask_pixmap_priv, dst_pixmap_priv, nrect, rects)) | 						 mask_pixmap_priv, dst_pixmap_priv, nrect, rects)) | ||||||
| 			return; | 			return; | ||||||
|  | 		} | ||||||
| 	} | 	} | ||||||
|  | 
 | ||||||
|  | fallback: | ||||||
| 	n = nrect; | 	n = nrect; | ||||||
| 	r = rects; | 	r = rects; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue