Core: Add more video log types

This commit is contained in:
Vicki Pfau 2017-04-18 01:53:49 -07:00
parent db4a873d9c
commit 1b6531e320
3 changed files with 55 additions and 5 deletions

View File

@ -127,7 +127,7 @@ void mVideoLoggerRendererWriteOAM(struct mVideoLogger* logger, uint32_t address,
logger->writeData(logger, &dirty, sizeof(dirty));
}
void mVideoLoggerRendererDrawScanline(struct mVideoLogger* logger, int y) {
static void _flushVRAM(struct mVideoLogger* logger) {
size_t i;
for (i = 0; i < _roundUp(logger->vramSize, 17); ++i) {
if (logger->vramDirtyBitmap[i]) {
@ -141,7 +141,7 @@ void mVideoLoggerRendererDrawScanline(struct mVideoLogger* logger, int y) {
struct mVideoLoggerDirtyInfo dirty = {
DIRTY_VRAM,
j * 0x1000,
0xABCD,
0x1000,
0xDEADBEEF,
};
logger->writeData(logger, &dirty, sizeof(dirty));
@ -149,6 +149,10 @@ void mVideoLoggerRendererDrawScanline(struct mVideoLogger* logger, int y) {
}
}
}
}
void mVideoLoggerRendererDrawScanline(struct mVideoLogger* logger, int y) {
_flushVRAM(logger);
struct mVideoLoggerDirtyInfo dirty = {
DIRTY_SCANLINE,
y,
@ -158,6 +162,17 @@ void mVideoLoggerRendererDrawScanline(struct mVideoLogger* logger, int y) {
logger->writeData(logger, &dirty, sizeof(dirty));
}
void mVideoLoggerRendererDrawRange(struct mVideoLogger* logger, int startX, int endX, int y) {
_flushVRAM(logger);
struct mVideoLoggerDirtyInfo dirty = {
DIRTY_RANGE,
y,
startX,
endX,
};
logger->writeData(logger, &dirty, sizeof(dirty));
}
void mVideoLoggerRendererFlush(struct mVideoLogger* logger) {
struct mVideoLoggerDirtyInfo dirty = {
DIRTY_FLUSH,
@ -168,6 +183,27 @@ void mVideoLoggerRendererFlush(struct mVideoLogger* logger) {
logger->writeData(logger, &dirty, sizeof(dirty));
}
void mVideoLoggerRendererFinishFrame(struct mVideoLogger* logger) {
struct mVideoLoggerDirtyInfo dirty = {
DIRTY_FRAME,
0,
0,
0xDEADBEEF,
};
logger->writeData(logger, &dirty, sizeof(dirty));
}
void mVideoLoggerWriteBuffer(struct mVideoLogger* logger, uint32_t bufferId, uint32_t offset, uint32_t length, const void* data) {
struct mVideoLoggerDirtyInfo dirty = {
DIRTY_BUFFER,
bufferId,
offset,
length,
};
logger->writeData(logger, &dirty, sizeof(dirty));
logger->writeData(logger, data, length);
}
bool mVideoLoggerRendererRun(struct mVideoLogger* logger, bool block) {
struct mVideoLoggerDirtyInfo item = {0};
while (logger->readData(logger, &item, sizeof(item), block)) {
@ -178,6 +214,9 @@ bool mVideoLoggerRendererRun(struct mVideoLogger* logger, bool block) {
case DIRTY_VRAM:
case DIRTY_SCANLINE:
case DIRTY_FLUSH:
case DIRTY_FRAME:
case DIRTY_RANGE:
case DIRTY_BUFFER:
if (!logger->parsePacket(logger, &item)) {
return true;
}

View File

@ -19,14 +19,17 @@ enum mVideoLoggerDirtyType {
DIRTY_REGISTER,
DIRTY_OAM,
DIRTY_PALETTE,
DIRTY_VRAM
DIRTY_VRAM,
DIRTY_FRAME,
DIRTY_RANGE,
DIRTY_BUFFER,
};
struct mVideoLoggerDirtyInfo {
enum mVideoLoggerDirtyType type;
uint32_t address;
uint16_t value;
uint32_t padding;
uint32_t value;
uint32_t value2;
};
struct VFile;
@ -104,8 +107,12 @@ void mVideoLoggerRendererWriteVRAM(struct mVideoLogger* logger, uint32_t address
void mVideoLoggerRendererWritePalette(struct mVideoLogger* logger, uint32_t address, uint16_t value);
void mVideoLoggerRendererWriteOAM(struct mVideoLogger* logger, uint32_t address, uint16_t value);
void mVideoLoggerWriteBuffer(struct mVideoLogger* logger, uint32_t bufferId, uint32_t offset, uint32_t length, const void* data);
void mVideoLoggerRendererDrawScanline(struct mVideoLogger* logger, int y);
void mVideoLoggerRendererDrawRange(struct mVideoLogger* logger, int startX, int endX, int y);
void mVideoLoggerRendererFlush(struct mVideoLogger* logger);
void mVideoLoggerRendererFinishFrame(struct mVideoLogger* logger);
bool mVideoLoggerRendererRun(struct mVideoLogger* logger, bool block);

View File

@ -144,6 +144,9 @@ static bool _parsePacket(struct mVideoLogger* logger, const struct mVideoLoggerD
case DIRTY_SCANLINE:
proxyRenderer->backend->drawScanline(proxyRenderer->backend, item->address);
break;
case DIRTY_FRAME:
proxyRenderer->backend->finishFrame(proxyRenderer->backend);
break;
case DIRTY_FLUSH:
return false;
default:
@ -235,6 +238,7 @@ void GBAVideoProxyRendererFinishFrame(struct GBAVideoRenderer* renderer) {
proxyRenderer->logger->lock(proxyRenderer->logger);
proxyRenderer->logger->wait(proxyRenderer->logger);
}
mVideoLoggerRendererFinishFrame(proxyRenderer->logger);
mVideoLoggerRendererFlush(proxyRenderer->logger);
if (proxyRenderer->logger->block && proxyRenderer->logger->wait) {
proxyRenderer->logger->unlock(proxyRenderer->logger);