fix bug in new texcache which caused performance disaster

This commit is contained in:
zeromus 2009-11-01 18:53:27 +00:00
parent 50f1d99435
commit 23e7264061
2 changed files with 34 additions and 19 deletions

View File

@ -5,16 +5,24 @@ This totally changes the timing, and totally breaks old savestates.
Highlights:
* win32: lua engine, path configuration, 7z dearchiving support
* rewritten main emulation loop
* rewritten main emulation loop and improve general cpu timing
* synchronous SPU mode to fix streaming sounds
General/Core:
bug: rewrite main emulation loop, fixes a lot of timings
bug: add more detailed timing emulation, removes much bogus lag
bug: rewrite DMA and gxfifo to fix a bunch of bugs
bug: fix cflash directory support for non-windows
bug: fix freeze in cart irq
bug: correctly emulate dma to/from tcm
bug: fix in thumb LSR carryflag
enh: add guitar grip emulation
bug: fix adpcm looping, remove adpcm caching (no longer necessary)
bug: fixes to swi 3,4,5, and arm7#8
bug: fixes to exmemstat and ipc sync registers
enh: gbaslot: add guitar grip, gbagame flash support, expansion memory pak
enh: add more powerful antigrain-based drawing library and rewrite OSD system
enh: ideas-style debugging prints
enh: most optimizations now SSE instead of SSE2
Graphics:
bug: fixing of obj blending, bmp obj rendering, and some obj window cases
@ -26,21 +34,33 @@ Graphics:
bug: fix simultaneous vram display and capture via same bank
bug: fix 3d overflow acknowledge registers
bug: change 3d cores to use 18bit color
bug: fix boxtest, move clipper to main graphics engine
bug: fix failure in some cases of polygon clipping
bug: fix disp3cnt emulations
bug: swrast: fix backface culling of nonconvex polys
bug: swrast: add clear image and scroll emulation
bug: swrast: add fog emulation
bug: swrast: fixes to shadow rendering
bug: swrast: preliminary edge marking, works decent
enh: swrast: multicore optimization for a few fps speedup
Windows:
bug: improve map view tool to support more modes
bug: fix support for multiple gamepads and gamepad hotkeys
bug: fix mic noise code and load wav instead of raw; effective in more cases
enh: improve map view tool to support more modes
enh: added 2x resizing filters (hq2x, hq2xs, lq2x, lq2xs, 2xsai, supereagle)
(scanlines, nearest, bilinear)
enh: soundview can now mute channels
enh: multicore optimization for filters, rotation, OSD
enh: new ioregview
enh: common commandline system, many arguments shared with linux
enh: setup x64 build type
enh: choose any gap size by dragging bottom window edge (must be enabled)
Linux:
enh: alsa microphone support
enh: hud and osd notification for gtk and cli frontends
enh: add support for the SSE optimizations
0.9.2 -> 0.9.4 (r1844->r2352->r2437)

View File

@ -630,6 +630,14 @@ public:
return newitem;
} //scan()
void invalidate()
{
for(TexCacheItem* curr = list_front;curr;curr=curr->next)
{
curr->suspectedInvalid = true;
}
}
void evict(const u32 target = kMaxCacheSize) {
//evicts old cache items until it is less than the max cache size
//this means we actually can exceed the cache by the size of the next item.
@ -666,21 +674,8 @@ void TexCache_Reset()
void TexCache_Invalidate()
{
////well, this is a very blunt instrument.
////lets just flag all the textures as invalid.
//for(int i=0;i<MAX_TEXTURE+1;i++) {
// texcache[i].suspectedInvalid = true;
// //invalidate all 4x4 textures when texture palettes change mappings
// //this is necessary because we arent tracking 4x4 texture palettes to look for changes.
// //Although I concede this is a bit paranoid.. I think the odds of anyone changing 4x4 palette data
// //without also changing the texture data is pretty much zero.
// //
// //TODO - move this to a separate signal: split into TexReconfigureSignal and TexPaletteReconfigureSignal
// if(texcache[i].mode == TEXMODE_4X4)
// texcache[i].frm = 0;
//}
texCache.evict(0);
//note that this gets called whether texdata or texpalette gets reconfigured.
texCache.invalidate();
}
TexCacheItem* TexCache_SetTexture(TexCache_TexFormat TEXFORMAT, u32 format, u32 texpal)