Decode EFB copies used as paletted textures.

A number of games make an EFB copy in I4/I8 format, then use it as a
texture in C4/C8 format.  Detect when this happens, and decode the copy on
the GPU using the specified palette.

This has a few advantages: it allows using EFB2Tex for a few more games,
it, it preserves the resolution of scaled EFB copies, and it's probably a
bit faster.

D3D only at the moment, but porting to OpenGL should be straightforward..
This commit is contained in:
magumagu
2015-01-26 15:33:23 -08:00
parent fbbbad98e9
commit c0a4760f0e
10 changed files with 352 additions and 81 deletions

View File

@ -209,6 +209,7 @@ void VertexManager::Flush()
if (bpmem.tevind[i].IsActive() && bpmem.tevind[i].bt < bpmem.genMode.numindstages)
usedtextures[bpmem.tevindref.getTexMap(bpmem.tevind[i].bt)] = true;
TextureCache::UnbindTextures();
for (unsigned int i : usedtextures)
{
g_renderer->SetSamplerState(i & 3, i >> 2);
@ -224,6 +225,7 @@ void VertexManager::Flush()
ERROR_LOG(VIDEO, "error loading texture");
}
}
TextureCache::BindTextures();
}
// set global vertex constants