GPU: Added some tests for display transfer flag 1<<24.
This commit is contained in:
parent
11a50133af
commit
d277410a43
@ -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);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user