mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-21 05:09:34 -06:00
Video software:
Changed the EFB color order from RGBA to ABGR to emulate it correctly on little-endian platforms. Added some enumerations to clear up what components are which colors. Fixed the TEV alpha input LUT which would have caused problems if anything was doing alpha comparisons. Changed box filter for EFB copies from 3x3 to 2x2 because that is probably correct. Also makes the math nicer. git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@6696 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
@ -29,18 +29,18 @@ namespace TextureEncoder
|
||||
inline void RGBA_to_RGBA8(u8 *src, u8 &r, u8 &g, u8 &b, u8 &a)
|
||||
{
|
||||
u32 srcColor = *(u32*)src;
|
||||
r = Convert6To8(srcColor & 0x3f);
|
||||
g = Convert6To8((srcColor >> 6) & 0x3f);
|
||||
b = Convert6To8((srcColor >> 12)& 0x3f);
|
||||
a = Convert6To8((srcColor >> 18)& 0x3f);
|
||||
a = Convert6To8(srcColor & 0x3f);
|
||||
b = Convert6To8((srcColor >> 6) & 0x3f);
|
||||
g = Convert6To8((srcColor >> 12)& 0x3f);
|
||||
r = Convert6To8((srcColor >> 18)& 0x3f);
|
||||
}
|
||||
|
||||
inline void RGBA_to_RGB8(u8 *src, u8 &r, u8 &g, u8 &b)
|
||||
{
|
||||
u32 srcColor = *(u32*)src;
|
||||
r = Convert6To8(srcColor & 0x3f);
|
||||
g = Convert6To8((srcColor >> 6) & 0x3f);
|
||||
b = Convert6To8((srcColor >> 12)& 0x3f);
|
||||
b = Convert6To8((srcColor >> 6) & 0x3f);
|
||||
g = Convert6To8((srcColor >> 12)& 0x3f);
|
||||
r = Convert6To8((srcColor >> 18)& 0x3f);
|
||||
}
|
||||
|
||||
inline u8 RGB8_to_I(u8 r, u8 g, u8 b)
|
||||
@ -50,74 +50,71 @@ inline u8 RGB8_to_I(u8 r, u8 g, u8 b)
|
||||
return val >> 8;
|
||||
}
|
||||
|
||||
// box filter sampling averages 9 samples centered at the source texel
|
||||
// box filter sampling averages 4 samples with the source texel being the top left of the box
|
||||
// components are scaled to the range 0-255 after all samples are taken
|
||||
|
||||
inline void boxfilterRGBA_to_RGBA8(u8 *src, u8 &r, u8 &g, u8 &b, u8 &a)
|
||||
{
|
||||
u16 r16 = 0, g16 = 0, b16 = 0, a16 = 0;
|
||||
|
||||
// move to top left
|
||||
src -= (1 + 640) * 3;
|
||||
|
||||
for (int y = 0; y < 3; y++) {
|
||||
for (int x = 0; x < 3; x++) {
|
||||
for (int y = 0; y < 2; y++) {
|
||||
for (int x = 0; x < 2; x++) {
|
||||
u32 srcColor = *(u32*)src;
|
||||
r16 += srcColor & 0x3f;
|
||||
g16 += (srcColor >> 6) & 0x3f;
|
||||
b16 += (srcColor >> 12) & 0x3f;
|
||||
a16 += (srcColor >> 18) & 0x3f;
|
||||
src += 3;
|
||||
|
||||
a16 += srcColor & 0x3f;
|
||||
b16 += (srcColor >> 6) & 0x3f;
|
||||
g16 += (srcColor >> 12) & 0x3f;
|
||||
r16 += (srcColor >> 18) & 0x3f;
|
||||
|
||||
src += 3; // move to next pixel
|
||||
}
|
||||
src += (640 - 3) * 3;
|
||||
src += (640 - 2) * 3; // move to next line
|
||||
}
|
||||
|
||||
r = (r16 << 6) / 142;
|
||||
g = (g16 << 6) / 142;
|
||||
b = (b16 << 6) / 142;
|
||||
a = (a16 << 6) / 142;
|
||||
r = r16 + (r16 >> 6);
|
||||
g = g16 + (g16 >> 6);
|
||||
b = b16 + (b16 >> 6);
|
||||
a = a16 + (a16 >> 6);
|
||||
}
|
||||
|
||||
inline void boxfilterRGBA_to_RGB8(u8 *src, u8 &r, u8 &g, u8 &b)
|
||||
{
|
||||
u16 r16 = 0, g16 = 0, b16 = 0;
|
||||
|
||||
// move to top left
|
||||
src -= (1 + 640) * 3;
|
||||
|
||||
for (int y = 0; y < 3; y++) {
|
||||
for (int x = 0; x < 3; x++) {
|
||||
for (int y = 0; y < 2; y++) {
|
||||
for (int x = 0; x < 2; x++) {
|
||||
u32 srcColor = *(u32*)src;
|
||||
r16 += srcColor & 0x3f;
|
||||
g16 += (srcColor >> 6) & 0x3f;
|
||||
b16 += (srcColor >> 12) & 0x3f;
|
||||
src += 3;
|
||||
|
||||
b16 += (srcColor >> 6) & 0x3f;
|
||||
g16 += (srcColor >> 12) & 0x3f;
|
||||
r16 += (srcColor >> 18) & 0x3f;
|
||||
|
||||
src += 3; // move to next pixel
|
||||
}
|
||||
src += (640 - 3) * 3;
|
||||
src += (640 - 2) * 3; // move to next line
|
||||
}
|
||||
|
||||
r = (r16 << 6) / 142;
|
||||
g = (g16 << 6) / 142;
|
||||
b = (b16 << 6) / 142;
|
||||
r = r16 + (r16 >> 6);
|
||||
g = g16 + (g16 >> 6);
|
||||
b = b16 + (b16 >> 6);
|
||||
}
|
||||
|
||||
inline void boxfilterRGBA_to_x8(u8 *src, u8 &x8, int shift)
|
||||
{
|
||||
u16 x16 = 0;
|
||||
|
||||
// move to top left
|
||||
src -= (1 + 640) * 3;
|
||||
|
||||
for (int y = 0; y < 3; y++) {
|
||||
for (int x = 0; x < 3; x++) {
|
||||
for (int y = 0; y < 2; y++) {
|
||||
for (int x = 0; x < 2; x++) {
|
||||
u32 srcColor = *(u32*)src;
|
||||
|
||||
x16 += (srcColor >> shift) & 0x3f;
|
||||
src += 3;
|
||||
|
||||
src += 3; // move to next pixel
|
||||
}
|
||||
src += (640 - 3) * 3;
|
||||
src += (640 - 2) * 3; // move to next line
|
||||
}
|
||||
|
||||
x8 = (x16 << 6) / 142;
|
||||
x8 = x16 + (x16 >> 6);
|
||||
}
|
||||
|
||||
inline void boxfilterRGBA_to_xx8(u8 *src, u8 &x1, u8 &x2, int shift1, int shift2)
|
||||
@ -125,61 +122,58 @@ inline void boxfilterRGBA_to_xx8(u8 *src, u8 &x1, u8 &x2, int shift1, int shift2
|
||||
u16 x16_1 = 0;
|
||||
u16 x16_2 = 0;
|
||||
|
||||
// move to top left
|
||||
src -= (1 + 640) * 3;
|
||||
|
||||
for (int y = 0; y < 3; y++) {
|
||||
for (int x = 0; x < 3; x++) {
|
||||
for (int y = 0; y < 2; y++) {
|
||||
for (int x = 0; x < 2; x++) {
|
||||
u32 srcColor = *(u32*)src;
|
||||
|
||||
x16_1 += (srcColor >> shift1) & 0x3f;
|
||||
x16_2 += (srcColor >> shift2) & 0x3f;
|
||||
src += 3;
|
||||
|
||||
src += 3; // move to next pixel
|
||||
}
|
||||
src += (640 - 3) * 3;
|
||||
src += (640 - 2) * 3; // move to next line
|
||||
}
|
||||
|
||||
x1 = (x16_1 << 6) / 142;
|
||||
x2 = (x16_2 << 6) / 142;
|
||||
x1 = x16_1 + (x16_1 >> 6);
|
||||
x2 = x16_2 + (x16_2 >> 6);
|
||||
}
|
||||
|
||||
inline void boxfilterRGB_to_RGB8(u8 *src, u8 &r, u8 &g, u8 &b)
|
||||
{
|
||||
u16 r16 = 0, g16 = 0, b16 = 0;
|
||||
|
||||
// move to top left
|
||||
src -= (1 + 640) * 3;
|
||||
for (int y = 0; y < 2; y++) {
|
||||
for (int x = 0; x < 2; x++) {
|
||||
|
||||
for (int y = 0; y < 3; y++) {
|
||||
for (int x = 0; x < 3; x++) {
|
||||
r16 += src[0];
|
||||
b16 += src[0];
|
||||
g16 += src[1];
|
||||
b16 += src[2];
|
||||
src += 3;
|
||||
r16 += src[2];
|
||||
|
||||
src += 3; // move to next pixel
|
||||
}
|
||||
src += (640 - 3) * 3;
|
||||
src += (640 - 2) * 3; // move to next line
|
||||
}
|
||||
|
||||
r = r16 / 9;
|
||||
g = g16 / 9;
|
||||
b = b16 / 9;
|
||||
r = r16 >> 2;
|
||||
g = g16 >> 2;
|
||||
b = b16 >> 2;
|
||||
}
|
||||
|
||||
inline void boxfilterRGB_to_x8(u8 *src, u8 &x8, int comp)
|
||||
{
|
||||
u16 x16 = 0;
|
||||
|
||||
// move to top left
|
||||
src -= (1 + 640) * 3;
|
||||
for (int y = 0; y < 2; y++) {
|
||||
for (int x = 0; x < 2; x++) {
|
||||
|
||||
for (int y = 0; y < 3; y++) {
|
||||
for (int x = 0; x < 3; x++) {
|
||||
x16 += src[comp];
|
||||
src += 3;
|
||||
|
||||
src += 3; // move to next pixel
|
||||
}
|
||||
src += (640 - 3) * 3;
|
||||
src += (640 - 2) * 3; // move to next line
|
||||
}
|
||||
|
||||
x8 = x16 / 9;
|
||||
x8 = x16 >> 2;
|
||||
}
|
||||
|
||||
inline void boxfilterRGB_to_xx8(u8 *src, u8 &x1, u8 &x2, int comp1, int comp2)
|
||||
@ -187,20 +181,19 @@ inline void boxfilterRGB_to_xx8(u8 *src, u8 &x1, u8 &x2, int comp1, int comp2)
|
||||
u16 x16_1 = 0;
|
||||
u16 x16_2 = 0;
|
||||
|
||||
// move to top left
|
||||
src -= (1 + 640) * 3;
|
||||
for (int y = 0; y < 2; y++) {
|
||||
for (int x = 0; x < 2; x++) {
|
||||
|
||||
for (int y = 0; y < 3; y++) {
|
||||
for (int x = 0; x < 3; x++) {
|
||||
x16_1 += src[comp1];
|
||||
x16_2 += src[comp2];
|
||||
src += 3;
|
||||
|
||||
src += 3; // move to next pixel
|
||||
}
|
||||
src += (640 - 3) * 3;
|
||||
src += (640 - 2) * 3; // move to next line
|
||||
}
|
||||
|
||||
x1 = x16_1 / 9;
|
||||
x2 = x16_2 / 9;
|
||||
x1 = x16_1 >> 2;
|
||||
x2 = x16_2 >> 2;
|
||||
}
|
||||
|
||||
void SetBlockDimensions(int blkWidthLog2, int blkHeightLog2, u16 &sBlkCount, u16 &tBlkCount, u16 &sBlkSize, u16 &tBlkSize)
|
||||
@ -333,8 +326,8 @@ void EncodeRGBA6(u8 *dst, u8 *src, u32 format)
|
||||
u32 srcColor = *(u32*)src;
|
||||
src += readStride;
|
||||
|
||||
u16 val = ((srcColor << 10) & 0xf800) | ((srcColor >> 1) & 0x07e0) | ((srcColor >> 13) & 0x001e);
|
||||
*(u16*)dst = Common::swap16(val);
|
||||
u16 val = ((srcColor >> 8) & 0xf800) | ((srcColor >> 7) & 0x07e0) | ((srcColor >> 7) & 0x001e);
|
||||
*(u16*)dst = Common::swap16(val);
|
||||
dst+=2;
|
||||
}
|
||||
ENCODE_LOOP_SPANS
|
||||
@ -348,12 +341,12 @@ void EncodeRGBA6(u8 *dst, u8 *src, u32 format)
|
||||
u32 srcColor = *(u32*)src;
|
||||
src += readStride;
|
||||
|
||||
u16 a16 = (srcColor >> 9) & 0x7000;
|
||||
u16 alpha = (srcColor << 9) & 0x7000;
|
||||
u16 val;
|
||||
if (a16 == 0x7000) // 5551
|
||||
val = 0x8000 | ((srcColor << 9) & 0x7c00) | ((srcColor >> 2) & 0x03e0) | ((srcColor >> 13) & 0x001e);
|
||||
if (alpha == 0x7000) // 555
|
||||
val = 0x8000 | ((srcColor >> 9) & 0x7c00) | ((srcColor >> 8) & 0x03e0) | ((srcColor >> 7) & 0x001e);
|
||||
else // 4443
|
||||
val = a16 | ((srcColor << 6) & 0x0f00) | ((srcColor >> 4) & 0x00f0) | ((srcColor >> 14) & 0x000f);
|
||||
val = alpha | ((srcColor >> 12) & 0x0f00) | ((srcColor >> 10) & 0x00f0) | ((srcColor >> 8) & 0x000f);
|
||||
|
||||
*(u16*)dst = Common::swap16(val);
|
||||
dst+=2;
|
||||
@ -381,11 +374,11 @@ void EncodeRGBA6(u8 *dst, u8 *src, u32 format)
|
||||
{
|
||||
u32 srcColor = *(u32*)src;
|
||||
src += readStride;
|
||||
*dst = Convert6To8(srcColor & 0x3f) & 0xf0;
|
||||
*dst = (srcColor >> 16) & 0xf0;
|
||||
|
||||
srcColor = *(u32*)src;
|
||||
src += readStride;
|
||||
*dst |= Convert6To8(srcColor & 0x3f) >> 4;
|
||||
*dst |= (srcColor >> 20) & 0x0f;
|
||||
dst++;
|
||||
}
|
||||
ENCODE_LOOP_SPANS
|
||||
@ -398,7 +391,7 @@ void EncodeRGBA6(u8 *dst, u8 *src, u32 format)
|
||||
{
|
||||
u32 srcColor = *(u32*)src;
|
||||
src += readStride;
|
||||
*dst++ = (Convert6To8((srcColor >> 18) & 0x3f) & 0xf0) | (Convert6To8(srcColor & 0x3f) >> 4);
|
||||
*dst++ = ((srcColor << 2) & 0xf0) | ((srcColor >> 20) & 0x0f);
|
||||
}
|
||||
ENCODE_LOOP_SPANS
|
||||
break;
|
||||
@ -410,8 +403,8 @@ void EncodeRGBA6(u8 *dst, u8 *src, u32 format)
|
||||
{
|
||||
u32 srcColor = *(u32*)src;
|
||||
src += readStride;
|
||||
*dst++ = Convert6To8((srcColor >> 18) & 0x3f);
|
||||
*dst++ = Convert6To8(srcColor & 0x3f);
|
||||
*dst++ = Convert6To8((srcColor >> 18) & 0x3f);
|
||||
}
|
||||
ENCODE_LOOP_SPANS
|
||||
break;
|
||||
@ -422,7 +415,7 @@ void EncodeRGBA6(u8 *dst, u8 *src, u32 format)
|
||||
ENCODE_LOOP_BLOCKS
|
||||
{
|
||||
u32 srcColor = *(u32*)src;
|
||||
*dst++ = Convert6To8((srcColor >> 18) & 0x3f);
|
||||
*dst++ = Convert6To8(srcColor & 0x3f);
|
||||
src += readStride;
|
||||
}
|
||||
ENCODE_LOOP_SPANS
|
||||
@ -434,7 +427,7 @@ void EncodeRGBA6(u8 *dst, u8 *src, u32 format)
|
||||
ENCODE_LOOP_BLOCKS
|
||||
{
|
||||
u32 srcColor = *(u32*)src;
|
||||
*dst++ = Convert6To8(srcColor & 0x3f);
|
||||
*dst++ = Convert6To8((srcColor >> 18) & 0x3f);
|
||||
src += readStride;
|
||||
}
|
||||
ENCODE_LOOP_SPANS
|
||||
@ -446,7 +439,7 @@ void EncodeRGBA6(u8 *dst, u8 *src, u32 format)
|
||||
ENCODE_LOOP_BLOCKS
|
||||
{
|
||||
u32 srcColor = *(u32*)src;
|
||||
*dst++ = Convert6To8((srcColor >> 6) & 0x3f);
|
||||
*dst++ = Convert6To8((srcColor >> 12) & 0x3f);
|
||||
src += readStride;
|
||||
}
|
||||
ENCODE_LOOP_SPANS
|
||||
@ -458,7 +451,7 @@ void EncodeRGBA6(u8 *dst, u8 *src, u32 format)
|
||||
ENCODE_LOOP_BLOCKS
|
||||
{
|
||||
u32 srcColor = *(u32*)src;
|
||||
*dst++ = Convert6To8((srcColor >> 12) & 0x3f);
|
||||
*dst++ = Convert6To8((srcColor >> 6) & 0x3f);
|
||||
src += readStride;
|
||||
}
|
||||
ENCODE_LOOP_SPANS
|
||||
@ -471,8 +464,8 @@ void EncodeRGBA6(u8 *dst, u8 *src, u32 format)
|
||||
{
|
||||
u32 srcColor = *(u32*)src;
|
||||
src += readStride;
|
||||
*dst++ = Convert6To8((srcColor >> 6) & 0x3f);
|
||||
*dst++ = Convert6To8(srcColor & 0x3f);
|
||||
*dst++ = Convert6To8((srcColor >> 12) & 0x3f);
|
||||
*dst++ = Convert6To8((srcColor >> 18) & 0x3f);
|
||||
}
|
||||
ENCODE_LOOP_SPANS
|
||||
break;
|
||||
@ -484,8 +477,8 @@ void EncodeRGBA6(u8 *dst, u8 *src, u32 format)
|
||||
{
|
||||
u32 srcColor = *(u32*)src;
|
||||
src += readStride;
|
||||
*dst++ = Convert6To8((srcColor >> 12) & 0x3f);
|
||||
*dst++ = Convert6To8((srcColor >> 6) & 0x3f);
|
||||
*dst++ = Convert6To8((srcColor >> 6) & 0x3f);
|
||||
*dst++ = Convert6To8((srcColor >> 12) & 0x3f);
|
||||
}
|
||||
ENCODE_LOOP_SPANS
|
||||
break;
|
||||
@ -615,11 +608,11 @@ void EncodeRGBA6halfscale(u8 *dst, u8 *src, u32 format)
|
||||
sBlkSize /= 2;
|
||||
ENCODE_LOOP_BLOCKS
|
||||
{
|
||||
boxfilterRGBA_to_x8(src, r, 0);
|
||||
boxfilterRGBA_to_x8(src, r, 18);
|
||||
src += readStride;
|
||||
*dst = r & 0xf0;
|
||||
|
||||
boxfilterRGBA_to_x8(src, r, 0);
|
||||
boxfilterRGBA_to_x8(src, r, 18);
|
||||
src += readStride;
|
||||
*dst |= r >> 4;
|
||||
dst++;
|
||||
@ -632,7 +625,7 @@ void EncodeRGBA6halfscale(u8 *dst, u8 *src, u32 format)
|
||||
SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride);
|
||||
ENCODE_LOOP_BLOCKS
|
||||
{
|
||||
boxfilterRGBA_to_xx8(src, r, a, 0, 18);
|
||||
boxfilterRGBA_to_xx8(src, r, a, 18, 0);
|
||||
src += readStride;
|
||||
*dst++ = (a & 0xf0) | (r >> 4);
|
||||
}
|
||||
@ -644,7 +637,7 @@ void EncodeRGBA6halfscale(u8 *dst, u8 *src, u32 format)
|
||||
SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride);
|
||||
ENCODE_LOOP_BLOCKS
|
||||
{
|
||||
boxfilterRGBA_to_xx8(src, r, a, 0, 18);
|
||||
boxfilterRGBA_to_xx8(src, r, a, 18, 0);
|
||||
src += readStride;
|
||||
*dst++ = a;
|
||||
*dst++ = r;
|
||||
@ -657,7 +650,7 @@ void EncodeRGBA6halfscale(u8 *dst, u8 *src, u32 format)
|
||||
SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride);
|
||||
ENCODE_LOOP_BLOCKS
|
||||
{
|
||||
boxfilterRGBA_to_x8(src, a, 18);
|
||||
boxfilterRGBA_to_x8(src, a, 0);
|
||||
*dst++ = a;
|
||||
src += readStride;
|
||||
}
|
||||
@ -669,7 +662,7 @@ void EncodeRGBA6halfscale(u8 *dst, u8 *src, u32 format)
|
||||
SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride);
|
||||
ENCODE_LOOP_BLOCKS
|
||||
{
|
||||
boxfilterRGBA_to_x8(src, r, 0);
|
||||
boxfilterRGBA_to_x8(src, r, 18);
|
||||
*dst++ = r;
|
||||
src += readStride;
|
||||
}
|
||||
@ -681,7 +674,7 @@ void EncodeRGBA6halfscale(u8 *dst, u8 *src, u32 format)
|
||||
SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride);
|
||||
ENCODE_LOOP_BLOCKS
|
||||
{
|
||||
boxfilterRGBA_to_x8(src, g, 6);
|
||||
boxfilterRGBA_to_x8(src, g, 12);
|
||||
*dst++ = g;
|
||||
src += readStride;
|
||||
}
|
||||
@ -693,7 +686,7 @@ void EncodeRGBA6halfscale(u8 *dst, u8 *src, u32 format)
|
||||
SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride);
|
||||
ENCODE_LOOP_BLOCKS
|
||||
{
|
||||
boxfilterRGBA_to_x8(src, b, 12);
|
||||
boxfilterRGBA_to_x8(src, b, 6);
|
||||
*dst++ = b;
|
||||
src += readStride;
|
||||
}
|
||||
@ -705,7 +698,7 @@ void EncodeRGBA6halfscale(u8 *dst, u8 *src, u32 format)
|
||||
SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride);
|
||||
ENCODE_LOOP_BLOCKS
|
||||
{
|
||||
boxfilterRGBA_to_xx8(src, r, g, 0, 6);
|
||||
boxfilterRGBA_to_xx8(src, r, g, 18, 12);
|
||||
src += readStride;
|
||||
*dst++ = g;
|
||||
*dst++ = r;
|
||||
@ -718,7 +711,7 @@ void EncodeRGBA6halfscale(u8 *dst, u8 *src, u32 format)
|
||||
SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride);
|
||||
ENCODE_LOOP_BLOCKS
|
||||
{
|
||||
boxfilterRGBA_to_xx8(src, g, b, 6, 12);
|
||||
boxfilterRGBA_to_xx8(src, g, b, 12, 6);
|
||||
src += readStride;
|
||||
*dst++ = b;
|
||||
*dst++ = g;
|
||||
@ -747,10 +740,10 @@ void EncodeRGB8(u8 *dst, u8 *src, u32 format)
|
||||
sBlkSize /= 2;
|
||||
ENCODE_LOOP_BLOCKS
|
||||
{
|
||||
*dst = RGB8_to_I(src[0], src[1], src[2]) & 0xf0;
|
||||
*dst = RGB8_to_I(src[2], src[1], src[0]) & 0xf0;
|
||||
src += readStride;
|
||||
|
||||
*dst |= RGB8_to_I(src[0], src[1], src[2]) >> 4;
|
||||
*dst |= RGB8_to_I(src[2], src[1], src[0]) >> 4;
|
||||
src += readStride;
|
||||
dst++;
|
||||
}
|
||||
@ -762,7 +755,7 @@ void EncodeRGB8(u8 *dst, u8 *src, u32 format)
|
||||
SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride);
|
||||
ENCODE_LOOP_BLOCKS
|
||||
{
|
||||
*dst++ = RGB8_to_I(src[0], src[1], src[2]);
|
||||
*dst++ = RGB8_to_I(src[2], src[1], src[0]);
|
||||
src += readStride;
|
||||
}
|
||||
ENCODE_LOOP_SPANS
|
||||
@ -773,7 +766,7 @@ void EncodeRGB8(u8 *dst, u8 *src, u32 format)
|
||||
SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride);
|
||||
ENCODE_LOOP_BLOCKS
|
||||
{
|
||||
*dst++ = 0xf0 | (RGB8_to_I(src[0], src[1], src[2]) >> 4);
|
||||
*dst++ = 0xf0 | (RGB8_to_I(src[2], src[1], src[0]) >> 4);
|
||||
src += readStride;
|
||||
}
|
||||
ENCODE_LOOP_SPANS
|
||||
@ -785,7 +778,7 @@ void EncodeRGB8(u8 *dst, u8 *src, u32 format)
|
||||
ENCODE_LOOP_BLOCKS
|
||||
{
|
||||
*dst++ = 0xff;
|
||||
*dst++ = RGB8_to_I(src[0], src[1], src[2]);
|
||||
*dst++ = RGB8_to_I(src[2], src[1], src[0]);
|
||||
|
||||
src += readStride;
|
||||
}
|
||||
@ -797,7 +790,7 @@ void EncodeRGB8(u8 *dst, u8 *src, u32 format)
|
||||
SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride);
|
||||
ENCODE_LOOP_BLOCKS
|
||||
{
|
||||
u16 val = ((src[0] << 8) & 0xf800) | ((src[1] << 3) & 0x07e0) | ((src[2] >> 3) & 0x001e);
|
||||
u16 val = ((src[2] << 8) & 0xf800) | ((src[1] << 3) & 0x07e0) | ((src[0] >> 3) & 0x001e);
|
||||
*(u16*)dst = Common::swap16(val);
|
||||
src += readStride;
|
||||
dst+=2;
|
||||
@ -810,7 +803,7 @@ void EncodeRGB8(u8 *dst, u8 *src, u32 format)
|
||||
SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride);
|
||||
ENCODE_LOOP_BLOCKS
|
||||
{
|
||||
u16 val = 0x8000 | ((src[0] << 7) & 0x7c00) | ((src[1] << 2) & 0x03e0) | ((src[2] >> 3) & 0x001e);
|
||||
u16 val = 0x8000 | ((src[2] << 7) & 0x7c00) | ((src[1] << 2) & 0x03e0) | ((src[0] >> 3) & 0x001e);
|
||||
*(u16*)dst = Common::swap16(val);
|
||||
src += readStride;
|
||||
dst+=2;
|
||||
@ -824,9 +817,9 @@ void EncodeRGB8(u8 *dst, u8 *src, u32 format)
|
||||
ENCODE_LOOP_BLOCKS
|
||||
{
|
||||
dst[0] = 0xff;
|
||||
dst[1] = src[0];
|
||||
dst[1] = src[2];
|
||||
dst[32] = src[1];
|
||||
dst[33] = src[2];
|
||||
dst[33] = src[0];
|
||||
src += readStride;
|
||||
dst += 2;
|
||||
}
|
||||
@ -839,10 +832,10 @@ void EncodeRGB8(u8 *dst, u8 *src, u32 format)
|
||||
sBlkSize /= 2;
|
||||
ENCODE_LOOP_BLOCKS
|
||||
{
|
||||
*dst = src[0] & 0xf0;
|
||||
*dst = src[2] & 0xf0;
|
||||
src += readStride;
|
||||
|
||||
*dst |= src[0] >> 4;
|
||||
*dst |= src[2] >> 4;
|
||||
src += readStride;
|
||||
|
||||
dst++;
|
||||
@ -855,7 +848,7 @@ void EncodeRGB8(u8 *dst, u8 *src, u32 format)
|
||||
SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride);
|
||||
ENCODE_LOOP_BLOCKS
|
||||
{
|
||||
*dst++ = 0xf0 | (src[0] >> 4);
|
||||
*dst++ = 0xf0 | (src[2] >> 4);
|
||||
src += readStride;
|
||||
}
|
||||
ENCODE_LOOP_SPANS
|
||||
@ -867,7 +860,7 @@ void EncodeRGB8(u8 *dst, u8 *src, u32 format)
|
||||
ENCODE_LOOP_BLOCKS
|
||||
{
|
||||
*dst++ = 0xff;
|
||||
*dst++ = src[0];
|
||||
*dst++ = src[2];
|
||||
src += readStride;
|
||||
}
|
||||
ENCODE_LOOP_SPANS
|
||||
@ -888,7 +881,7 @@ void EncodeRGB8(u8 *dst, u8 *src, u32 format)
|
||||
SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride);
|
||||
ENCODE_LOOP_BLOCKS
|
||||
{
|
||||
*dst++ = src[0];
|
||||
*dst++ = src[2];
|
||||
src += readStride;
|
||||
}
|
||||
ENCODE_LOOP_SPANS
|
||||
@ -910,7 +903,7 @@ void EncodeRGB8(u8 *dst, u8 *src, u32 format)
|
||||
SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride);
|
||||
ENCODE_LOOP_BLOCKS
|
||||
{
|
||||
*dst++ = src[2];
|
||||
*dst++ = src[0];
|
||||
src += readStride;
|
||||
}
|
||||
ENCODE_LOOP_SPANS
|
||||
@ -922,7 +915,7 @@ void EncodeRGB8(u8 *dst, u8 *src, u32 format)
|
||||
ENCODE_LOOP_BLOCKS
|
||||
{
|
||||
*dst++ = src[1];
|
||||
*dst++ = src[0];
|
||||
*dst++ = src[2];
|
||||
src += readStride;
|
||||
}
|
||||
ENCODE_LOOP_SPANS
|
||||
@ -933,7 +926,7 @@ void EncodeRGB8(u8 *dst, u8 *src, u32 format)
|
||||
SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride);
|
||||
ENCODE_LOOP_BLOCKS
|
||||
{
|
||||
*dst++ = src[2];
|
||||
*dst++ = src[0];
|
||||
*dst++ = src[1];
|
||||
src += readStride;
|
||||
}
|
||||
@ -1061,11 +1054,11 @@ void EncodeRGB8halfscale(u8 *dst, u8 *src, u32 format)
|
||||
sBlkSize /= 2;
|
||||
ENCODE_LOOP_BLOCKS
|
||||
{
|
||||
boxfilterRGB_to_x8(src, r, 0);
|
||||
boxfilterRGB_to_x8(src, r, 2);
|
||||
*dst = r & 0xf0;
|
||||
src += readStride;
|
||||
|
||||
boxfilterRGB_to_x8(src, r, 0);
|
||||
boxfilterRGB_to_x8(src, r, 2);
|
||||
*dst |= r >> 4;
|
||||
src += readStride;
|
||||
|
||||
@ -1079,7 +1072,7 @@ void EncodeRGB8halfscale(u8 *dst, u8 *src, u32 format)
|
||||
SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride);
|
||||
ENCODE_LOOP_BLOCKS
|
||||
{
|
||||
boxfilterRGB_to_x8(src, r, 0);
|
||||
boxfilterRGB_to_x8(src, r, 2);
|
||||
*dst++ = 0xf0 | (r >> 4);
|
||||
src += readStride;
|
||||
}
|
||||
@ -1091,7 +1084,7 @@ void EncodeRGB8halfscale(u8 *dst, u8 *src, u32 format)
|
||||
SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride);
|
||||
ENCODE_LOOP_BLOCKS
|
||||
{
|
||||
boxfilterRGB_to_x8(src, r, 0);
|
||||
boxfilterRGB_to_x8(src, r, 2);
|
||||
*dst++ = 0xff;
|
||||
*dst++ = r;
|
||||
src += readStride;
|
||||
@ -1114,7 +1107,7 @@ void EncodeRGB8halfscale(u8 *dst, u8 *src, u32 format)
|
||||
SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride);
|
||||
ENCODE_LOOP_BLOCKS
|
||||
{
|
||||
boxfilterRGB_to_x8(src, r, 0);
|
||||
boxfilterRGB_to_x8(src, r, 2);
|
||||
*dst++ = r;
|
||||
src += readStride;
|
||||
}
|
||||
@ -1138,7 +1131,7 @@ void EncodeRGB8halfscale(u8 *dst, u8 *src, u32 format)
|
||||
SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride);
|
||||
ENCODE_LOOP_BLOCKS
|
||||
{
|
||||
boxfilterRGB_to_x8(src, b, 2);
|
||||
boxfilterRGB_to_x8(src, b, 0);
|
||||
*dst++ = b;
|
||||
src += readStride;
|
||||
}
|
||||
@ -1150,7 +1143,7 @@ void EncodeRGB8halfscale(u8 *dst, u8 *src, u32 format)
|
||||
SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride);
|
||||
ENCODE_LOOP_BLOCKS
|
||||
{
|
||||
boxfilterRGB_to_xx8(src, r, g, 0, 1);
|
||||
boxfilterRGB_to_xx8(src, r, g, 2, 1);
|
||||
*dst++ = g;
|
||||
*dst++ = r;
|
||||
src += readStride;
|
||||
@ -1163,7 +1156,7 @@ void EncodeRGB8halfscale(u8 *dst, u8 *src, u32 format)
|
||||
SetSpans(sBlkSize, tBlkSize, tSpan, sBlkSpan, tBlkSpan, writeStride);
|
||||
ENCODE_LOOP_BLOCKS
|
||||
{
|
||||
boxfilterRGB_to_xx8(src, g, b, 1, 2);
|
||||
boxfilterRGB_to_xx8(src, g, b, 1, 0);
|
||||
*dst++ = b;
|
||||
*dst++ = g;
|
||||
src += readStride;
|
||||
|
Reference in New Issue
Block a user