Merge pull request #15894 from unknownbrackets/debugger
GE Debugger: Record only one flip if display framebuf not changed, step on vsync
This commit is contained in:
commit
5d50d02227
18 changed files with 41 additions and 39 deletions
|
@ -41,6 +41,7 @@
|
||||||
#include "GPU/Common/PresentationCommon.h"
|
#include "GPU/Common/PresentationCommon.h"
|
||||||
#include "GPU/Common/TextureCacheCommon.h"
|
#include "GPU/Common/TextureCacheCommon.h"
|
||||||
#include "GPU/Common/ReinterpretFramebuffer.h"
|
#include "GPU/Common/ReinterpretFramebuffer.h"
|
||||||
|
#include "GPU/Debugger/Debugger.h"
|
||||||
#include "GPU/Debugger/Record.h"
|
#include "GPU/Debugger/Record.h"
|
||||||
#include "GPU/Debugger/Stepping.h"
|
#include "GPU/Debugger/Stepping.h"
|
||||||
#include "GPU/GPUInterface.h"
|
#include "GPU/GPUInterface.h"
|
||||||
|
@ -105,6 +106,7 @@ void FramebufferManagerCommon::SetDisplayFramebuffer(u32 framebuf, u32 stride, G
|
||||||
displayFramebufPtr_ = framebuf;
|
displayFramebufPtr_ = framebuf;
|
||||||
displayStride_ = stride;
|
displayStride_ = stride;
|
||||||
displayFormat_ = format;
|
displayFormat_ = format;
|
||||||
|
GPUDebug::NotifyDisplay(framebuf, stride, format);
|
||||||
GPURecord::NotifyDisplay(framebuf, stride, format);
|
GPURecord::NotifyDisplay(framebuf, stride, format);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -35,7 +35,6 @@
|
||||||
#include "GPU/GeDisasm.h"
|
#include "GPU/GeDisasm.h"
|
||||||
|
|
||||||
#include "GPU/Common/FramebufferManagerCommon.h"
|
#include "GPU/Common/FramebufferManagerCommon.h"
|
||||||
#include "GPU/Debugger/Debugger.h"
|
|
||||||
#include "GPU/D3D11/ShaderManagerD3D11.h"
|
#include "GPU/D3D11/ShaderManagerD3D11.h"
|
||||||
#include "GPU/D3D11/GPU_D3D11.h"
|
#include "GPU/D3D11/GPU_D3D11.h"
|
||||||
#include "GPU/D3D11/FramebufferManagerD3D11.h"
|
#include "GPU/D3D11/FramebufferManagerD3D11.h"
|
||||||
|
@ -239,13 +238,6 @@ void GPU_D3D11::BeginFrame() {
|
||||||
gstate_c.Dirty(DIRTY_PROJTHROUGHMATRIX);
|
gstate_c.Dirty(DIRTY_PROJTHROUGHMATRIX);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GPU_D3D11::SetDisplayFramebuffer(u32 framebuf, u32 stride, GEBufferFormat format) {
|
|
||||||
// TODO: Some games like Spongebob - Yellow Avenger, never change framebuffer, they blit to it.
|
|
||||||
// So breaking on frames doesn't work. Might want to move this to sceDisplay vsync.
|
|
||||||
GPUDebug::NotifyDisplay(framebuf, stride, format);
|
|
||||||
framebufferManagerD3D11_->SetDisplayFramebuffer(framebuf, stride, format);
|
|
||||||
}
|
|
||||||
|
|
||||||
void GPU_D3D11::CopyDisplayToOutput(bool reallyDirty) {
|
void GPU_D3D11::CopyDisplayToOutput(bool reallyDirty) {
|
||||||
// Flush anything left over.
|
// Flush anything left over.
|
||||||
drawEngine_.Flush();
|
drawEngine_.Flush();
|
||||||
|
|
|
@ -41,7 +41,6 @@ public:
|
||||||
void ExecuteOp(u32 op, u32 diff) override;
|
void ExecuteOp(u32 op, u32 diff) override;
|
||||||
|
|
||||||
void ReapplyGfxState() override;
|
void ReapplyGfxState() override;
|
||||||
void SetDisplayFramebuffer(u32 framebuf, u32 stride, GEBufferFormat format) override;
|
|
||||||
void GetStats(char *buffer, size_t bufsize) override;
|
void GetStats(char *buffer, size_t bufsize) override;
|
||||||
void ClearCacheNextFrame() override;
|
void ClearCacheNextFrame() override;
|
||||||
void DeviceLost() override; // Only happens on Android. Drop all textures and shaders.
|
void DeviceLost() override; // Only happens on Android. Drop all textures and shaders.
|
||||||
|
|
|
@ -154,6 +154,15 @@ void NotifyDisplay(u32 framebuf, u32 stride, int format) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void NotifyBeginFrame() {
|
||||||
|
if (!active)
|
||||||
|
return;
|
||||||
|
if (breakNext == BreakNext::VSYNC) {
|
||||||
|
// Just start stepping as soon as we can once the vblank finishes.
|
||||||
|
breakNext = BreakNext::OP;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int PrimsThisFrame() {
|
int PrimsThisFrame() {
|
||||||
return primsThisFrame;
|
return primsThisFrame;
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,6 +28,7 @@ enum class BreakNext {
|
||||||
TEX,
|
TEX,
|
||||||
NONTEX,
|
NONTEX,
|
||||||
FRAME,
|
FRAME,
|
||||||
|
VSYNC,
|
||||||
PRIM,
|
PRIM,
|
||||||
CURVE,
|
CURVE,
|
||||||
COUNT,
|
COUNT,
|
||||||
|
@ -43,6 +44,7 @@ void SetBreakCount(int c, bool relative = false);
|
||||||
bool NotifyCommand(u32 pc);
|
bool NotifyCommand(u32 pc);
|
||||||
void NotifyDraw();
|
void NotifyDraw();
|
||||||
void NotifyDisplay(u32 framebuf, u32 stride, int format);
|
void NotifyDisplay(u32 framebuf, u32 stride, int format);
|
||||||
|
void NotifyBeginFrame();
|
||||||
|
|
||||||
int PrimsThisFrame();
|
int PrimsThisFrame();
|
||||||
int PrimsLastFrame();
|
int PrimsLastFrame();
|
||||||
|
|
|
@ -50,6 +50,7 @@ namespace GPURecord {
|
||||||
static bool active = false;
|
static bool active = false;
|
||||||
static bool nextFrame = false;
|
static bool nextFrame = false;
|
||||||
static int flipLastAction = -1;
|
static int flipLastAction = -1;
|
||||||
|
static int flipFinishAt = -1;
|
||||||
static std::function<void(const Path &)> writeCallback;
|
static std::function<void(const Path &)> writeCallback;
|
||||||
|
|
||||||
static std::vector<u8> pushbuf;
|
static std::vector<u8> pushbuf;
|
||||||
|
@ -145,6 +146,7 @@ static void BeginRecording() {
|
||||||
lastTextures.clear();
|
lastTextures.clear();
|
||||||
lastRenderTargets.clear();
|
lastRenderTargets.clear();
|
||||||
flipLastAction = gpuStats.numFlips;
|
flipLastAction = gpuStats.numFlips;
|
||||||
|
flipFinishAt = -1;
|
||||||
|
|
||||||
u32 ptr = (u32)pushbuf.size();
|
u32 ptr = (u32)pushbuf.size();
|
||||||
u32 sz = 512 * 4;
|
u32 sz = 512 * 4;
|
||||||
|
@ -494,6 +496,7 @@ bool Activate() {
|
||||||
if (!nextFrame) {
|
if (!nextFrame) {
|
||||||
nextFrame = true;
|
nextFrame = true;
|
||||||
flipLastAction = gpuStats.numFlips;
|
flipLastAction = gpuStats.numFlips;
|
||||||
|
flipFinishAt = -1;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
@ -512,6 +515,7 @@ static void FinishRecording() {
|
||||||
NOTICE_LOG(SYSTEM, "Recording finished");
|
NOTICE_LOG(SYSTEM, "Recording finished");
|
||||||
active = false;
|
active = false;
|
||||||
flipLastAction = gpuStats.numFlips;
|
flipLastAction = gpuStats.numFlips;
|
||||||
|
flipFinishAt = -1;
|
||||||
|
|
||||||
if (writeCallback)
|
if (writeCallback)
|
||||||
writeCallback(filename);
|
writeCallback(filename);
|
||||||
|
@ -673,10 +677,10 @@ void NotifyDisplay(u32 framebuf, int stride, int fmt) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void NotifyFrame() {
|
void NotifyBeginFrame() {
|
||||||
const bool noDisplayAction = flipLastAction + 4 < gpuStats.numFlips;
|
const bool noDisplayAction = flipLastAction + 4 < gpuStats.numFlips;
|
||||||
// We do this only to catch things that don't call NotifyFrame.
|
// We do this only to catch things that don't call NotifyDisplay.
|
||||||
if (active && HasDrawCommands() && noDisplayAction) {
|
if (active && HasDrawCommands() && (noDisplayAction || gpuStats.numFlips == flipFinishAt)) {
|
||||||
NOTICE_LOG(SYSTEM, "Recording complete on frame");
|
NOTICE_LOG(SYSTEM, "Recording complete on frame");
|
||||||
|
|
||||||
struct DisplayBufData {
|
struct DisplayBufData {
|
||||||
|
@ -700,6 +704,8 @@ void NotifyFrame() {
|
||||||
if (nextFrame && (gstate_c.skipDrawReason & SKIPDRAW_SKIPFRAME) == 0 && noDisplayAction) {
|
if (nextFrame && (gstate_c.skipDrawReason & SKIPDRAW_SKIPFRAME) == 0 && noDisplayAction) {
|
||||||
NOTICE_LOG(SYSTEM, "Recording starting on frame...");
|
NOTICE_LOG(SYSTEM, "Recording starting on frame...");
|
||||||
BeginRecording();
|
BeginRecording();
|
||||||
|
// If we began on a BeginFrame, end on a BeginFrame.
|
||||||
|
flipFinishAt = gpuStats.numFlips + 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -36,7 +36,7 @@ void NotifyMemcpy(u32 dest, u32 src, u32 sz);
|
||||||
void NotifyMemset(u32 dest, int v, u32 sz);
|
void NotifyMemset(u32 dest, int v, u32 sz);
|
||||||
void NotifyUpload(u32 dest, u32 sz);
|
void NotifyUpload(u32 dest, u32 sz);
|
||||||
void NotifyDisplay(u32 addr, int stride, int fmt);
|
void NotifyDisplay(u32 addr, int stride, int fmt);
|
||||||
void NotifyFrame();
|
void NotifyBeginFrame();
|
||||||
void NotifyCPU();
|
void NotifyCPU();
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -38,7 +38,6 @@
|
||||||
#include "GPU/GeDisasm.h"
|
#include "GPU/GeDisasm.h"
|
||||||
|
|
||||||
#include "GPU/Common/FramebufferManagerCommon.h"
|
#include "GPU/Common/FramebufferManagerCommon.h"
|
||||||
#include "GPU/Debugger/Debugger.h"
|
|
||||||
#include "GPU/Directx9/ShaderManagerDX9.h"
|
#include "GPU/Directx9/ShaderManagerDX9.h"
|
||||||
#include "GPU/Directx9/GPU_DX9.h"
|
#include "GPU/Directx9/GPU_DX9.h"
|
||||||
#include "GPU/Directx9/FramebufferManagerDX9.h"
|
#include "GPU/Directx9/FramebufferManagerDX9.h"
|
||||||
|
@ -286,11 +285,6 @@ void GPU_DX9::BeginFrame() {
|
||||||
framebufferManager_->BeginFrame();
|
framebufferManager_->BeginFrame();
|
||||||
}
|
}
|
||||||
|
|
||||||
void GPU_DX9::SetDisplayFramebuffer(u32 framebuf, u32 stride, GEBufferFormat format) {
|
|
||||||
GPUDebug::NotifyDisplay(framebuf, stride, format);
|
|
||||||
framebufferManagerDX9_->SetDisplayFramebuffer(framebuf, stride, format);
|
|
||||||
}
|
|
||||||
|
|
||||||
void GPU_DX9::CopyDisplayToOutput(bool reallyDirty) {
|
void GPU_DX9::CopyDisplayToOutput(bool reallyDirty) {
|
||||||
dxstate.depthWrite.set(true);
|
dxstate.depthWrite.set(true);
|
||||||
dxstate.colorMask.set(0xF);
|
dxstate.colorMask.set(0xF);
|
||||||
|
|
|
@ -40,7 +40,6 @@ public:
|
||||||
void ExecuteOp(u32 op, u32 diff) override;
|
void ExecuteOp(u32 op, u32 diff) override;
|
||||||
|
|
||||||
void ReapplyGfxState() override;
|
void ReapplyGfxState() override;
|
||||||
void SetDisplayFramebuffer(u32 framebuf, u32 stride, GEBufferFormat format) override;
|
|
||||||
void GetStats(char *buffer, size_t bufsize) override;
|
void GetStats(char *buffer, size_t bufsize) override;
|
||||||
void ClearCacheNextFrame() override;
|
void ClearCacheNextFrame() override;
|
||||||
void DeviceLost() override; // Only happens on Android. Drop all textures and shaders.
|
void DeviceLost() override; // Only happens on Android. Drop all textures and shaders.
|
||||||
|
|
|
@ -36,7 +36,6 @@
|
||||||
#include "GPU/ge_constants.h"
|
#include "GPU/ge_constants.h"
|
||||||
#include "GPU/GeDisasm.h"
|
#include "GPU/GeDisasm.h"
|
||||||
#include "GPU/Common/FramebufferManagerCommon.h"
|
#include "GPU/Common/FramebufferManagerCommon.h"
|
||||||
#include "GPU/Debugger/Debugger.h"
|
|
||||||
#include "GPU/GLES/ShaderManagerGLES.h"
|
#include "GPU/GLES/ShaderManagerGLES.h"
|
||||||
#include "GPU/GLES/GPU_GLES.h"
|
#include "GPU/GLES/GPU_GLES.h"
|
||||||
#include "GPU/GLES/FramebufferManagerGLES.h"
|
#include "GPU/GLES/FramebufferManagerGLES.h"
|
||||||
|
@ -360,11 +359,6 @@ void GPU_GLES::BeginFrame() {
|
||||||
framebufferManagerGL_->BeginFrame();
|
framebufferManagerGL_->BeginFrame();
|
||||||
}
|
}
|
||||||
|
|
||||||
void GPU_GLES::SetDisplayFramebuffer(u32 framebuf, u32 stride, GEBufferFormat format) {
|
|
||||||
GPUDebug::NotifyDisplay(framebuf, stride, format);
|
|
||||||
framebufferManagerGL_->SetDisplayFramebuffer(framebuf, stride, format);
|
|
||||||
}
|
|
||||||
|
|
||||||
void GPU_GLES::CopyDisplayToOutput(bool reallyDirty) {
|
void GPU_GLES::CopyDisplayToOutput(bool reallyDirty) {
|
||||||
// Flush anything left over.
|
// Flush anything left over.
|
||||||
framebufferManagerGL_->RebindFramebuffer("RebindFramebuffer - CopyDisplayToOutput");
|
framebufferManagerGL_->RebindFramebuffer("RebindFramebuffer - CopyDisplayToOutput");
|
||||||
|
|
|
@ -47,7 +47,6 @@ public:
|
||||||
void ExecuteOp(u32 op, u32 diff) override;
|
void ExecuteOp(u32 op, u32 diff) override;
|
||||||
|
|
||||||
void ReapplyGfxState() override;
|
void ReapplyGfxState() override;
|
||||||
void SetDisplayFramebuffer(u32 framebuf, u32 stride, GEBufferFormat format) override;
|
|
||||||
void GetStats(char *buffer, size_t bufsize) override;
|
void GetStats(char *buffer, size_t bufsize) override;
|
||||||
|
|
||||||
void ClearCacheNextFrame() override;
|
void ClearCacheNextFrame() override;
|
||||||
|
|
|
@ -1109,7 +1109,8 @@ void GPUCommon::BeginFrame() {
|
||||||
} else if (dumpThisFrame_) {
|
} else if (dumpThisFrame_) {
|
||||||
dumpThisFrame_ = false;
|
dumpThisFrame_ = false;
|
||||||
}
|
}
|
||||||
GPURecord::NotifyFrame();
|
GPUDebug::NotifyBeginFrame();
|
||||||
|
GPURecord::NotifyBeginFrame();
|
||||||
}
|
}
|
||||||
|
|
||||||
void GPUCommon::SlowRunLoop(DisplayList &list)
|
void GPUCommon::SlowRunLoop(DisplayList &list)
|
||||||
|
@ -2707,7 +2708,8 @@ void GPUCommon::ResetListState(int listID, DisplayListState state) {
|
||||||
|
|
||||||
GPUDebugOp GPUCommon::DissassembleOp(u32 pc, u32 op) {
|
GPUDebugOp GPUCommon::DissassembleOp(u32 pc, u32 op) {
|
||||||
char buffer[1024];
|
char buffer[1024];
|
||||||
GeDisassembleOp(pc, op, Memory::Read_U32(pc - 4), buffer, sizeof(buffer));
|
u32 prev = Memory::IsValidAddress(pc - 4) ? Memory::ReadUnchecked_U32(pc - 4) : 0;
|
||||||
|
GeDisassembleOp(pc, op, prev, buffer, sizeof(buffer));
|
||||||
|
|
||||||
GPUDebugOp info;
|
GPUDebugOp info;
|
||||||
info.pc = pc;
|
info.pc = pc;
|
||||||
|
@ -2765,6 +2767,10 @@ void GPUCommon::SetCmdValue(u32 op) {
|
||||||
downcount = 0;
|
downcount = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GPUCommon::SetDisplayFramebuffer(u32 framebuf, u32 stride, GEBufferFormat format) {
|
||||||
|
framebufferManager_->SetDisplayFramebuffer(framebuf, stride, format);
|
||||||
|
}
|
||||||
|
|
||||||
void GPUCommon::DoBlockTransfer(u32 skipDrawReason) {
|
void GPUCommon::DoBlockTransfer(u32 skipDrawReason) {
|
||||||
// TODO: This is used a lot to copy data around between render targets and textures,
|
// TODO: This is used a lot to copy data around between render targets and textures,
|
||||||
// and also to quickly load textures from RAM to VRAM. So we should do checks like the following:
|
// and also to quickly load textures from RAM to VRAM. So we should do checks like the following:
|
||||||
|
|
|
@ -117,6 +117,7 @@ public:
|
||||||
u32 Break(int mode) override;
|
u32 Break(int mode) override;
|
||||||
void ReapplyGfxState() override;
|
void ReapplyGfxState() override;
|
||||||
|
|
||||||
|
void SetDisplayFramebuffer(u32 framebuf, u32 stride, GEBufferFormat format) override;
|
||||||
void CopyDisplayToOutput(bool reallyDirty) override = 0;
|
void CopyDisplayToOutput(bool reallyDirty) override = 0;
|
||||||
void InitClear() override = 0;
|
void InitClear() override = 0;
|
||||||
bool PerformMemoryCopy(u32 dest, u32 src, int size) override;
|
bool PerformMemoryCopy(u32 dest, u32 src, int size) override;
|
||||||
|
|
|
@ -37,7 +37,6 @@
|
||||||
#include "GPU/ge_constants.h"
|
#include "GPU/ge_constants.h"
|
||||||
#include "GPU/GeDisasm.h"
|
#include "GPU/GeDisasm.h"
|
||||||
#include "GPU/Common/FramebufferManagerCommon.h"
|
#include "GPU/Common/FramebufferManagerCommon.h"
|
||||||
#include "GPU/Debugger/Debugger.h"
|
|
||||||
#include "GPU/Vulkan/ShaderManagerVulkan.h"
|
#include "GPU/Vulkan/ShaderManagerVulkan.h"
|
||||||
#include "GPU/Vulkan/GPU_Vulkan.h"
|
#include "GPU/Vulkan/GPU_Vulkan.h"
|
||||||
#include "GPU/Vulkan/FramebufferManagerVulkan.h"
|
#include "GPU/Vulkan/FramebufferManagerVulkan.h"
|
||||||
|
@ -431,11 +430,6 @@ void GPU_Vulkan::InitClear() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void GPU_Vulkan::SetDisplayFramebuffer(u32 framebuf, u32 stride, GEBufferFormat format) {
|
|
||||||
GPUDebug::NotifyDisplay(framebuf, stride, format);
|
|
||||||
framebufferManager_->SetDisplayFramebuffer(framebuf, stride, format);
|
|
||||||
}
|
|
||||||
|
|
||||||
void GPU_Vulkan::CopyDisplayToOutput(bool reallyDirty) {
|
void GPU_Vulkan::CopyDisplayToOutput(bool reallyDirty) {
|
||||||
// Flush anything left over.
|
// Flush anything left over.
|
||||||
drawEngine_.Flush();
|
drawEngine_.Flush();
|
||||||
|
|
|
@ -50,7 +50,6 @@ public:
|
||||||
void PreExecuteOp(u32 op, u32 diff) override;
|
void PreExecuteOp(u32 op, u32 diff) override;
|
||||||
void ExecuteOp(u32 op, u32 diff) override;
|
void ExecuteOp(u32 op, u32 diff) override;
|
||||||
|
|
||||||
void SetDisplayFramebuffer(u32 framebuf, u32 stride, GEBufferFormat format) override;
|
|
||||||
void GetStats(char *buffer, size_t bufsize) override;
|
void GetStats(char *buffer, size_t bufsize) override;
|
||||||
void ClearCacheNextFrame() override;
|
void ClearCacheNextFrame() override;
|
||||||
void DeviceLost() override; // Only happens on Android. Drop all textures and shaders.
|
void DeviceLost() override; // Only happens on Android. Drop all textures and shaders.
|
||||||
|
|
|
@ -979,6 +979,10 @@ BOOL CGEDebugger::DlgProc(UINT message, WPARAM wParam, LPARAM lParam) {
|
||||||
SetBreakNext(BreakNext::FRAME);
|
SetBreakNext(BreakNext::FRAME);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case IDC_GEDBG_STEPVSYNC:
|
||||||
|
SetBreakNext(BreakNext::VSYNC);
|
||||||
|
break;
|
||||||
|
|
||||||
case IDC_GEDBG_STEPPRIM:
|
case IDC_GEDBG_STEPPRIM:
|
||||||
SetBreakNext(BreakNext::PRIM);
|
SetBreakNext(BreakNext::PRIM);
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -202,7 +202,7 @@ EXSTYLE WS_EX_ACCEPTFILES | WS_EX_TOOLWINDOW
|
||||||
CAPTION "GE"
|
CAPTION "GE"
|
||||||
FONT 8, "MS Shell Dlg", 0, 0, 0x1
|
FONT 8, "MS Shell Dlg", 0, 0, 0x1
|
||||||
BEGIN
|
BEGIN
|
||||||
PUSHBUTTON "Step &Frame",IDC_GEDBG_STEPFRAME,10,2,44,14
|
PUSHBUTTON "Step &Frame",IDC_GEDBG_STEPVSYNC,10,2,44,14
|
||||||
PUSHBUTTON "Step &Tex",IDC_GEDBG_STEPTEX,60,2,44,14
|
PUSHBUTTON "Step &Tex",IDC_GEDBG_STEPTEX,60,2,44,14
|
||||||
PUSHBUTTON "Step &Draw",IDC_GEDBG_STEPDRAW,105,2,44,14
|
PUSHBUTTON "Step &Draw",IDC_GEDBG_STEPDRAW,105,2,44,14
|
||||||
PUSHBUTTON "Step &Prim",IDC_GEDBG_STEPPRIM,150,2,44,14
|
PUSHBUTTON "Step &Prim",IDC_GEDBG_STEPPRIM,150,2,44,14
|
||||||
|
@ -679,7 +679,8 @@ BEGIN
|
||||||
MENUITEM "Next &Curve", IDC_GEDBG_STEPCURVE
|
MENUITEM "Next &Curve", IDC_GEDBG_STEPCURVE
|
||||||
MENUITEM "Next &Texture", IDC_GEDBG_STEPTEX
|
MENUITEM "Next &Texture", IDC_GEDBG_STEPTEX
|
||||||
MENUITEM "Next &Draw Flush", IDC_GEDBG_STEPDRAW
|
MENUITEM "Next &Draw Flush", IDC_GEDBG_STEPDRAW
|
||||||
MENUITEM "Next &Frame", IDC_GEDBG_STEPFRAME
|
MENUITEM "Next Display &Framebuf", IDC_GEDBG_STEPFRAME
|
||||||
|
MENUITEM "Next &Vsync Frame", IDC_GEDBG_STEPVSYNC
|
||||||
MENUITEM "", 0, MFT_SEPARATOR
|
MENUITEM "", 0, MFT_SEPARATOR
|
||||||
MENUITEM "&Auto Flush Pending", IDC_GEDBG_FLUSHAUTO
|
MENUITEM "&Auto Flush Pending", IDC_GEDBG_FLUSHAUTO
|
||||||
END
|
END
|
||||||
|
|
|
@ -331,6 +331,7 @@
|
||||||
#define ID_GEDBG_SHOWONLEFT 40219
|
#define ID_GEDBG_SHOWONLEFT 40219
|
||||||
#define ID_GEDBG_SHOWONRIGHT 40220
|
#define ID_GEDBG_SHOWONRIGHT 40220
|
||||||
#define ID_GEDBG_SHOWONTOPRIGHT 40221
|
#define ID_GEDBG_SHOWONTOPRIGHT 40221
|
||||||
|
#define IDC_GEDBG_STEPVSYNC 40222
|
||||||
|
|
||||||
|
|
||||||
// Dummy option to let the buffered rendering hotkey cycle through all the options.
|
// Dummy option to let the buffered rendering hotkey cycle through all the options.
|
||||||
|
@ -344,7 +345,7 @@
|
||||||
#ifdef APSTUDIO_INVOKED
|
#ifdef APSTUDIO_INVOKED
|
||||||
#ifndef APSTUDIO_READONLY_SYMBOLS
|
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||||
#define _APS_NEXT_RESOURCE_VALUE 256
|
#define _APS_NEXT_RESOURCE_VALUE 256
|
||||||
#define _APS_NEXT_COMMAND_VALUE 40222
|
#define _APS_NEXT_COMMAND_VALUE 40223
|
||||||
#define _APS_NEXT_CONTROL_VALUE 1202
|
#define _APS_NEXT_CONTROL_VALUE 1202
|
||||||
#define _APS_NEXT_SYMED_VALUE 101
|
#define _APS_NEXT_SYMED_VALUE 101
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue