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 |  * 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 |  * parse the same bits as different formats.  For now, we only support | ||||||
|  * tweaking whether we sample the alpha bits of an a8r8g8b8, or just |  * tweaking whether we sample the alpha bits, or just force them to 1. | ||||||
|  * force them to 1. |  | ||||||
|  */ |  */ | ||||||
| static Bool | 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: |     case PICT_x2r10g10b10: | ||||||
|  |         return storage_format == PICT_x2r10g10b10; | ||||||
|     case PICT_a8r8g8b8: |     case PICT_a8r8g8b8: | ||||||
|     case PICT_x8r8g8b8: |     case PICT_x8r8g8b8: | ||||||
|  |         return storage_format == PICT_a8r8g8b8 || storage_format == PICT_x8r8g8b8; | ||||||
|     case PICT_a8: |     case PICT_a8: | ||||||
|         return TRUE; |         return storage_format == PICT_a8; | ||||||
|     default: |     default: | ||||||
|         return FALSE; |         return FALSE; | ||||||
|     } |     } | ||||||
|  | @ -815,7 +824,7 @@ glamor_composite_choose_shader(CARD8 op, | ||||||
|         goto fail; |         goto fail; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     if (!glamor_render_format_is_supported(dest->format)) { |     if (!glamor_render_format_is_supported(dest)) { | ||||||
|         glamor_fallback("Unsupported dest picture format.\n"); |         glamor_fallback("Unsupported dest picture format.\n"); | ||||||
|         goto fail; |         goto fail; | ||||||
|     } |     } | ||||||
|  | @ -978,7 +987,7 @@ glamor_composite_choose_shader(CARD8 op, | ||||||
|                 goto fail; |                 goto fail; | ||||||
|             } |             } | ||||||
|         } else { |         } 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"); |                 glamor_fallback("Unsupported source picture format.\n"); | ||||||
|                 goto fail; |                 goto fail; | ||||||
|             } |             } | ||||||
|  | @ -990,7 +999,7 @@ glamor_composite_choose_shader(CARD8 op, | ||||||
|                 goto fail; |                 goto fail; | ||||||
|             } |             } | ||||||
|         } else if (mask) { |         } 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"); |                 glamor_fallback("Unsupported mask picture format.\n"); | ||||||
|                 goto fail; |                 goto fail; | ||||||
|             } |             } | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue