Merge pull request #30 from Subv/fills
GPU: Added some memory fill tests
This commit is contained in:
commit
8407e7cd4b
@ -1,6 +1,7 @@
|
||||
#include <3ds.h>
|
||||
#include "tests/gpu/gpu.h"
|
||||
#include "tests/gpu/displaytransfer.h"
|
||||
#include "tests/gpu/memoryfills.h"
|
||||
|
||||
namespace GPU {
|
||||
|
||||
@ -9,6 +10,7 @@ void TestAll() {
|
||||
GPU_Init(nullptr);
|
||||
|
||||
DisplayTransfer::TestAll();
|
||||
MemoryFills::TestAll();
|
||||
}
|
||||
|
||||
}
|
91
source/tests/gpu/memoryfills.cpp
Normal file
91
source/tests/gpu/memoryfills.cpp
Normal 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, 0);
|
||||
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);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
9
source/tests/gpu/memoryfills.h
Normal file
9
source/tests/gpu/memoryfills.h
Normal file
@ -0,0 +1,9 @@
|
||||
#pragma once
|
||||
|
||||
namespace GPU {
|
||||
namespace MemoryFills {
|
||||
|
||||
void TestAll();
|
||||
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user