Use flags to avoid hashing textures when unchanged.

If only parameters change (like wrapping or clut, etc.) we don't need to
rehash the data - we know it hasn't changed.

Should reduce the distance between lazy texture hashing on and off.
This commit is contained in:
Unknown W. Brackets 2014-04-13 14:02:00 -07:00
parent 1b30c5b212
commit 4c1c694d4b
12 changed files with 186 additions and 45 deletions

View file

@ -755,7 +755,9 @@ void FramebufferManager::DoSetRenderFrameBuffer() {
// None found? Create one.
if (!vfb) {
gstate_c.textureChanged = true;
if (gstate_c.textureChanged == TEXCHANGE_UNCHANGED) {
gstate_c.textureChanged = TEXCHANGE_PARAMSONLY;
}
vfb = new VirtualFramebuffer();
vfb->fbo = 0;
vfb->fb_address = fb_address;
@ -859,7 +861,9 @@ void FramebufferManager::DoSetRenderFrameBuffer() {
// Use it as a render target.
DEBUG_LOG(SCEGE, "Switching render target to FBO for %08x: %i x %i x %i ", vfb->fb_address, vfb->width, vfb->height, vfb->format);
vfb->usageFlags |= FB_USAGE_RENDERTARGET;
gstate_c.textureChanged = true;
if (gstate_c.textureChanged == TEXCHANGE_UNCHANGED) {
gstate_c.textureChanged = TEXCHANGE_PARAMSONLY;
}
vfb->last_frame_render = gpuStats.numFlips;
frameLastFramebufUsed = gpuStats.numFlips;
vfb->dirtyAfterDisplay = true;
@ -1191,7 +1195,9 @@ void FramebufferManager::ReadFramebufferToMemory(VirtualFramebuffer *vfb, bool s
glEnable(GL_DITHER);
} else {
nvfb->usageFlags |= FB_USAGE_RENDERTARGET;
gstate_c.textureChanged = true;
if (gstate_c.textureChanged == TEXCHANGE_UNCHANGED) {
gstate_c.textureChanged = TEXCHANGE_PARAMSONLY;
}
nvfb->last_frame_render = gpuStats.numFlips;
nvfb->dirtyAfterDisplay = true;