GPU: Added some memory fill tests

This commit is contained in:
Subv 2015-03-08 17:45:39 -05:00
parent d4a1e94bab
commit 42e9ad064c
3 changed files with 102 additions and 0 deletions

View File

@ -1,6 +1,7 @@
#include <3ds.h> #include <3ds.h>
#include "tests/gpu/gpu.h" #include "tests/gpu/gpu.h"
#include "tests/gpu/displaytransfer.h" #include "tests/gpu/displaytransfer.h"
#include "tests/gpu/memoryfills.h"
namespace GPU { namespace GPU {
@ -9,6 +10,7 @@ void TestAll() {
GPU_Init(nullptr); GPU_Init(nullptr);
DisplayTransfer::TestAll(); DisplayTransfer::TestAll();
MemoryFills::TestAll();
} }
} }

View File

@ -0,0 +1,91 @@
#include <limits>
#include <string.h>
#include "output.h"
#include "common/scope_exit.h"
#include "common/string_funcs.h"
#include "tests/test.h"
#include "tests/gpu/memoryfills.h"
namespace GPU {
namespace MemoryFills {
static void FillAndWait(u8* buffer, u32 value, u32 size, u32 control, bool first_engine = true) {
if (first_engine) {
GX_SetMemoryFill(nullptr, (u32*)buffer, value, (u32*)(buffer + size), control, 0, 0, 0, control);
gspWaitForPSC0();
} else {
GX_SetMemoryFill(nullptr, 0, 0, 0, control, (u32*)buffer, value, (u32*)(buffer + size), control);
gspWaitForPSC1();
}
GSPGPU_InvalidateDataCache(nullptr, buffer, size);
}
static bool Fill32bits(u8* buffer) {
FillAndWait(buffer, 0x00FFFFFF, 48, 0x201, false);
TestEquals(buffer[0], 0xFFu);
TestEquals(buffer[1], 0xFFu);
TestEquals(buffer[2], 0xFFu);
TestEquals(buffer[3], 0x00u);
TestEquals(buffer[4], 0xFFu);
TestEquals(buffer[5], 0xFFu);
TestEquals(buffer[6], 0xFFu);
TestEquals(buffer[7], 0x00u);
TestEquals(buffer[48], 0x00u);
TestEquals(buffer[49], 0x00u);
TestEquals(buffer[49], 0x00u);
FillAndWait(buffer, 0x0000FFFF, 48, 0x201, false);
TestEquals(buffer[0], 0xFFu);
TestEquals(buffer[1], 0xFFu);
TestEquals(buffer[2], 0x00u);
TestEquals(buffer[3], 0x00u);
TestEquals(buffer[4], 0xFFu);
TestEquals(buffer[5], 0xFFu);
TestEquals(buffer[6], 0x00u);
TestEquals(buffer[7], 0x00u);
return true;
}
static bool Fill24bits(u8* buffer) {
FillAndWait(buffer, 0x00FFFFFF, 48, 0x101);
TestEquals(buffer[0], 0xFFu);
TestEquals(buffer[1], 0xFFu);
TestEquals(buffer[2], 0xFFu);
TestEquals(buffer[3], 0xFFu);
TestEquals(buffer[4], 0xFFu);
TestEquals(buffer[5], 0xFFu);
TestEquals(buffer[6], 0xFFu);
TestEquals(buffer[7], 0xFFu);
TestEquals(buffer[48], 0x00u);
TestEquals(buffer[49], 0x00u);
TestEquals(buffer[49], 0x00u);
FillAndWait(buffer, 0xFFFFFFFF, 48, 0x101);
TestEquals(buffer[0], 0xFFu);
TestEquals(buffer[1], 0xFFu);
TestEquals(buffer[2], 0xFFu);
TestEquals(buffer[3], 0xFFu);
FillAndWait(buffer, 0x00FFFF00, 48, 0x101);
TestEquals(buffer[0], 0x00u);
TestEquals(buffer[1], 0xFFu);
TestEquals(buffer[2], 0xFFu);
TestEquals(buffer[3], 0x00u);
return true;
}
void TestAll() {
const std::string tag = "MemoryFills";
u8* buffer = (u8*)vramAlloc(0x400);
Test(tag, "Fill24bits", Fill24bits(buffer), true);
Test(tag, "Fill32bits", Fill32bits(buffer), true);
vramFree(buffer);
}
}
}

View File

@ -0,0 +1,9 @@
#pragma once
namespace GPU {
namespace MemoryFills {
void TestAll();
}
}