mirror of
https://github.com/hrydgard/ppsspp.git
synced 2026-10-25 03:09:13 +01:00
Merge pull request #18570 from hrydgard/more-debugger-crashes
Assorted GE debugger crash fixes
This commit is contained in:
5 files changed
+32
-13
No files matched your search
@@ -275,6 +275,9 @@ namespace SaveState
|
||||
if (g_Config.iRewindSnapshotInterval <= 0) {
|
||||
return;
|
||||
}
|
||||
if (coreState != CORE_RUNNING) {
|
||||
return;
|
||||
}
|
||||
|
||||
// For fast-forwarding, otherwise they may be useless and too close.
|
||||
double now = time_now_d();
|
||||
|
||||
@@ -248,7 +248,9 @@ void GPU_GLES::BeginHostFrame() {
|
||||
textureCache_->StartFrame();
|
||||
|
||||
// Save the cache from time to time. TODO: How often? We save on exit, so shouldn't need to do this all that often.
|
||||
if (shaderCachePath_.Valid() && (gpuStats.numFlips & 4095) == 0) {
|
||||
|
||||
const int saveShaderCacheFrameInterval = 32767; // power of 2 - 1. About every 10 minutes at 60fps.
|
||||
if (shaderCachePath_.Valid() && !(gpuStats.numFlips & saveShaderCacheFrameInterval) && coreState == CORE_RUNNING) {
|
||||
shaderManagerGL_->SaveCache(shaderCachePath_, &drawEngine_);
|
||||
}
|
||||
shaderManagerGL_->DirtyLastShader();
|
||||
|
||||
@@ -279,6 +279,10 @@ void CtrlDisplayListView::PromptBreakpointCond() {
|
||||
|
||||
void CtrlDisplayListView::onMouseDown(WPARAM wParam, LPARAM lParam, int button)
|
||||
{
|
||||
if (!validDisplayList || !gpuDebug) {
|
||||
return;
|
||||
}
|
||||
|
||||
int y = HIWORD(lParam);
|
||||
|
||||
int line = y/rowHeight;
|
||||
@@ -306,17 +310,15 @@ void CtrlDisplayListView::onMouseDown(WPARAM wParam, LPARAM lParam, int button)
|
||||
|
||||
void CtrlDisplayListView::onMouseUp(WPARAM wParam, LPARAM lParam, int button)
|
||||
{
|
||||
if (!validDisplayList || !gpuDebug) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (button == 2)
|
||||
{
|
||||
HMENU menu = GetContextMenu(ContextMenuID::DISPLAYLISTVIEW);
|
||||
EnableMenuItem(menu, ID_GEDBG_SETCOND, GPUBreakpoints::IsAddressBreakpoint(curAddress) ? MF_ENABLED : MF_GRAYED);
|
||||
|
||||
// We don't want to let the users play with deallocated or uninitialized debugging objects
|
||||
GlobalUIState state = GetUIState();
|
||||
if (state != UISTATE_INGAME && state != UISTATE_PAUSEMENU) {
|
||||
return;
|
||||
}
|
||||
|
||||
switch (TriggerContextMenu(ContextMenuID::DISPLAYLISTVIEW, wnd, ContextPoint::FromEvent(lParam)))
|
||||
{
|
||||
case ID_DISASM_GOTOINMEMORYVIEW:
|
||||
|
||||
@@ -56,6 +56,10 @@ public:
|
||||
list = displayList;
|
||||
gotoAddr(list.pc);
|
||||
}
|
||||
void clearDisplayList()
|
||||
{
|
||||
validDisplayList = false;
|
||||
}
|
||||
|
||||
void scrollWindow(int lines)
|
||||
{
|
||||
|
||||
@@ -87,6 +87,8 @@ static void UpdateDisplayListTab(GEDebuggerTab *tab, TabControl *tabs, GETabPosi
|
||||
DisplayList list;
|
||||
if (gpuDebug != nullptr && gpuDebug->GetCurrentDisplayList(list)) {
|
||||
view->setDisplayList(list);
|
||||
} else {
|
||||
view->clearDisplayList();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -291,13 +293,16 @@ void CGEDebugger::SetupPreviews() {
|
||||
EnableMenuItem(subMenu, ID_GEDBG_TRACK_PIXEL_STOP, primaryTrackX_ == 0xFFFFFFFF ? MF_GRAYED : MF_ENABLED);
|
||||
break;
|
||||
case ID_GEDBG_EXPORT_IMAGE:
|
||||
PreviewExport(primaryBuffer_);
|
||||
if (primaryBuffer_)
|
||||
PreviewExport(primaryBuffer_);
|
||||
break;
|
||||
case ID_GEDBG_COPY_IMAGE:
|
||||
PreviewToClipboard(primaryBuffer_, false);
|
||||
if (primaryBuffer_)
|
||||
PreviewToClipboard(primaryBuffer_, false);
|
||||
break;
|
||||
case ID_GEDBG_COPY_IMAGE_ALPHA:
|
||||
PreviewToClipboard(primaryBuffer_, true);
|
||||
if (primaryBuffer_)
|
||||
PreviewToClipboard(primaryBuffer_, true);
|
||||
break;
|
||||
case ID_GEDBG_TRACK_PIXEL:
|
||||
primaryTrackX_ = x;
|
||||
@@ -336,13 +341,16 @@ void CGEDebugger::SetupPreviews() {
|
||||
EnableMenuItem(subMenu, ID_GEDBG_TRACK_PIXEL_STOP, secondTrackX_ == 0xFFFFFFFF ? MF_GRAYED : MF_ENABLED);
|
||||
break;
|
||||
case ID_GEDBG_EXPORT_IMAGE:
|
||||
PreviewExport(secondBuffer_);
|
||||
if (secondBuffer_)
|
||||
PreviewExport(secondBuffer_);
|
||||
break;
|
||||
case ID_GEDBG_COPY_IMAGE:
|
||||
PreviewToClipboard(secondBuffer_, false);
|
||||
if (secondBuffer_)
|
||||
PreviewToClipboard(secondBuffer_, false);
|
||||
break;
|
||||
case ID_GEDBG_COPY_IMAGE_ALPHA:
|
||||
PreviewToClipboard(secondBuffer_, true);
|
||||
if (secondBuffer_)
|
||||
PreviewToClipboard(secondBuffer_, true);
|
||||
break;
|
||||
case ID_GEDBG_TRACK_PIXEL:
|
||||
secondTrackX_ = x;
|
||||
|
||||
Reference in new issue
Block a user