mirror of
https://github.com/hrydgard/ppsspp.git
synced 2024-11-23 05:19:56 +00:00
GE Debugger: Fix display event record timing.
When the display happens mid frame, this fixes it so you can see the result easily when running the dump, without manually stepping through.
This commit is contained in:
parent
79d16f7b9f
commit
2d3885fc1a
@ -39,6 +39,7 @@
|
||||
#include "GPU/Common/FramebufferCommon.h"
|
||||
#include "GPU/Common/PostShader.h"
|
||||
#include "GPU/Common/TextureCacheCommon.h"
|
||||
#include "GPU/Debugger/Record.h"
|
||||
#include "GPU/GPUInterface.h"
|
||||
#include "GPU/GPUState.h"
|
||||
|
||||
@ -169,6 +170,7 @@ void FramebufferManagerCommon::SetDisplayFramebuffer(u32 framebuf, u32 stride, G
|
||||
displayFramebufPtr_ = framebuf;
|
||||
displayStride_ = stride;
|
||||
displayFormat_ = format;
|
||||
GPURecord::NotifyDisplay(framebuf, stride, format);
|
||||
}
|
||||
|
||||
VirtualFramebuffer *FramebufferManagerCommon::GetVFBAt(u32 addr) {
|
||||
|
@ -372,23 +372,6 @@ static std::string GenRecordingFilename() {
|
||||
return StringFromFormat("%s_%04d.ppdmp", prefix.c_str(), 9999);
|
||||
}
|
||||
|
||||
static void EmitDisplayBuf() {
|
||||
struct DisplayBufData {
|
||||
PSPPointer<u8> topaddr;
|
||||
u32 linesize, pixelFormat;
|
||||
};
|
||||
|
||||
DisplayBufData disp{};
|
||||
__DisplayGetFramebuf(&disp.topaddr, &disp.linesize, &disp.pixelFormat, 0);
|
||||
|
||||
u32 ptr = (u32)pushbuf.size();
|
||||
u32 sz = (u32)sizeof(disp);
|
||||
pushbuf.resize(pushbuf.size() + sz);
|
||||
memcpy(pushbuf.data() + ptr, &disp, sz);
|
||||
|
||||
commands.push_back({CommandType::DISPLAY, sz, ptr});
|
||||
}
|
||||
|
||||
static void BeginRecording() {
|
||||
u32 ptr = (u32)pushbuf.size();
|
||||
u32 sz = 512 * 4;
|
||||
@ -412,7 +395,6 @@ static void WriteCompressed(FILE *fp, const void *p, size_t sz) {
|
||||
|
||||
static std::string WriteRecording() {
|
||||
FlushRegisters();
|
||||
EmitDisplayBuf();
|
||||
|
||||
const std::string filename = GenRecordingFilename();
|
||||
|
||||
@ -771,6 +753,27 @@ void NotifyUpload(u32 dest, u32 sz) {
|
||||
NotifyMemcpy(dest, dest, sz);
|
||||
}
|
||||
|
||||
void NotifyDisplay(u32 framebuf, int stride, int fmt) {
|
||||
if (!active) {
|
||||
return;
|
||||
}
|
||||
|
||||
struct DisplayBufData {
|
||||
PSPPointer<u8> topaddr;
|
||||
int linesize, pixelFormat;
|
||||
};
|
||||
|
||||
DisplayBufData disp{ framebuf, stride, fmt };
|
||||
|
||||
FlushRegisters();
|
||||
u32 ptr = (u32)pushbuf.size();
|
||||
u32 sz = (u32)sizeof(disp);
|
||||
pushbuf.resize(pushbuf.size() + sz);
|
||||
memcpy(pushbuf.data() + ptr, &disp, sz);
|
||||
|
||||
commands.push_back({ CommandType::DISPLAY, sz, ptr });
|
||||
}
|
||||
|
||||
void NotifyFrame() {
|
||||
if (active && !writePending && !commands.empty()) {
|
||||
// Delay write until the first command of the next frame, so we get the right display buf.
|
||||
@ -980,7 +983,7 @@ void DumpExecute::Texture(int level, u32 ptr, u32 sz) {
|
||||
void DumpExecute::Display(u32 ptr, u32 sz) {
|
||||
struct DisplayBufData {
|
||||
PSPPointer<u8> topaddr;
|
||||
u32 linesize, pixelFormat;
|
||||
int linesize, pixelFormat;
|
||||
};
|
||||
|
||||
DisplayBufData *disp = (DisplayBufData *)(pushbuf.data() + ptr);
|
||||
|
@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2017- PPSSPP Project.
|
||||
// Copyright (c) 2017- PPSSPP Project.
|
||||
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
@ -33,6 +33,7 @@ void NotifyCommand(u32 pc);
|
||||
void NotifyMemcpy(u32 dest, u32 src, u32 sz);
|
||||
void NotifyMemset(u32 dest, int v, u32 sz);
|
||||
void NotifyUpload(u32 dest, u32 sz);
|
||||
void NotifyDisplay(u32 addr, int stride, int fmt);
|
||||
void NotifyFrame();
|
||||
|
||||
bool RunMountedReplay(const std::string &filename);
|
||||
|
@ -143,6 +143,7 @@ void SoftGPU::SetDisplayFramebuffer(u32 framebuf, u32 stride, GEBufferFormat for
|
||||
displayStride_ = stride;
|
||||
displayFormat_ = format;
|
||||
GPUDebug::NotifyDisplay(framebuf, stride, format);
|
||||
GPURecord::NotifyDisplay(framebuf, stride, format);
|
||||
}
|
||||
|
||||
// Copies RGBA8 data from RAM to the currently bound render target.
|
||||
|
Loading…
Reference in New Issue
Block a user