Merge pull request #846 from reicast/feat/ta-hash-logs
rend/if: Logging/verification of MD5(ta command list data)
This commit is contained in:
commit
ad7e23d849
|
@ -5,10 +5,16 @@
|
||||||
|
|
||||||
#include "deps/zlib/zlib.h"
|
#include "deps/zlib/zlib.h"
|
||||||
|
|
||||||
|
#include "deps/crypto/md5.h"
|
||||||
|
|
||||||
#if FEAT_HAS_NIXPROF
|
#if FEAT_HAS_NIXPROF
|
||||||
#include "profiler/profiler.h"
|
#include "profiler/profiler.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define FRAME_MD5 0x1
|
||||||
|
FILE* fLogFrames;
|
||||||
|
FILE* fCheckFrames;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
||||||
rendv3 ideas
|
rendv3 ideas
|
||||||
|
@ -291,6 +297,48 @@ void rend_start_render()
|
||||||
|
|
||||||
if (ctx)
|
if (ctx)
|
||||||
{
|
{
|
||||||
|
if (fLogFrames || fCheckFrames) {
|
||||||
|
MD5Context md5;
|
||||||
|
u8 digest[16];
|
||||||
|
|
||||||
|
MD5Init(&md5);
|
||||||
|
MD5Update(&md5, ctx->tad.thd_root, ctx->tad.End() - ctx->tad.thd_root);
|
||||||
|
MD5Final(digest, &md5);
|
||||||
|
|
||||||
|
if (fLogFrames) {
|
||||||
|
fputc(FRAME_MD5, fLogFrames);
|
||||||
|
fwrite(digest, 1, 16, fLogFrames);
|
||||||
|
fflush(fLogFrames);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fCheckFrames) {
|
||||||
|
u8 v;
|
||||||
|
u8 digest2[16];
|
||||||
|
int ch = fgetc(fCheckFrames);
|
||||||
|
|
||||||
|
if (ch == EOF) {
|
||||||
|
printf("Testing: TA Hash log matches, exiting\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
verify(ch == FRAME_MD5);
|
||||||
|
|
||||||
|
fread(digest2, 1, 16, fCheckFrames);
|
||||||
|
|
||||||
|
verify(memcmp(digest, digest2, 16) == 0);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
u8* dig = digest;
|
||||||
|
printf("FRAME: %02X-%02X-%02X-%02X-%02X-%02X-%02X-%02X-%02X-%02X-%02X-%02X-%02X-%02X-%02X-%02X\n",
|
||||||
|
digest[0], digest[1], digest[2], digest[3], digest[4], digest[5], digest[6], digest[7],
|
||||||
|
digest[8], digest[9], digest[10], digest[11], digest[12], digest[13], digest[14], digest[15]
|
||||||
|
);
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
if (!ctx->rend.Overrun)
|
if (!ctx->rend.Overrun)
|
||||||
{
|
{
|
||||||
//printf("REP: %.2f ms\n",render_end_pending_cycles/200000.0);
|
//printf("REP: %.2f ms\n",render_end_pending_cycles/200000.0);
|
||||||
|
@ -366,6 +414,13 @@ void rend_end_wait()
|
||||||
|
|
||||||
bool rend_init()
|
bool rend_init()
|
||||||
{
|
{
|
||||||
|
if (fLogFrames = fopen(settings.pvr.HashLogFile.c_str(), "wb")) {
|
||||||
|
printf("Saving frame hashes to: '%s'\n", settings.pvr.HashLogFile.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fCheckFrames = fopen(settings.pvr.HashCheckFile.c_str(), "rb")) {
|
||||||
|
printf("Comparing frame hashes against: '%s'\n", settings.pvr.HashCheckFile.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef NO_REND
|
#ifdef NO_REND
|
||||||
renderer = rend_norend();
|
renderer = rend_norend();
|
||||||
|
@ -435,6 +490,11 @@ bool rend_init()
|
||||||
|
|
||||||
void rend_term()
|
void rend_term()
|
||||||
{
|
{
|
||||||
|
if (fCheckFrames)
|
||||||
|
fclose(fCheckFrames);
|
||||||
|
|
||||||
|
if (fLogFrames)
|
||||||
|
fclose(fLogFrames);
|
||||||
}
|
}
|
||||||
|
|
||||||
void rend_vblank()
|
void rend_vblank()
|
||||||
|
|
|
@ -260,6 +260,8 @@ void LoadSettings()
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
settings.bios.UseReios = cfgLoadInt("config", "bios.UseReios", 0);
|
settings.bios.UseReios = cfgLoadInt("config", "bios.UseReios", 0);
|
||||||
|
settings.pvr.HashLogFile = cfgLoadStr("testing", "ta.HashLogFile", "");
|
||||||
|
settings.pvr.HashCheckFile = cfgLoadStr("testing", "ta.HashCheckFile", "");
|
||||||
|
|
||||||
#if (HOST_OS != OS_LINUX || defined(_ANDROID) || defined(TARGET_PANDORA))
|
#if (HOST_OS != OS_LINUX || defined(_ANDROID) || defined(TARGET_PANDORA))
|
||||||
settings.aica.BufferSize=2048;
|
settings.aica.BufferSize=2048;
|
||||||
|
|
|
@ -696,6 +696,9 @@ struct settings_t
|
||||||
|
|
||||||
u32 MaxThreads;
|
u32 MaxThreads;
|
||||||
u32 SynchronousRendering;
|
u32 SynchronousRendering;
|
||||||
|
|
||||||
|
string HashLogFile;
|
||||||
|
string HashCheckFile;
|
||||||
} pvr;
|
} pvr;
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
|
|
Loading…
Reference in New Issue