OpenCL: Fixed and enabled CMPR decompression

git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@4448 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
Orphis 2009-10-22 01:42:21 +00:00
parent 500497ec2d
commit 7a2bad4efb
2 changed files with 5 additions and 7 deletions

View File

@ -175,14 +175,13 @@ kernel void decodeCMPRBlock(global uchar *dst,
((color565 >> 8) & 0xF8) | ((color565 >> 13) & 0x7),
0xFF, 0xFF));
uint4 colors;
uint4 choice = (uint4)((color565.s0 - color565.s1) << 16);
//uint4 choice = (uint4)((color565.s0 - color565.s1) << 16);
uint4 colorNoAlpha;
//uchar4 frac = (color32.odd - color32.even) / 2;
//frac = frac - (frac / 4);
uchar4 frac = convert_uchar4((((convert_ushort4(color32.even) & 0xFF) - (convert_ushort4(color32.odd) & 0xFF)) * 3) / 8);
//colorNoAlpha = convert_uint4(frac);
colorNoAlpha = convert_uint4(color32.even - frac);
colorNoAlpha = (colorNoAlpha << 8) | convert_uint4(color32.odd + frac);
colorNoAlpha = convert_uint4(color32.odd + frac);
colorNoAlpha = (colorNoAlpha << 8) | convert_uint4(color32.even - frac);
colorNoAlpha = (colorNoAlpha << 8) | convert_uint4(color32.odd);
colorNoAlpha = (colorNoAlpha << 8) | convert_uint4(color32.even);
@ -190,7 +189,6 @@ kernel void decodeCMPRBlock(global uchar *dst,
//uchar4 midpoint = rhadd(color32.odd, color32.even);
uchar4 midpoint = convert_uchar4((convert_ushort4(color32.odd) + convert_ushort4(color32.even) + 1) / 2);
midpoint.s3 = 0xFF;
//colorAlpha = convert_uint4(color32.odd);
colorAlpha = convert_uint4((uchar4)(0, 0, 0, 0));
colorAlpha = (colorAlpha << 8) | convert_uint4(midpoint);
colorAlpha = (colorAlpha << 8) | convert_uint4(color32.odd);
@ -199,7 +197,8 @@ kernel void decodeCMPRBlock(global uchar *dst,
//colorNoAlpha = (uint4)(0xFFFFFFFF);
//colorAlpha = (uint4)(0, 0, 0, 0xFFFFFFFF);
colors = select(colorNoAlpha, colorAlpha, choice);
//colors = select(colorAlpha, colorNoAlpha, choice);
colors = color565.s0 > color565.s1 ? colorNoAlpha : colorAlpha;
uint16 colorsFull = (uint16)(colors, colors, colors, colors);

View File

@ -161,7 +161,6 @@ PC_TexFormat TexDecoder_Decode_OpenCL(u8 *dst, const u8 *src, int width, int hei
formatResult = PC_TEX_FMT_BGRA32;
break;
case GX_TF_CMPR:
return PC_TEX_FMT_NONE; // Remove to test CMPR
kernelToRun = Decoders[7].kernel;
sizeOfSrc = sizeof(u8) / 2.0f;
sizeOfDst = sizeof(u32);