glamor: Drop the REVERT_UPLOADING_1_5_5_5 path.
There was only a pretty special case that could have even worked -- you've got a GLES2 renderer, you've got a SHM pixmap, it's 1555 (not the usual 565 for 16-bit), and you're little endian (BE was broken, since GL's 5_5_5_1 picks the 1 bit from the lowest bit of the short, and on BE we weren't doing the conversion path that swaps around the channels). This is just not worth the complexity. Reviewed-by: Adam Jackson <ajax@redhat.com> Signed-off-by: Eric Anholt <eric@anholt.net>
This commit is contained in:
		
							parent
							
								
									2cc7a0815e
								
							
						
					
					
						commit
						8f1411c384
					
				|  | @ -151,11 +151,7 @@ glamor_get_tex_format_type_from_pictformat(ScreenPtr pScreen, | |||
|         if (glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP) { | ||||
|             *tex_type = GL_UNSIGNED_SHORT_1_5_5_5_REV; | ||||
|         } else { | ||||
|             *tex_type = GL_UNSIGNED_SHORT_5_5_5_1; | ||||
|             if (is_little_endian) | ||||
|                 *revert = REVERT_UPLOADING_1_5_5_5; | ||||
|             else | ||||
|                 *revert = REVERT_NONE; | ||||
|             return FALSE; | ||||
|         } | ||||
|         break; | ||||
| 
 | ||||
|  | @ -166,13 +162,7 @@ glamor_get_tex_format_type_from_pictformat(ScreenPtr pScreen, | |||
|             *tex_format = GL_BGRA; | ||||
|             *tex_type = GL_UNSIGNED_SHORT_1_5_5_5_REV; | ||||
|         } else { | ||||
|             *tex_format = GL_RGBA; | ||||
|             *tex_type = GL_UNSIGNED_SHORT_5_5_5_1; | ||||
|             if (is_little_endian) | ||||
|                 *revert = REVERT_UPLOADING_1_5_5_5; | ||||
|             else | ||||
|                 *revert = REVERT_NONE; | ||||
|             *swap_rb = SWAP_UPLOADING; | ||||
|             return FALSE; | ||||
|         } | ||||
|         break; | ||||
| 
 | ||||
|  | @ -215,8 +205,7 @@ glamor_get_tex_format_type_from_pictformat(ScreenPtr pScreen, | |||
| } | ||||
| 
 | ||||
| static void * | ||||
| _glamor_color_convert_a1_a8(void *src_bits, void *dst_bits, int w, int h, | ||||
|                             int stride) | ||||
| glamor_convert_a1_a8(void *src_bits, void *dst_bits, int w, int h, int stride) | ||||
| { | ||||
|     PictFormatShort dst_format = PICT_a8, src_format = PICT_a1; | ||||
|     pixman_image_t *dst_image; | ||||
|  | @ -244,107 +233,6 @@ _glamor_color_convert_a1_a8(void *src_bits, void *dst_bits, int w, int h, | |||
|     return dst_bits; | ||||
| } | ||||
| 
 | ||||
| #define ADJUST_BITS(d, src_bits, dst_bits)	(((dst_bits) == (src_bits)) ? (d) : 				\ | ||||
| 							(((dst_bits) > (src_bits)) ? 				\ | ||||
| 							  (((d) << ((dst_bits) - (src_bits))) 			\ | ||||
| 								   + (( 1 << ((dst_bits) - (src_bits))) >> 1))	\ | ||||
| 								:  ((d) >> ((src_bits) - (dst_bits))))) | ||||
| 
 | ||||
| #define GLAMOR_DO_CONVERT(src, dst, no_alpha, swap,		\ | ||||
| 			  a_shift_src, a_bits_src,		\ | ||||
| 			  b_shift_src, b_bits_src,		\ | ||||
| 			  g_shift_src, g_bits_src,		\ | ||||
| 			  r_shift_src, r_bits_src,		\ | ||||
| 			  a_shift, a_bits,			\ | ||||
| 			  b_shift, b_bits,			\ | ||||
| 			  g_shift, g_bits,			\ | ||||
| 			  r_shift, r_bits)			\ | ||||
| 	do {								\ | ||||
| 		typeof(src) a,b,g,r;					\ | ||||
| 		typeof(src) a_mask_src, b_mask_src, g_mask_src, r_mask_src;\ | ||||
| 		a_mask_src = (((1 << (a_bits_src)) - 1) << a_shift_src);\ | ||||
| 		b_mask_src = (((1 << (b_bits_src)) - 1) << b_shift_src);\ | ||||
| 		g_mask_src = (((1 << (g_bits_src)) - 1) << g_shift_src);\ | ||||
| 		r_mask_src = (((1 << (r_bits_src)) - 1) << r_shift_src);\ | ||||
| 		if (no_alpha)						\ | ||||
| 			a = (a_mask_src) >> (a_shift_src);			\ | ||||
| 		else							\ | ||||
| 			a = ((src) & (a_mask_src)) >> (a_shift_src);	\ | ||||
| 		b = ((src) & (b_mask_src)) >> (b_shift_src);		\ | ||||
| 		g = ((src) & (g_mask_src)) >> (g_shift_src);		\ | ||||
| 		r = ((src) & (r_mask_src)) >> (r_shift_src);		\ | ||||
| 		a = ADJUST_BITS(a, a_bits_src, a_bits);			\ | ||||
| 		b = ADJUST_BITS(b, b_bits_src, b_bits);			\ | ||||
| 		g = ADJUST_BITS(g, g_bits_src, g_bits);			\ | ||||
| 		r = ADJUST_BITS(r, r_bits_src, r_bits);			\ | ||||
| 		if (swap == 0)						\ | ||||
| 			(*dst) = ((a) << (a_shift)) | ((b) << (b_shift)) | ((g) << (g_shift)) | ((r) << (r_shift)); \ | ||||
| 		else 												    \ | ||||
| 			(*dst) = ((a) << (a_shift)) | ((r) << (b_shift)) | ((g) << (g_shift)) | ((b) << (r_shift)); \ | ||||
| 	} while (0) | ||||
| 
 | ||||
| 
 | ||||
| static void * | ||||
| _glamor_color_revert_x1b5g5r5(void *src_bits, void *dst_bits, int w, int h, | ||||
|                               int stride, int no_alpha, int swap_rb) | ||||
| { | ||||
|     int x, y; | ||||
|     unsigned short *words, *saved_words, *source_words; | ||||
|     int swap = swap_rb != SWAP_NONE_UPLOADING; | ||||
| 
 | ||||
|     words = dst_bits; | ||||
|     source_words = src_bits; | ||||
|     saved_words = words; | ||||
| 
 | ||||
|     for (y = 0; y < h; y++) { | ||||
|         DEBUGF("Line %d :  ", y); | ||||
|         for (x = 0; x < w; x++) { | ||||
|             unsigned short pixel = source_words[x]; | ||||
| 
 | ||||
|             GLAMOR_DO_CONVERT(pixel, &words[x], no_alpha, swap, | ||||
|                               15, 1, 10, 5, 5, 5, 0, 5, | ||||
|                               0, 1, 1, 5, 6, 5, 11, 5); | ||||
|             DEBUGF("%04x:%04x ", pixel, words[x]); | ||||
|         } | ||||
|         DEBUGF("\n"); | ||||
|         words += stride / sizeof(*words); | ||||
|         source_words += stride / sizeof(*words); | ||||
|     } | ||||
|     DEBUGF("\n"); | ||||
|     return saved_words; | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  * This function is to convert an unsupported color format to/from a | ||||
|  * supported GL format. | ||||
|  * Here are the current scenarios: | ||||
|  * | ||||
|  * @no_alpha: | ||||
|  * 	If it is set, then we need to wire the alpha value to 1. | ||||
|  * @revert: | ||||
| 	REVERT_UPLOADING_A1		: convert an A1 buffer to an Alpha8 buffer | ||||
| 	REVERT_UPLOADING_1_5_5_5    	: convert X1R5G5B5 to B5G5R5X1 | ||||
|    @swap_rb: if we have the swap_rb set, then we need to swap the R and B's position. | ||||
|  * | ||||
|  */ | ||||
| 
 | ||||
| static void * | ||||
| glamor_color_convert_to_bits(void *src_bits, void *dst_bits, int w, int h, | ||||
|                              int stride, int no_alpha, int revert, int swap_rb) | ||||
| { | ||||
|     if (revert == REVERT_UPLOADING_A1) { | ||||
|         return _glamor_color_convert_a1_a8(src_bits, dst_bits, w, h, stride); | ||||
|     } | ||||
|     else if (revert == REVERT_UPLOADING_1_5_5_5) { | ||||
|         return _glamor_color_revert_x1b5g5r5(src_bits, dst_bits, w, h, stride, | ||||
|                                              no_alpha, swap_rb); | ||||
|     } | ||||
|     else | ||||
|         ErrorF("convert a non-supported mode %x.\n", revert); | ||||
| 
 | ||||
|     return NULL; | ||||
| } | ||||
| 
 | ||||
| /**
 | ||||
|  * Upload pixmap to a specified texture. | ||||
|  * This texture may not be the one attached to it. | ||||
|  | @ -419,7 +307,7 @@ _glamor_upload_bits_to_pixmap_texture(PixmapPtr pixmap, GLenum format, | |||
|     if (bits == NULL) | ||||
|         goto ready_to_upload; | ||||
| 
 | ||||
|     if (revert > REVERT_NORMAL) { | ||||
|     if (revert == REVERT_UPLOADING_A1) { | ||||
|         /* XXX if we are restoring the pixmap, then we may not need to allocate
 | ||||
|          * new buffer */ | ||||
|         void *converted_bits; | ||||
|  | @ -431,8 +319,7 @@ _glamor_upload_bits_to_pixmap_texture(PixmapPtr pixmap, GLenum format, | |||
| 
 | ||||
|         if (converted_bits == NULL) | ||||
|             return FALSE; | ||||
|         bits = glamor_color_convert_to_bits(bits, converted_bits, w, h, | ||||
|                                             stride, no_alpha, revert, swap_rb); | ||||
|         bits = glamor_convert_a1_a8(bits, converted_bits, w, h, stride); | ||||
|         if (bits == NULL) { | ||||
|             free(converted_bits); | ||||
|             ErrorF("Failed to convert pixmap no_alpha %d," | ||||
|  |  | |||
|  | @ -768,7 +768,6 @@ format_for_pixmap(PixmapPtr pixmap) | |||
| #define REVERT_NONE       		0 | ||||
| #define REVERT_NORMAL     		1 | ||||
| #define REVERT_UPLOADING_A1		3 | ||||
| #define REVERT_UPLOADING_1_5_5_5    	8 | ||||
| 
 | ||||
| #define SWAP_UPLOADING	  	2 | ||||
| #define SWAP_NONE_UPLOADING	3 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue