glamor: Check that storage format is compatible with RENDER format
Fixes x2r10g10b10 related rendercheck failures.
Reviewed-by: Eric Anholt <eric@anholt.net>
(cherry picked from commit 7e6faa5b3c)
			
			
This commit is contained in:
		
							parent
							
								
									356cf07b8a
								
							
						
					
					
						commit
						7b0f6102df
					
				|  | @ -766,18 +766,27 @@ glamor_set_normalize_tcoords_generic(PixmapPtr pixmap, | |||
|  * | ||||
|  * We could support many more formats by using GL_ARB_texture_view to | ||||
|  * parse the same bits as different formats.  For now, we only support | ||||
|  * tweaking whether we sample the alpha bits of an a8r8g8b8, or just | ||||
|  * force them to 1. | ||||
|  * tweaking whether we sample the alpha bits, or just force them to 1. | ||||
|  */ | ||||
| static Bool | ||||
| glamor_render_format_is_supported(PictFormatShort format) | ||||
| glamor_render_format_is_supported(PicturePtr picture) | ||||
| { | ||||
|     switch (format) { | ||||
|     PictFormatShort storage_format; | ||||
| 
 | ||||
|     /* Source-only pictures should always work */ | ||||
|     if (!picture->pDrawable) | ||||
|         return TRUE; | ||||
| 
 | ||||
|     storage_format = format_for_depth(picture->pDrawable->depth); | ||||
| 
 | ||||
|     switch (picture->format) { | ||||
|     case PICT_x2r10g10b10: | ||||
|         return storage_format == PICT_x2r10g10b10; | ||||
|     case PICT_a8r8g8b8: | ||||
|     case PICT_x8r8g8b8: | ||||
|         return storage_format == PICT_a8r8g8b8 || storage_format == PICT_x8r8g8b8; | ||||
|     case PICT_a8: | ||||
|         return TRUE; | ||||
|         return storage_format == PICT_a8; | ||||
|     default: | ||||
|         return FALSE; | ||||
|     } | ||||
|  | @ -815,7 +824,7 @@ glamor_composite_choose_shader(CARD8 op, | |||
|         goto fail; | ||||
|     } | ||||
| 
 | ||||
|     if (!glamor_render_format_is_supported(dest->format)) { | ||||
|     if (!glamor_render_format_is_supported(dest)) { | ||||
|         glamor_fallback("Unsupported dest picture format.\n"); | ||||
|         goto fail; | ||||
|     } | ||||
|  | @ -978,7 +987,7 @@ glamor_composite_choose_shader(CARD8 op, | |||
|                 goto fail; | ||||
|             } | ||||
|         } else { | ||||
|             if (source && !glamor_render_format_is_supported(source->format)) { | ||||
|             if (source && !glamor_render_format_is_supported(source)) { | ||||
|                 glamor_fallback("Unsupported source picture format.\n"); | ||||
|                 goto fail; | ||||
|             } | ||||
|  | @ -990,7 +999,7 @@ glamor_composite_choose_shader(CARD8 op, | |||
|                 goto fail; | ||||
|             } | ||||
|         } else if (mask) { | ||||
|             if (!glamor_render_format_is_supported(mask->format)) { | ||||
|             if (!glamor_render_format_is_supported(mask)) { | ||||
|                 glamor_fallback("Unsupported mask picture format.\n"); | ||||
|                 goto fail; | ||||
|             } | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue