glamor: Add fallbacks for Render.
This commit is contained in:
		
							parent
							
								
									de675893b7
								
							
						
					
					
						commit
						e9d4794cd0
					
				|  | @ -123,8 +123,8 @@ glamor_fallback(char *format, ...) | |||
|     va_list ap; | ||||
| 
 | ||||
|     va_start(ap, format); | ||||
|     LogMessageVerb(X_INFO, 1, "glamor fallback: "); | ||||
|     LogVMessageVerb(X_INFO, 1, format, ap); | ||||
|     LogMessageVerb(X_INFO, 0, "fallback: "); | ||||
|     LogVMessageVerb(X_NONE, 0, format, ap); | ||||
|     va_end(ap); | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -25,7 +25,6 @@ | |||
|  * | ||||
|  */ | ||||
| 
 | ||||
| 
 | ||||
| /** @file glamor_render.c
 | ||||
|  * | ||||
|  * Render acceleration implementation | ||||
|  | @ -35,6 +34,7 @@ | |||
| 
 | ||||
| #ifdef RENDER | ||||
| #include "mipict.h" | ||||
| #include "fbpict.h" | ||||
| 
 | ||||
| #include "glu3/glu3.h" | ||||
| 
 | ||||
|  | @ -474,11 +474,11 @@ glamor_composite(CARD8 op, | |||
| 	source_pixmap = glamor_get_drawable_pixmap(source->pDrawable); | ||||
| 	source_pixmap_priv = glamor_get_pixmap_private(source_pixmap); | ||||
| 	if (source_pixmap == dest_pixmap) { | ||||
| 	    ErrorF("source == dest\n"); | ||||
| 	    glamor_fallback("glamor_composite(): source == dest\n"); | ||||
| 	    goto fail; | ||||
| 	} | ||||
| 	if (!source_pixmap_priv || source_pixmap_priv->tex == 0) { | ||||
| 	    ErrorF("no FBO in source\n"); | ||||
| 	    glamor_fallback("glamor_composite(): no FBO in source\n"); | ||||
| 	    goto fail; | ||||
| 	} | ||||
|     } | ||||
|  | @ -486,18 +486,19 @@ glamor_composite(CARD8 op, | |||
| 	mask_pixmap = glamor_get_drawable_pixmap(mask->pDrawable); | ||||
| 	mask_pixmap_priv = glamor_get_pixmap_private(mask_pixmap); | ||||
| 	if (mask_pixmap == dest_pixmap) { | ||||
| 	    ErrorF("mask == dest\n"); | ||||
| 	    glamor_fallback("glamor_composite(): mask == dest\n"); | ||||
| 	    goto fail; | ||||
| 	} | ||||
| 	if (!mask_pixmap_priv || mask_pixmap_priv->tex == 0) { | ||||
| 	    ErrorF("no FBO in mask\n"); | ||||
| 	    glamor_fallback("glamor_composite(): no FBO in mask\n"); | ||||
| 	    goto fail; | ||||
| 	} | ||||
|     } | ||||
| 
 | ||||
|     shader = glamor_lookup_composite_shader(screen, &key); | ||||
|     if (shader->prog == 0) { | ||||
| 	ErrorF("No program compiled for this render accel mode\n"); | ||||
| 	glamor_fallback("glamor_composite(): " | ||||
| 			"no shader program for this render acccel mode\n"); | ||||
| 	goto fail; | ||||
|     } | ||||
| 
 | ||||
|  | @ -570,9 +571,31 @@ glamor_composite(CARD8 op, | |||
|     return; | ||||
| 
 | ||||
| fail: | ||||
|     glamor_set_composite_op(screen, PictOpSrc, dest, mask); | ||||
|     glamor_fallback("glamor_composite(): " | ||||
| 		    "from picts %p/%p to pict %p\n", source, mask, dest); | ||||
| 
 | ||||
|     glUseProgramObjectARB(0); | ||||
|     glamor_solid_fail_region(dest_pixmap, x_dest, y_dest, width, height); | ||||
|     if (glamor_prepare_access(dest->pDrawable, GLAMOR_ACCESS_RW)) { | ||||
| 	if (source->pDrawable == NULL || | ||||
| 	    glamor_prepare_access(source->pDrawable, GLAMOR_ACCESS_RO)) | ||||
| 	{ | ||||
| 	    if (!mask || mask->pDrawable == NULL || | ||||
| 		glamor_prepare_access(mask->pDrawable, GLAMOR_ACCESS_RO)) | ||||
| 	    { | ||||
| 		fbComposite(op, | ||||
| 			    source, mask, dest, | ||||
| 			    x_source, y_source, | ||||
| 			    x_mask, y_mask, | ||||
| 			    x_dest, y_dest, | ||||
| 			    width, height); | ||||
| 		if (mask && mask->pDrawable != NULL) | ||||
| 		    glamor_finish_access(mask->pDrawable); | ||||
| 	    } | ||||
| 	    if (source->pDrawable != NULL) | ||||
| 		glamor_finish_access(source->pDrawable); | ||||
| 	} | ||||
| 	glamor_finish_access(dest->pDrawable); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue