From 42e9ad064c9c861e2a25b65f0197d157c787c3df Mon Sep 17 00:00:00 2001 From: Subv Date: Sun, 8 Mar 2015 17:45:39 -0500 Subject: [PATCH 1/2] GPU: Added some memory fill tests --- source/tests/gpu/gpu.cpp | 2 + source/tests/gpu/memoryfills.cpp | 91 ++++++++++++++++++++++++++++++++ source/tests/gpu/memoryfills.h | 9 ++++ 3 files changed, 102 insertions(+) create mode 100644 source/tests/gpu/memoryfills.cpp create mode 100644 source/tests/gpu/memoryfills.h diff --git a/source/tests/gpu/gpu.cpp b/source/tests/gpu/gpu.cpp index 7b08ff7..360151b 100644 --- a/source/tests/gpu/gpu.cpp +++ b/source/tests/gpu/gpu.cpp @@ -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(); } } \ No newline at end of file diff --git a/source/tests/gpu/memoryfills.cpp b/source/tests/gpu/memoryfills.cpp new file mode 100644 index 0000000..dfea209 --- /dev/null +++ b/source/tests/gpu/memoryfills.cpp @@ -0,0 +1,91 @@ +#include +#include +#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); +} + +} +} \ No newline at end of file diff --git a/source/tests/gpu/memoryfills.h b/source/tests/gpu/memoryfills.h new file mode 100644 index 0000000..db1809b --- /dev/null +++ b/source/tests/gpu/memoryfills.h @@ -0,0 +1,9 @@ +#pragma once + +namespace GPU { +namespace MemoryFills { + +void TestAll(); + +} +} \ No newline at end of file From fc8ca61f958cd031c0e0d5886ba34f5108a3f4bf Mon Sep 17 00:00:00 2001 From: Subv Date: Tue, 10 Mar 2015 13:09:36 -0500 Subject: [PATCH 2/2] GPU/Memfills: Addressed comments and fixed a typo --- source/tests/gpu/gpu.cpp | 2 +- source/tests/gpu/memoryfills.cpp | 12 ++++++------ source/tests/gpu/memoryfills.h | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/source/tests/gpu/gpu.cpp b/source/tests/gpu/gpu.cpp index 360151b..0f6a4cc 100644 --- a/source/tests/gpu/gpu.cpp +++ b/source/tests/gpu/gpu.cpp @@ -13,4 +13,4 @@ void TestAll() { MemoryFills::TestAll(); } -} \ No newline at end of file +} diff --git a/source/tests/gpu/memoryfills.cpp b/source/tests/gpu/memoryfills.cpp index dfea209..68251db 100644 --- a/source/tests/gpu/memoryfills.cpp +++ b/source/tests/gpu/memoryfills.cpp @@ -11,7 +11,7 @@ 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); + 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); @@ -20,7 +20,7 @@ static void FillAndWait(u8* buffer, u32 value, u32 size, u32 control, bool first GSPGPU_InvalidateDataCache(nullptr, buffer, size); } -static bool Fill32bits(u8* buffer) { +static bool Fill32Bits(u8* buffer) { FillAndWait(buffer, 0x00FFFFFF, 48, 0x201, false); TestEquals(buffer[0], 0xFFu); TestEquals(buffer[1], 0xFFu); @@ -47,7 +47,7 @@ static bool Fill32bits(u8* buffer) { return true; } -static bool Fill24bits(u8* buffer) { +static bool Fill24Bits(u8* buffer) { FillAndWait(buffer, 0x00FFFFFF, 48, 0x101); TestEquals(buffer[0], 0xFFu); TestEquals(buffer[1], 0xFFu); @@ -81,11 +81,11 @@ void TestAll() { u8* buffer = (u8*)vramAlloc(0x400); - Test(tag, "Fill24bits", Fill24bits(buffer), true); - Test(tag, "Fill32bits", Fill32bits(buffer), true); + Test(tag, "Fill24Bits", Fill24Bits(buffer), true); + Test(tag, "Fill32Bits", Fill32Bits(buffer), true); vramFree(buffer); } } -} \ No newline at end of file +} diff --git a/source/tests/gpu/memoryfills.h b/source/tests/gpu/memoryfills.h index db1809b..e369a46 100644 --- a/source/tests/gpu/memoryfills.h +++ b/source/tests/gpu/memoryfills.h @@ -6,4 +6,4 @@ namespace MemoryFills { void TestAll(); } -} \ No newline at end of file +}