From 75e1bfb975afff21a814f974cb7efb6219e42887 Mon Sep 17 00:00:00 2001 From: emu_kidid Date: Wed, 15 Nov 2017 23:46:20 +1030 Subject: [PATCH] - Fix memory issues when returning to menu by clearing some of the recompiler cache - Remove unnecessary menu2 makefiles --- Makefile.base | 2 +- Makefile.menu2 | 120 ------------------------------------- Makefile.menu2_gc | 9 --- Makefile.menu2_wii | 9 --- Rice_GX/TextureManager.cpp | 2 +- menu/MainFrame.cpp | 2 + menu/MiniMenuFrame.cpp | 2 + r4300/Recomp-Cache-Heap.c | 4 ++ r4300/Recomp-Cache.h | 2 + 9 files changed, 12 insertions(+), 140 deletions(-) delete mode 100644 Makefile.menu2 delete mode 100644 Makefile.menu2_gc delete mode 100644 Makefile.menu2_wii diff --git a/Makefile.base b/Makefile.base index a031003..a925bb5 100644 --- a/Makefile.base +++ b/Makefile.base @@ -4,7 +4,7 @@ CC = powerpc-eabi-gcc CXX = powerpc-eabi-g++ AS = powerpc-eabi-as -LTO = #-flto # Uncomment to use link-time optimization +LTO = -flto # Uncomment to use link-time optimization DEBUG_FLAGS += #-DPROFILE #-DSHOW_DEBUG #-DDEBUGON #-DPRINTGECKO #-DGLN64_SDLOG #-DSHOW_STATS #-DNO_BT FEATURES += #-DUSE_EXPANSION #-DUSE_TLB_CACHE #-DUSE_ROM_CACHE_L1 #-DEMBEDDED_FONTS diff --git a/Makefile.menu2 b/Makefile.menu2 deleted file mode 100644 index 86d5e5a..0000000 --- a/Makefile.menu2 +++ /dev/null @@ -1,120 +0,0 @@ -# Makefile for glN64 with menu2 - -CFLAGS += -DGLN64_GX - -OBJ_GLN64_GX += \ - glN64_GX/glN64.o \ - glN64_GX/Config_linux.o \ - glN64_GX/OpenGL.o \ - glN64_GX/N64.o \ - glN64_GX/RSP.o \ - glN64_GX/VI.o \ - glN64_GX/Textures.o \ - glN64_GX/FrameBuffer.o \ - glN64_GX/Combiner.o \ - glN64_GX/gDP.o \ - glN64_GX/gSP.o \ - glN64_GX/GBI.o \ - glN64_GX/DepthBuffer.o \ - glN64_GX/CRC.o \ - glN64_GX/2xSAI.o \ - glN64_GX/TEV_combiner.o \ - glN64_GX/RDP.o \ - glN64_GX/F3D.o \ - glN64_GX/F3DEX.o \ - glN64_GX/F3DEX2.o \ - glN64_GX/L3D.o \ - glN64_GX/L3DEX.o \ - glN64_GX/L3DEX2.o \ - glN64_GX/S2DEX.o \ - glN64_GX/S2DEX2.o \ - glN64_GX/F3DPD.o \ - glN64_GX/F3DDKR.o \ - glN64_GX/F3DWRUS.o - -ALL_OBJ += $(OBJ_GLN64_GX) - -glN64_GX/glN64.o: glN64_GX/glN64.cpp - $(CXX) $(CFLAGS) -DMAINDEF -D__LINUX__ -D__GX__ -c -o $@ $< - -glN64_GX/Config_linux.o: glN64_GX/Config_linux.cpp - $(CXX) $(CFLAGS) $(GTK_FLAGS) -D__LINUX__ -D__GX__ -c -o $@ $< - -glN64_GX/OpenGL.o: glN64_GX/OpenGL.cpp - $(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $< - -glN64_GX/N64.o: glN64_GX/N64.cpp - $(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $< - -glN64_GX/RSP.o: glN64_GX/RSP.cpp - $(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $< - -glN64_GX/VI.o: glN64_GX/VI.cpp - $(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $< - -glN64_GX/Textures.o: glN64_GX/Textures.cpp - $(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $< - -glN64_GX/FrameBuffer.o: glN64_GX/FrameBuffer.cpp - $(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $< - -glN64_GX/Combiner.o: glN64_GX/Combiner.cpp - $(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $< - -glN64_GX/gDP.o: glN64_GX/gDP.cpp - $(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $< - -glN64_GX/gSP.o: glN64_GX/gSP.cpp - $(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $< - -glN64_GX/GBI.o: glN64_GX/GBI.cpp - $(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $< - -glN64_GX/DepthBuffer.o: glN64_GX/DepthBuffer.cpp - $(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $< - -glN64_GX/CRC.o: glN64_GX/CRC.cpp - $(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $< - -glN64_GX/2xSAI.o: glN64_GX/2xSAI.cpp - $(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $< - -glN64_GX/TEV_combiner.o: glN64_GX/TEV_combiner.cpp - $(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $< - -glN64_GX/RDP.o: glN64_GX/RDP.cpp - $(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $< - -glN64_GX/F3D.o: glN64_GX/F3D.cpp - $(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $< - -glN64_GX/F3DEX.o: glN64_GX/F3DEX.cpp - $(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $< - -glN64_GX/F3DEX2.o: glN64_GX/F3DEX2.cpp - $(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $< - -glN64_GX/L3D.o: glN64_GX/L3D.cpp - $(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $< - -glN64_GX/L3DEX.o: glN64_GX/L3DEX.cpp - $(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $< - -glN64_GX/L3DEX2.o: glN64_GX/L3DEX2.cpp - $(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $< - -glN64_GX/S2DEX.o: glN64_GX/S2DEX.cpp - $(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $< - -glN64_GX/S2DEX2.o: glN64_GX/S2DEX2.cpp - $(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $< - -glN64_GX/F3DPD.o: glN64_GX/F3DPD.cpp - $(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $< - -glN64_GX/F3DDKR.o: glN64_GX/F3DDKR.cpp - $(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $< - -glN64_GX/F3DWRUS.o: glN64_GX/F3DWRUS.cpp - $(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $< - diff --git a/Makefile.menu2_gc b/Makefile.menu2_gc deleted file mode 100644 index e8cd474..0000000 --- a/Makefile.menu2_gc +++ /dev/null @@ -1,9 +0,0 @@ -# Makefile MUPEN64 for glN64 + MenuV2 + GC - -ELF = cube64-glN64.elf -DOL = cube64-glN64.dol - -include Makefile.menu2 -include Makefile.gc -include Makefile.base - diff --git a/Makefile.menu2_wii b/Makefile.menu2_wii deleted file mode 100644 index 2aaf20e..0000000 --- a/Makefile.menu2_wii +++ /dev/null @@ -1,9 +0,0 @@ -# Makefile MUPEN64 for glN64 + MenuV2 + Wii - -ELF = wii64-glN64.elf -DOL = wii64-glN64.dol - -include Makefile.menu2 -include Makefile.wii -include Makefile.base - diff --git a/Rice_GX/TextureManager.cpp b/Rice_GX/TextureManager.cpp index 0c5e0c7..0231581 100644 --- a/Rice_GX/TextureManager.cpp +++ b/Rice_GX/TextureManager.cpp @@ -38,7 +38,7 @@ CTextureManager gTextureManager; #ifdef __GX__ //Note: Rice's tex mem usage isn't calculated correctly because it assumes 32bit textures. //TODO: Revisit cache handling once Enhanced & Framebuffer textures are implemented. -DWORD g_maxTextureMemUsage = 2*GX_TEXTURE_CACHE_SIZE; +DWORD g_maxTextureMemUsage = GX_TEXTURE_CACHE_SIZE; DWORD g_amountToFree = (512*1024); bool g_bUseSetTextureMem = true; #else //__GX__ diff --git a/menu/MainFrame.cpp b/menu/MainFrame.cpp index 3c78c18..4ea38b4 100644 --- a/menu/MainFrame.cpp +++ b/menu/MainFrame.cpp @@ -43,6 +43,7 @@ extern "C" { #include "../fileBrowser/fileBrowser-libfat.h" #include "../fileBrowser/fileBrowser-CARD.h" #include "../main/guifuncs.h" +#include "../r4300/Recomp-Cache.h" } void Func_LoadROM(); @@ -256,6 +257,7 @@ void Func_PlayGame() new_frame(); new_vi(); go(); + RecompCache_Release(4*1024*1024); #ifdef DEBUGON _break(); #endif diff --git a/menu/MiniMenuFrame.cpp b/menu/MiniMenuFrame.cpp index 2f7821e..f81e12b 100644 --- a/menu/MiniMenuFrame.cpp +++ b/menu/MiniMenuFrame.cpp @@ -44,6 +44,7 @@ extern "C" { #include "../fileBrowser/fileBrowser.h" #include "../fileBrowser/fileBrowser-libfat.h" #include "../fileBrowser/fileBrowser-CARD.h" +#include "../r4300/Recomp-Cache.h" } void Func_MMResetROM(); @@ -511,6 +512,7 @@ void Func_MMPlayGame() _break(); #endif go(); + RecompCache_Release(4*1024*1024); #ifdef DEBUGON _break(); #endif diff --git a/r4300/Recomp-Cache-Heap.c b/r4300/Recomp-Cache-Heap.c index 883d53b..739578f 100644 --- a/r4300/Recomp-Cache-Heap.c +++ b/r4300/Recomp-Cache-Heap.c @@ -215,6 +215,10 @@ static void release(int minNeeded){ } } +void RecompCache_Release(int bytesRequired) { + release(bytesRequired); +} + void RecompCache_Alloc(unsigned int size, unsigned int address, PowerPC_func* func){ CacheMetaNode* newBlock = malloc( sizeof(CacheMetaNode) ); newBlock->addr = address; diff --git a/r4300/Recomp-Cache.h b/r4300/Recomp-Cache.h index 21bc1e7..3040ee5 100644 --- a/r4300/Recomp-Cache.h +++ b/r4300/Recomp-Cache.h @@ -33,6 +33,7 @@ #else #define RECOMP_CACHE_SIZE (7*1024*1024) #endif +#include "ppc/Recompile.h" void RecompCache_Init(void); // Allocate and free memory to be used for recompiled code @@ -41,6 +42,7 @@ void RecompCache_Init(void); void RecompCache_Alloc(unsigned int size, unsigned int address, PowerPC_func* func); void RecompCache_Realloc(PowerPC_func* func, unsigned int new_size); void RecompCache_Free(unsigned int addr); +void RecompCache_Release(int bytesRequired); // Update the LRU info of the indicated block // (call when the block is accessed) void RecompCache_Update(PowerPC_func* func);