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.
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…
Reference in New Issue