GPU: Added some tests for display transfer flag 1<<24.

This commit is contained in:
Subv 2015-02-22 16:38:14 -05:00
parent 11a50133af
commit d277410a43

View File

@ -22,6 +22,10 @@ enum PixelFormat {
OUT_RGBA4 = 4 << 12, OUT_RGBA4 = 4 << 12,
}; };
enum Flags {
HORIZONTAL_DOWNSCALE = 1 << 24,
};
union Dimensions { union Dimensions {
struct { struct {
u16 height; u16 height;
@ -317,6 +321,53 @@ static bool RGBA8_To_RGBA4(u32* input, u32* output) {
return true; return true;
} }
static bool RGBA8_To_RGBA8_Scaled_Blending(u32* input, u32* output) {
memset(output, 0, 0x4000 * 4);
memset(input, 0, 0x4000 * 4);
*input = 0xFF000000; //Input
*output = 0; //Output
DisplayTransferAndWait(input, output, Dimensions(0x80, 0x80), Dimensions(0x40, 0x40), IN_RGBA8 | OUT_RGBA8 | HORIZONTAL_DOWNSCALE);
TestEquals(*output, (u32)0x7F000000);
// It doesn't average the pixels when the bit 24 isn't enabled
*input = 0xFF000000; //Input
*output = 0; //Output
DisplayTransferAndWait(input, output, Dimensions(0x80, 0x80), Dimensions(0x40, 0x40), IN_RGBA8 | OUT_RGBA8);
TestEquals(*output, (u32)0xFF000000);
*input = 0xFFFF0000; //Input
*output = 0; //Output
DisplayTransferAndWait(input, output, Dimensions(0x80, 0x80), Dimensions(0x40, 0x40), IN_RGBA8 | OUT_RGBA8 | HORIZONTAL_DOWNSCALE);
TestEquals(*output, (u32)0x7F7F0000);
*input = 0xFFFF0000; //Input
input[1] = 0xFF000000;
*output = 0; //Output
DisplayTransferAndWait(input, output, Dimensions(0x80, 0x80), Dimensions(0x40, 0x40), IN_RGBA8 | OUT_RGBA8 | HORIZONTAL_DOWNSCALE);
input[1] = 0;
TestEquals(*output, (u32)0xFF7F0000);
*input = 0xFFFF0000; //Input
input[1] = 0xFF0000FF;
*output = 0; //Output
DisplayTransferAndWait(input, output, Dimensions(0x80, 0x80), Dimensions(0x40, 0x40), IN_RGBA8 | OUT_RGBA8 | HORIZONTAL_DOWNSCALE);
input[1] = 0;
TestEquals(*output, (u32)0xFF7F007F);
*input = 0xFFFF0000; //Input
input[1] = 0x00FF0000; //Input
input[2] = 0xFF000000;
*output = 0; //Output
DisplayTransferAndWait(input, output, Dimensions(0x80, 0x80), Dimensions(0x40, 0x40), IN_RGBA8 | OUT_RGBA8 | HORIZONTAL_DOWNSCALE);
input[1] = 0;
input[2] = 0;
TestEquals(*output, (u32)0x7FFF0000);
TestEquals(output[0x20], (u32)0x7F000000); // Why did the output end up at offset 0x20?
output[0x20] = 0;
return true;
}
void TestAll() { void TestAll() {
const std::string tag = "DisplayTransfer"; const std::string tag = "DisplayTransfer";
@ -330,6 +381,7 @@ void TestAll() {
Test(tag, "RGBA8_To_RGBA4", RGBA8_To_RGBA4(input, output), true); Test(tag, "RGBA8_To_RGBA4", RGBA8_To_RGBA4(input, output), true);
Test(tag, "RGB5A1_To_RGBA4", RGB5A1_To_RGBA4(input, output), true); Test(tag, "RGB5A1_To_RGBA4", RGB5A1_To_RGBA4(input, output), true);
Test(tag, "RGBA4_To_RGB5A1", RGBA4_To_RGB5A1(input, output), true); Test(tag, "RGBA4_To_RGB5A1", RGBA4_To_RGB5A1(input, output), true);
Test(tag, "RGBA8_To_RGBA8_Scaled_Blending", RGBA8_To_RGBA8_Scaled_Blending(input, output), true);
linearFree(input); linearFree(input);
linearFree(output); linearFree(output);