mirror of
				https://github.com/encounter/SDL.git
				synced 2025-10-25 19:20:25 +00:00 
			
		
		
		
	BlitNtoN BlitNtoNKey: remove non-aligned word read/store (bpp 3<->4) (Bug 4503)
Mips and (old) ARM doesn't allow word read/write when adress isn't 4bytes aligned. So just remove that.
This commit is contained in:
		
							parent
							
								
									6fbe9e23fa
								
							
						
					
					
						commit
						47fb781b94
					
				| @ -2251,9 +2251,6 @@ BlitNtoN(SDL_BlitInfo * info) | |||||||
|         srcfmt->format != SDL_PIXELFORMAT_ARGB2101010 && |         srcfmt->format != SDL_PIXELFORMAT_ARGB2101010 && | ||||||
|         dstfmt->format != SDL_PIXELFORMAT_ARGB2101010) { |         dstfmt->format != SDL_PIXELFORMAT_ARGB2101010) { | ||||||
| 
 | 
 | ||||||
|         Uint32 *src32 = (Uint32*)src; |  | ||||||
|         Uint32 *dst32 = (Uint32*)dst; |  | ||||||
| 
 |  | ||||||
|         /* Find the appropriate permutation */ |         /* Find the appropriate permutation */ | ||||||
|         int alpha_channel, p0, p1, p2, p3; |         int alpha_channel, p0, p1, p2, p3; | ||||||
|         get_permutation(srcfmt, dstfmt, &p0, &p1, &p2, &p3, &alpha_channel); |         get_permutation(srcfmt, dstfmt, &p0, &p1, &p2, &p3, &alpha_channel); | ||||||
| @ -2262,19 +2259,17 @@ BlitNtoN(SDL_BlitInfo * info) | |||||||
|             /* *INDENT-OFF* */ |             /* *INDENT-OFF* */ | ||||||
|             DUFFS_LOOP( |             DUFFS_LOOP( | ||||||
|             { |             { | ||||||
|                 Uint8 *s8 = (Uint8 *)src32; |                 dst[0] = src[p0]; | ||||||
|                 Uint8 *d8 = (Uint8 *)dst32; |                 dst[1] = src[p1]; | ||||||
|                 d8[0] = s8[p0]; |                 dst[2] = src[p2]; | ||||||
|                 d8[1] = s8[p1]; |                 dst[3] = src[p3]; | ||||||
|                 d8[2] = s8[p2]; |                 dst[alpha_channel] = alpha; | ||||||
|                 d8[3] = s8[p3]; |                 src += 4; | ||||||
|                 d8[alpha_channel] = alpha; |                 dst += 4; | ||||||
|                 ++src32; |  | ||||||
|                 ++dst32; |  | ||||||
|             }, width); |             }, width); | ||||||
|             /* *INDENT-ON* */ |             /* *INDENT-ON* */ | ||||||
|             src32 = (Uint32 *)((Uint8 *)src32 + srcskip); |             src += srcskip; | ||||||
|             dst32 = (Uint32 *)((Uint8 *)dst32 + dstskip); |             dst += dstskip; | ||||||
|         } |         } | ||||||
|         return; |         return; | ||||||
|     } |     } | ||||||
| @ -2283,8 +2278,6 @@ BlitNtoN(SDL_BlitInfo * info) | |||||||
|     if (srcbpp == 4 && dstbpp == 3 && |     if (srcbpp == 4 && dstbpp == 3 && | ||||||
|         srcfmt->format != SDL_PIXELFORMAT_ARGB2101010) { |         srcfmt->format != SDL_PIXELFORMAT_ARGB2101010) { | ||||||
| 
 | 
 | ||||||
|         Uint32 *src32 = (Uint32*)src; |  | ||||||
| 
 |  | ||||||
|         /* Find the appropriate permutation */ |         /* Find the appropriate permutation */ | ||||||
|         int p0, p1, p2, p3; |         int p0, p1, p2, p3; | ||||||
|         get_permutation(srcfmt, dstfmt, &p0, &p1, &p2, &p3, NULL); |         get_permutation(srcfmt, dstfmt, &p0, &p1, &p2, &p3, NULL); | ||||||
| @ -2293,15 +2286,14 @@ BlitNtoN(SDL_BlitInfo * info) | |||||||
|             /* *INDENT-OFF* */ |             /* *INDENT-OFF* */ | ||||||
|             DUFFS_LOOP( |             DUFFS_LOOP( | ||||||
|             { |             { | ||||||
|                 Uint8 *s8 = (Uint8 *)src32; |                 dst[0] = src[p0]; | ||||||
|                 dst[0] = s8[p0]; |                 dst[1] = src[p1]; | ||||||
|                 dst[1] = s8[p1]; |                 dst[2] = src[p2]; | ||||||
|                 dst[2] = s8[p2]; |                 src += 4; | ||||||
|                 ++src32; |  | ||||||
|                 dst += 3; |                 dst += 3; | ||||||
|             }, width); |             }, width); | ||||||
|             /* *INDENT-ON* */ |             /* *INDENT-ON* */ | ||||||
|             src32 = (Uint32 *)((Uint8 *)src32 + srcskip); |             src += srcskip; | ||||||
|             dst += dstskip; |             dst += dstskip; | ||||||
|         } |         } | ||||||
|         return; |         return; | ||||||
| @ -2311,8 +2303,6 @@ BlitNtoN(SDL_BlitInfo * info) | |||||||
|     if (srcbpp == 3 && dstbpp == 4 && |     if (srcbpp == 3 && dstbpp == 4 && | ||||||
|         dstfmt->format != SDL_PIXELFORMAT_ARGB2101010) { |         dstfmt->format != SDL_PIXELFORMAT_ARGB2101010) { | ||||||
| 
 | 
 | ||||||
|         Uint32 *dst32 = (Uint32*)dst; |  | ||||||
| 
 |  | ||||||
|         /* Find the appropriate permutation */ |         /* Find the appropriate permutation */ | ||||||
|         int alpha_channel, p0, p1, p2, p3; |         int alpha_channel, p0, p1, p2, p3; | ||||||
|         get_permutation(srcfmt, dstfmt, &p0, &p1, &p2, &p3, &alpha_channel); |         get_permutation(srcfmt, dstfmt, &p0, &p1, &p2, &p3, &alpha_channel); | ||||||
| @ -2321,18 +2311,17 @@ BlitNtoN(SDL_BlitInfo * info) | |||||||
|             /* *INDENT-OFF* */ |             /* *INDENT-OFF* */ | ||||||
|             DUFFS_LOOP( |             DUFFS_LOOP( | ||||||
|             { |             { | ||||||
|                 Uint8 *d8 = (Uint8 *)dst32; |                 dst[0] = src[p0]; | ||||||
|                 d8[0] = src[p0]; |                 dst[1] = src[p1]; | ||||||
|                 d8[1] = src[p1]; |                 dst[2] = src[p2]; | ||||||
|                 d8[2] = src[p2]; |                 dst[3] = src[p3]; | ||||||
|                 d8[3] = src[p3]; |                 dst[alpha_channel] = alpha; | ||||||
|                 d8[alpha_channel] = alpha; |  | ||||||
|                 src += 3; |                 src += 3; | ||||||
|                 ++dst32; |                 dst += 4; | ||||||
|             }, width); |             }, width); | ||||||
|             /* *INDENT-ON* */ |             /* *INDENT-ON* */ | ||||||
|             src += srcskip; |             src += srcskip; | ||||||
|             dst32 = (Uint32 *)((Uint8 *)dst32 + dstskip); |             dst += dstskip; | ||||||
|         } |         } | ||||||
|         return; |         return; | ||||||
|     } |     } | ||||||
| @ -2377,9 +2366,6 @@ BlitNtoNCopyAlpha(SDL_BlitInfo * info) | |||||||
|         srcfmt->format != SDL_PIXELFORMAT_ARGB2101010 && |         srcfmt->format != SDL_PIXELFORMAT_ARGB2101010 && | ||||||
|         dstfmt->format != SDL_PIXELFORMAT_ARGB2101010) { |         dstfmt->format != SDL_PIXELFORMAT_ARGB2101010) { | ||||||
| 
 | 
 | ||||||
|         Uint32 *src32 = (Uint32*)src; |  | ||||||
|         Uint32 *dst32 = (Uint32*)dst; |  | ||||||
| 
 |  | ||||||
|         /* Find the appropriate permutation */ |         /* Find the appropriate permutation */ | ||||||
|         int p0, p1, p2, p3; |         int p0, p1, p2, p3; | ||||||
|         get_permutation(srcfmt, dstfmt, &p0, &p1, &p2, &p3, NULL); |         get_permutation(srcfmt, dstfmt, &p0, &p1, &p2, &p3, NULL); | ||||||
| @ -2388,18 +2374,16 @@ BlitNtoNCopyAlpha(SDL_BlitInfo * info) | |||||||
|             /* *INDENT-OFF* */ |             /* *INDENT-OFF* */ | ||||||
|             DUFFS_LOOP( |             DUFFS_LOOP( | ||||||
|             { |             { | ||||||
|                 Uint8 *s8 = (Uint8 *)src32; |                 dst[0] = src[p0]; | ||||||
|                 Uint8 *d8 = (Uint8 *)dst32; |                 dst[1] = src[p1]; | ||||||
|                 d8[0] = s8[p0]; |                 dst[2] = src[p2]; | ||||||
|                 d8[1] = s8[p1]; |                 dst[3] = src[p3]; | ||||||
|                 d8[2] = s8[p2]; |                 src += 4; | ||||||
|                 d8[3] = s8[p3]; |                 dst += 4; | ||||||
|                 ++src32; |  | ||||||
|                 ++dst32; |  | ||||||
|             }, width); |             }, width); | ||||||
|             /* *INDENT-ON* */ |             /* *INDENT-ON* */ | ||||||
|             src32 = (Uint32 *)((Uint8 *)src32 + srcskip); |             src += srcskip; | ||||||
|             dst32 = (Uint32 *)((Uint8 *)dst32 + dstskip); |             dst += dstskip; | ||||||
|         } |         } | ||||||
|         return; |         return; | ||||||
|     } |     } | ||||||
| @ -2589,9 +2573,6 @@ BlitNtoNKey(SDL_BlitInfo * info) | |||||||
|         srcfmt->format != SDL_PIXELFORMAT_ARGB2101010 && |         srcfmt->format != SDL_PIXELFORMAT_ARGB2101010 && | ||||||
|         dstfmt->format != SDL_PIXELFORMAT_ARGB2101010) { |         dstfmt->format != SDL_PIXELFORMAT_ARGB2101010) { | ||||||
| 
 | 
 | ||||||
|         Uint32 *src32 = (Uint32*)src; |  | ||||||
|         Uint32 *dst32 = (Uint32*)dst; |  | ||||||
| 
 |  | ||||||
|         /* Find the appropriate permutation */ |         /* Find the appropriate permutation */ | ||||||
|         int alpha_channel, p0, p1, p2, p3; |         int alpha_channel, p0, p1, p2, p3; | ||||||
|         get_permutation(srcfmt, dstfmt, &p0, &p1, &p2, &p3, &alpha_channel); |         get_permutation(srcfmt, dstfmt, &p0, &p1, &p2, &p3, &alpha_channel); | ||||||
| @ -2600,21 +2581,21 @@ BlitNtoNKey(SDL_BlitInfo * info) | |||||||
|             /* *INDENT-OFF* */ |             /* *INDENT-OFF* */ | ||||||
|             DUFFS_LOOP( |             DUFFS_LOOP( | ||||||
|             { |             { | ||||||
|  |                 Uint32 *src32 = (Uint32*)src; | ||||||
|  | 
 | ||||||
|                 if ((*src32 & rgbmask) != ckey) { |                 if ((*src32 & rgbmask) != ckey) { | ||||||
|                     Uint8 *s8 = (Uint8 *)src32; |                     dst[0] = src[p0]; | ||||||
|                     Uint8 *d8 = (Uint8 *)dst32; |                     dst[1] = src[p1]; | ||||||
|                     d8[0] = s8[p0]; |                     dst[2] = src[p2]; | ||||||
|                     d8[1] = s8[p1]; |                     dst[3] = src[p3]; | ||||||
|                     d8[2] = s8[p2]; |                     dst[alpha_channel] = alpha; | ||||||
|                     d8[3] = s8[p3]; |  | ||||||
|                     d8[alpha_channel] = alpha; |  | ||||||
|                 } |                 } | ||||||
|                 ++src32; |                 src += 4; | ||||||
|                 ++dst32; |                 dst += 4; | ||||||
|             }, width); |             }, width); | ||||||
|             /* *INDENT-ON* */ |             /* *INDENT-ON* */ | ||||||
|             src32 = (Uint32 *)((Uint8 *)src32 + srcskip); |             src += srcskip; | ||||||
|             dst32 = (Uint32 *)((Uint8 *)dst32 + dstskip); |             dst += dstskip; | ||||||
|         } |         } | ||||||
|         return; |         return; | ||||||
|     } |     } | ||||||
| @ -2699,8 +2680,6 @@ BlitNtoNKey(SDL_BlitInfo * info) | |||||||
|     if (srcbpp == 4 && dstbpp == 3 && |     if (srcbpp == 4 && dstbpp == 3 && | ||||||
|         srcfmt->format != SDL_PIXELFORMAT_ARGB2101010) { |         srcfmt->format != SDL_PIXELFORMAT_ARGB2101010) { | ||||||
| 
 | 
 | ||||||
|         Uint32 *src32 = (Uint32*)src; |  | ||||||
| 
 |  | ||||||
|         /* Find the appropriate permutation */ |         /* Find the appropriate permutation */ | ||||||
|         int p0, p1, p2, p3; |         int p0, p1, p2, p3; | ||||||
|         get_permutation(srcfmt, dstfmt, &p0, &p1, &p2, &p3, NULL); |         get_permutation(srcfmt, dstfmt, &p0, &p1, &p2, &p3, NULL); | ||||||
| @ -2709,17 +2688,17 @@ BlitNtoNKey(SDL_BlitInfo * info) | |||||||
|             /* *INDENT-OFF* */ |             /* *INDENT-OFF* */ | ||||||
|             DUFFS_LOOP( |             DUFFS_LOOP( | ||||||
|             { |             { | ||||||
|  |                 Uint32 *src32 = (Uint32*)src; | ||||||
|                 if ((*src32 & rgbmask) != ckey) { |                 if ((*src32 & rgbmask) != ckey) { | ||||||
|                     Uint8 *s8 = (Uint8 *)src32; |                     dst[0] = src[p0]; | ||||||
|                     dst[0] = s8[p0]; |                     dst[1] = src[p1]; | ||||||
|                     dst[1] = s8[p1]; |                     dst[2] = src[p2]; | ||||||
|                     dst[2] = s8[p2]; |  | ||||||
|                 } |                 } | ||||||
|                 ++src32; |                 src += 4; | ||||||
|                 dst += 3; |                 dst += 3; | ||||||
|             }, width); |             }, width); | ||||||
|             /* *INDENT-ON* */ |             /* *INDENT-ON* */ | ||||||
|             src32 = (Uint32 *)((Uint8 *)src32 + srcskip); |             src += srcskip; | ||||||
|             dst += dstskip; |             dst += dstskip; | ||||||
|         } |         } | ||||||
|         return; |         return; | ||||||
| @ -2729,8 +2708,6 @@ BlitNtoNKey(SDL_BlitInfo * info) | |||||||
|     if (srcbpp == 3 && dstbpp == 4 && |     if (srcbpp == 3 && dstbpp == 4 && | ||||||
|         dstfmt->format != SDL_PIXELFORMAT_ARGB2101010) { |         dstfmt->format != SDL_PIXELFORMAT_ARGB2101010) { | ||||||
| 
 | 
 | ||||||
|         Uint32 *dst32 = (Uint32*)dst; |  | ||||||
| 
 |  | ||||||
| #if SDL_BYTEORDER == SDL_LIL_ENDIAN | #if SDL_BYTEORDER == SDL_LIL_ENDIAN | ||||||
|         Uint8 k0 = ckey & 0xFF; |         Uint8 k0 = ckey & 0xFF; | ||||||
|         Uint8 k1 = (ckey >> 8)  & 0xFF; |         Uint8 k1 = (ckey >> 8)  & 0xFF; | ||||||
| @ -2754,20 +2731,18 @@ BlitNtoNKey(SDL_BlitInfo * info) | |||||||
|                 Uint8 s2 = src[2]; |                 Uint8 s2 = src[2]; | ||||||
| 
 | 
 | ||||||
|                 if (k0 != s0 || k1 != s1 || k2 != s2) { |                 if (k0 != s0 || k1 != s1 || k2 != s2) { | ||||||
|                     Uint8 *d8 = (Uint8 *)dst32; |                     dst[0] = src[p0]; | ||||||
|                     d8[0] = src[p0]; |                     dst[1] = src[p1]; | ||||||
|                     d8[1] = src[p1]; |                     dst[2] = src[p2]; | ||||||
|                     d8[2] = src[p2]; |                     dst[3] = src[p3]; | ||||||
|                     d8[3] = src[p3]; |                     dst[alpha_channel] = alpha; | ||||||
|                     d8[alpha_channel] = alpha; |  | ||||||
|                 } |                 } | ||||||
|                 src += 3; |                 src += 3; | ||||||
|                 ++dst32; |                 dst += 4; | ||||||
|             }, width); |             }, width); | ||||||
|             /* *INDENT-ON* */ |             /* *INDENT-ON* */ | ||||||
|             src += srcskip; |             src += srcskip; | ||||||
|             dst32 = (Uint32 *)((Uint8 *)dst32 + dstskip); |             dst += dstskip; | ||||||
| 
 |  | ||||||
|         } |         } | ||||||
|         return; |         return; | ||||||
|     } |     } | ||||||
| @ -2853,9 +2828,6 @@ BlitNtoNKeyCopyAlpha(SDL_BlitInfo * info) | |||||||
|         srcfmt->format != SDL_PIXELFORMAT_ARGB2101010 && |         srcfmt->format != SDL_PIXELFORMAT_ARGB2101010 && | ||||||
|         dstfmt->format != SDL_PIXELFORMAT_ARGB2101010) { |         dstfmt->format != SDL_PIXELFORMAT_ARGB2101010) { | ||||||
| 
 | 
 | ||||||
|         Uint32 *src32 = (Uint32*)src; |  | ||||||
|         Uint32 *dst32 = (Uint32*)dst; |  | ||||||
| 
 |  | ||||||
|         /* Find the appropriate permutation */ |         /* Find the appropriate permutation */ | ||||||
|         int p0, p1, p2, p3; |         int p0, p1, p2, p3; | ||||||
|         get_permutation(srcfmt, dstfmt, &p0, &p1, &p2, &p3, NULL); |         get_permutation(srcfmt, dstfmt, &p0, &p1, &p2, &p3, NULL); | ||||||
| @ -2864,20 +2836,19 @@ BlitNtoNKeyCopyAlpha(SDL_BlitInfo * info) | |||||||
|             /* *INDENT-OFF* */ |             /* *INDENT-OFF* */ | ||||||
|             DUFFS_LOOP( |             DUFFS_LOOP( | ||||||
|             { |             { | ||||||
|  |                 Uint32 *src32 = (Uint32*)src; | ||||||
|                 if ((*src32 & rgbmask) != ckey) { |                 if ((*src32 & rgbmask) != ckey) { | ||||||
|                     Uint8 *s8 = (Uint8 *)src32; |                     dst[0] = src[p0]; | ||||||
|                     Uint8 *d8 = (Uint8 *)dst32; |                     dst[1] = src[p1]; | ||||||
|                     d8[0] = s8[p0]; |                     dst[2] = src[p2]; | ||||||
|                     d8[1] = s8[p1]; |                     dst[3] = src[p3]; | ||||||
|                     d8[2] = s8[p2]; |  | ||||||
|                     d8[3] = s8[p3]; |  | ||||||
|                 } |                 } | ||||||
|                 ++src32; |                 src += 4; | ||||||
|                 ++dst32; |                 dst += 4; | ||||||
|             }, width); |             }, width); | ||||||
|             /* *INDENT-ON* */ |             /* *INDENT-ON* */ | ||||||
|             src32 = (Uint32 *)((Uint8 *)src32 + srcskip); |             src += srcskip; | ||||||
|             dst32 = (Uint32 *)((Uint8 *)dst32 + dstskip); |             dst += dstskip; | ||||||
|         } |         } | ||||||
|         return; |         return; | ||||||
|     } |     } | ||||||
| @ -2982,31 +2953,15 @@ Blit_3or4_to_3or4__same_rgb(SDL_BlitInfo * info) | |||||||
|     if (dstfmt->Amask) { |     if (dstfmt->Amask) { | ||||||
|         /* SET_ALPHA */ |         /* SET_ALPHA */ | ||||||
|         Uint32 mask = info->a << dstfmt->Ashift; |         Uint32 mask = info->a << dstfmt->Ashift; | ||||||
|         int last_line = 0; |  | ||||||
| #if SDL_BYTEORDER == SDL_LIL_ENDIAN | #if SDL_BYTEORDER == SDL_LIL_ENDIAN | ||||||
|  |         int i0 = 0, i1 = 1, i2 = 2; | ||||||
| #else | #else | ||||||
|         int i0 = srcbpp - 1 - 0; |         int i0 = srcbpp - 1 - 0; | ||||||
|         int i1 = srcbpp - 1 - 1; |         int i1 = srcbpp - 1 - 1; | ||||||
|         int i2 = srcbpp - 1 - 2; |         int i2 = srcbpp - 1 - 2; | ||||||
| #endif | #endif | ||||||
| 
 |  | ||||||
|         if (srcbpp == 3 && height) { |  | ||||||
|             height -= 1; |  | ||||||
|             last_line = 1; |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         while (height--) { |         while (height--) { | ||||||
|             /* *INDENT-OFF* */ |             /* *INDENT-OFF* */ | ||||||
| #if SDL_BYTEORDER == SDL_LIL_ENDIAN |  | ||||||
|             DUFFS_LOOP( |  | ||||||
|             { |  | ||||||
|                 Uint32  *dst32 = (Uint32*)dst; |  | ||||||
|                 Uint32  *src32 = (Uint32*)src; |  | ||||||
|                 *dst32 = *src32 | mask; |  | ||||||
|                 dst += 4; |  | ||||||
|                 src += srcbpp; |  | ||||||
|             }, width); |  | ||||||
| #else |  | ||||||
|             DUFFS_LOOP( |             DUFFS_LOOP( | ||||||
|             { |             { | ||||||
|                 Uint32  *dst32 = (Uint32*)dst; |                 Uint32  *dst32 = (Uint32*)dst; | ||||||
| @ -3017,34 +2972,15 @@ Blit_3or4_to_3or4__same_rgb(SDL_BlitInfo * info) | |||||||
|                 dst += 4; |                 dst += 4; | ||||||
|                 src += srcbpp; |                 src += srcbpp; | ||||||
|             }, width); |             }, width); | ||||||
| #endif |  | ||||||
|             /* *INDENT-ON* */ |             /* *INDENT-ON* */ | ||||||
|             src += srcskip; |             src += srcskip; | ||||||
|             dst += dstskip; |             dst += dstskip; | ||||||
|         } |         } | ||||||
| 
 |  | ||||||
|         if (last_line) { |  | ||||||
|             while (width--) { |  | ||||||
|                 Uint32  *dst32 = (Uint32*)dst; |  | ||||||
| #if SDL_BYTEORDER == SDL_LIL_ENDIAN |  | ||||||
|                 Uint8 s0 = src[0]; |  | ||||||
|                 Uint8 s1 = src[1]; |  | ||||||
|                 Uint8 s2 = src[2]; |  | ||||||
| #else |  | ||||||
|                 Uint8 s0 = src[i0]; |  | ||||||
|                 Uint8 s1 = src[i1]; |  | ||||||
|                 Uint8 s2 = src[i2]; |  | ||||||
| #endif |  | ||||||
|                 *dst32 = (s0) | (s1 << 8) | (s2 << 16) | mask; |  | ||||||
|                 dst += 4; |  | ||||||
|                 src += srcbpp; |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|     } else { |     } else { | ||||||
|         /* NO_ALPHA */ |         /* NO_ALPHA */ | ||||||
|         int last_line = 0; |  | ||||||
| #if SDL_BYTEORDER == SDL_LIL_ENDIAN | #if SDL_BYTEORDER == SDL_LIL_ENDIAN | ||||||
|         int mask = srcfmt->Rmask | srcfmt->Gmask | srcfmt->Bmask; |         int i0 = 0, i1 = 1, i2 = 2; | ||||||
|  |         int j0 = 0, j1 = 1, j2 = 2; | ||||||
| #else | #else | ||||||
|         int i0 = srcbpp - 1 - 0; |         int i0 = srcbpp - 1 - 0; | ||||||
|         int i1 = srcbpp - 1 - 1; |         int i1 = srcbpp - 1 - 1; | ||||||
| @ -3052,72 +2988,23 @@ Blit_3or4_to_3or4__same_rgb(SDL_BlitInfo * info) | |||||||
|         int j0 = dstbpp - 1 - 0; |         int j0 = dstbpp - 1 - 0; | ||||||
|         int j1 = dstbpp - 1 - 1; |         int j1 = dstbpp - 1 - 1; | ||||||
|         int j2 = dstbpp - 1 - 2; |         int j2 = dstbpp - 1 - 2; | ||||||
|         int shift0, shift1, shift2; |  | ||||||
|         if (dstbpp == 4) { |  | ||||||
|             shift2 = 16; |  | ||||||
|             shift1 = 8; |  | ||||||
|             shift0 = 0; |  | ||||||
|         } else { /* dstbpp 3 */ |  | ||||||
|             shift2 = 24; |  | ||||||
|             shift1 = 16; |  | ||||||
|             shift0 = 8; |  | ||||||
|         } |  | ||||||
| #endif | #endif | ||||||
| 
 |  | ||||||
|         if ((dstbpp == 3 || srcbpp == 3) && height) { |  | ||||||
|             height -= 1; |  | ||||||
|             last_line = 1; |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         while (height--) { |         while (height--) { | ||||||
|             /* *INDENT-OFF* */ |             /* *INDENT-OFF* */ | ||||||
| #if SDL_BYTEORDER == SDL_LIL_ENDIAN |  | ||||||
|             DUFFS_LOOP( |             DUFFS_LOOP( | ||||||
|             { |             { | ||||||
|                 Uint32  *dst32 = (Uint32*)dst; |  | ||||||
| 
 |  | ||||||
|                 Uint32  *src32 = (Uint32*)src; |  | ||||||
|                 *dst32 = *src32 & mask; |  | ||||||
|                 dst += dstbpp; |  | ||||||
|                 src += srcbpp; |  | ||||||
|             }, width); |  | ||||||
| #else |  | ||||||
|             DUFFS_LOOP( |  | ||||||
|             { |  | ||||||
|                 Uint32  *dst32 = (Uint32*)dst; |  | ||||||
|                 Uint8 s0 = src[i0]; |  | ||||||
|                 Uint8 s1 = src[i1]; |  | ||||||
|                 Uint8 s2 = src[i2]; |  | ||||||
|                 *dst32 = (s0 << shift0) | (s1 << shift1) | (s2 << shift2); |  | ||||||
|                 dst += dstbpp; |  | ||||||
|                 src += srcbpp; |  | ||||||
|             }, width); |  | ||||||
| #endif |  | ||||||
|             /* *INDENT-ON* */ |  | ||||||
|             src += srcskip; |  | ||||||
|             dst += dstskip; |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         if (last_line) { |  | ||||||
|             while (width--) { |  | ||||||
| #if SDL_BYTEORDER == SDL_LIL_ENDIAN |  | ||||||
|                 Uint8 s0 = src[0]; |  | ||||||
|                 Uint8 s1 = src[1]; |  | ||||||
|                 Uint8 s2 = src[2]; |  | ||||||
|                 dst[0] = s0; |  | ||||||
|                 dst[1] = s1; |  | ||||||
|                 dst[2] = s2; |  | ||||||
| #else |  | ||||||
|                 Uint8 s0 = src[i0]; |                 Uint8 s0 = src[i0]; | ||||||
|                 Uint8 s1 = src[i1]; |                 Uint8 s1 = src[i1]; | ||||||
|                 Uint8 s2 = src[i2]; |                 Uint8 s2 = src[i2]; | ||||||
|                 dst[j0] = s0; |                 dst[j0] = s0; | ||||||
|                 dst[j1] = s1; |                 dst[j1] = s1; | ||||||
|                 dst[j2] = s2; |                 dst[j2] = s2; | ||||||
| #endif |  | ||||||
|                 dst += dstbpp; |                 dst += dstbpp; | ||||||
|                 src += srcbpp; |                 src += srcbpp; | ||||||
|             } |             }, width); | ||||||
|  |             /* *INDENT-ON* */ | ||||||
|  |             src += srcskip; | ||||||
|  |             dst += dstskip; | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|     return; |     return; | ||||||
| @ -3158,8 +3045,8 @@ Blit_3or4_to_3or4__inversed_rgb(SDL_BlitInfo * info) | |||||||
|                     Uint32 alphashift = src[i3] << dstfmt->Ashift; |                     Uint32 alphashift = src[i3] << dstfmt->Ashift; | ||||||
|                     /* inversed, compared to Blit_3or4_to_3or4__same_rgb */ |                     /* inversed, compared to Blit_3or4_to_3or4__same_rgb */ | ||||||
|                     *dst32 = (s0 << 16) | (s1 << 8) | (s2) | alphashift; |                     *dst32 = (s0 << 16) | (s1 << 8) | (s2) | alphashift; | ||||||
|                     dst += dstbpp; |                     dst += 4; | ||||||
|                     src += srcbpp; |                     src += 4; | ||||||
|                 }, width); |                 }, width); | ||||||
|                 /* *INDENT-ON* */ |                 /* *INDENT-ON* */ | ||||||
|                 src += srcskip; |                 src += srcskip; | ||||||
| @ -3175,7 +3062,6 @@ Blit_3or4_to_3or4__inversed_rgb(SDL_BlitInfo * info) | |||||||
|             int i1 = srcbpp - 1 - 1; |             int i1 = srcbpp - 1 - 1; | ||||||
|             int i2 = srcbpp - 1 - 2; |             int i2 = srcbpp - 1 - 2; | ||||||
| #endif | #endif | ||||||
| 
 |  | ||||||
|             while (height--) { |             while (height--) { | ||||||
|                 /* *INDENT-OFF* */ |                 /* *INDENT-OFF* */ | ||||||
|                 DUFFS_LOOP( |                 DUFFS_LOOP( | ||||||
| @ -3186,7 +3072,7 @@ Blit_3or4_to_3or4__inversed_rgb(SDL_BlitInfo * info) | |||||||
|                     Uint8 s2 = src[i2]; |                     Uint8 s2 = src[i2]; | ||||||
|                     /* inversed, compared to Blit_3or4_to_3or4__same_rgb */ |                     /* inversed, compared to Blit_3or4_to_3or4__same_rgb */ | ||||||
|                     *dst32 = (s0 << 16) | (s1 << 8) | (s2) | mask; |                     *dst32 = (s0 << 16) | (s1 << 8) | (s2) | mask; | ||||||
|                     dst += dstbpp; |                     dst += 4; | ||||||
|                     src += srcbpp; |                     src += srcbpp; | ||||||
|                 }, width); |                 }, width); | ||||||
|                 /* *INDENT-ON* */ |                 /* *INDENT-ON* */ | ||||||
| @ -3196,41 +3082,28 @@ Blit_3or4_to_3or4__inversed_rgb(SDL_BlitInfo * info) | |||||||
|         } |         } | ||||||
|     } else { |     } else { | ||||||
|         /* NO_ALPHA */ |         /* NO_ALPHA */ | ||||||
|         int last_line = 0; |  | ||||||
| #if SDL_BYTEORDER == SDL_LIL_ENDIAN | #if SDL_BYTEORDER == SDL_LIL_ENDIAN | ||||||
|         int i0 = 0, i1 = 1, i2 = 2; |         int i0 = 0, i1 = 1, i2 = 2; | ||||||
|         int shift0 = 16, shift1 = 8, shift2 = 0; |         int j0 = 2, j1 = 1, j2 = 0; | ||||||
| #else | #else | ||||||
|         int i0 = srcbpp - 1 - 0; |         int i0 = srcbpp - 1 - 0; | ||||||
|         int i1 = srcbpp - 1 - 1; |         int i1 = srcbpp - 1 - 1; | ||||||
|         int i2 = srcbpp - 1 - 2; |         int i2 = srcbpp - 1 - 2; | ||||||
|         int shift0, shift1, shift2; |         int j0 = dstbpp - 1 - 2; | ||||||
|         if (dstbpp == 4) { |         int j1 = dstbpp - 1 - 1; | ||||||
|             shift0 = 16; |         int j2 = dstbpp - 1 - 0; | ||||||
|             shift1 = 8; |  | ||||||
|             shift2 = 0; |  | ||||||
|         } else { /* dstbpp 3 */ |  | ||||||
|             shift0 = 24; |  | ||||||
|             shift1 = 16; |  | ||||||
|             shift2 = 8; |  | ||||||
|         } |  | ||||||
| #endif | #endif | ||||||
| 
 |  | ||||||
|         if (dstbpp == 3 && height) { |  | ||||||
|             height -= 1; |  | ||||||
|             last_line = 1; |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         while (height--) { |         while (height--) { | ||||||
|             /* *INDENT-OFF* */ |             /* *INDENT-OFF* */ | ||||||
|             DUFFS_LOOP( |             DUFFS_LOOP( | ||||||
|             { |             { | ||||||
|                 Uint32 *dst32 = (Uint32*)dst; |  | ||||||
|                 Uint8 s0 = src[i0]; |                 Uint8 s0 = src[i0]; | ||||||
|                 Uint8 s1 = src[i1]; |                 Uint8 s1 = src[i1]; | ||||||
|                 Uint8 s2 = src[i2]; |                 Uint8 s2 = src[i2]; | ||||||
|                 /* inversed, compared to Blit_3or4_to_3or4__same_rgb */ |                 /* inversed, compared to Blit_3or4_to_3or4__same_rgb */ | ||||||
|                 *dst32 = (s0 << shift0) | (s1 << shift1) | (s2 << shift2); |                 dst[j0] = s0; | ||||||
|  |                 dst[j1] = s1; | ||||||
|  |                 dst[j2] = s2; | ||||||
|                 dst += dstbpp; |                 dst += dstbpp; | ||||||
|                 src += srcbpp; |                 src += srcbpp; | ||||||
|             }, width); |             }, width); | ||||||
| @ -3238,30 +3111,6 @@ Blit_3or4_to_3or4__inversed_rgb(SDL_BlitInfo * info) | |||||||
|             src += srcskip; |             src += srcskip; | ||||||
|             dst += dstskip; |             dst += dstskip; | ||||||
|         } |         } | ||||||
| 
 |  | ||||||
|         if (last_line) { |  | ||||||
|             while (width--) { |  | ||||||
| #if SDL_BYTEORDER == SDL_LIL_ENDIAN |  | ||||||
|                 Uint8 s0 = src[0]; |  | ||||||
|                 Uint8 s1 = src[1]; |  | ||||||
|                 Uint8 s2 = src[2]; |  | ||||||
|                 /* inversed, compared to Blit_3or4_to_3or4__same_rgb */ |  | ||||||
|                 dst[0] = s2; |  | ||||||
|                 dst[1] = s1; |  | ||||||
|                 dst[2] = s0; |  | ||||||
| #else |  | ||||||
|                 Uint8 s0 = src[i0]; |  | ||||||
|                 Uint8 s1 = src[i1]; |  | ||||||
|                 Uint8 s2 = src[i2]; |  | ||||||
|                 /* inversed, compared to Blit_3or4_to_3or4__same_rgb */ |  | ||||||
|                 dst[0] = s0; |  | ||||||
|                 dst[1] = s1; |  | ||||||
|                 dst[2] = s2; |  | ||||||
| #endif |  | ||||||
|                 dst += dstbpp; |  | ||||||
|                 src += srcbpp; |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|     } |     } | ||||||
|     return; |     return; | ||||||
| } | } | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user