D3D: Fix IA4 textures

git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@4147 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
hrydgard 2009-09-01 20:21:59 +00:00
parent b059e405f2
commit 28495eae47
1 changed files with 8 additions and 12 deletions

View File

@ -82,7 +82,7 @@ void TextureCache::Cleanup()
while(iter != textures.end()) while(iter != textures.end())
{ {
if (frameCount> TEXTURE_KILL_THRESHOLD + iter->second.frameCount) if (frameCount > TEXTURE_KILL_THRESHOLD + iter->second.frameCount)
{ {
if (!iter->second.isRenderTarget) if (!iter->second.isRenderTarget)
{ {
@ -105,23 +105,20 @@ void TextureCache::Cleanup()
TextureCache::TCacheEntry *TextureCache::Load(int stage, u32 address, int width, int height, int format, int tlutaddr, int tlutfmt) TextureCache::TCacheEntry *TextureCache::Load(int stage, u32 address, int width, int height, int format, int tlutaddr, int tlutfmt)
{ {
if (address == 0) return NULL;
if (address == 0)
return NULL;
TexCache::iterator iter = textures.find(address); TexCache::iterator iter = textures.find(address);
u8 *ptr = g_VideoInitialize.pGetMemoryPointer(address); u8 *ptr = g_VideoInitialize.pGetMemoryPointer(address);
int palSize = TexDecoder_GetPaletteSize(format); int palSize = TexDecoder_GetPaletteSize(format);
u32 palhash = 0xc0debabe; u32 palhash = 0xc0debabe;
if (palSize) if (palSize)
{ {
if (palSize>16) // TODO: Share this code with the GL plugin.
palSize = 16; //let's not do excessive amount of checking if (palSize > 32)
palSize = 32; // let's not do excessive amount of checking
u8 *pal = g_VideoInitialize.pGetMemoryPointer(tlutaddr); u8 *pal = g_VideoInitialize.pGetMemoryPointer(tlutaddr);
if (pal != 0) if (pal != 0)
{ {
for (int i=0; i<palSize; i++) for (int i = 0; i < palSize; i++)
{ {
palhash = _rotl(palhash,13); palhash = _rotl(palhash,13);
palhash ^= pal[i]; palhash ^= pal[i];
@ -135,7 +132,6 @@ TextureCache::TCacheEntry *TextureCache::Load(int stage, u32 address, int width,
int bs = TexDecoder_GetBlockWidthInTexels(format)-1; //TexelSizeInNibbles(format)*width*height/16; int bs = TexDecoder_GetBlockWidthInTexels(format)-1; //TexelSizeInNibbles(format)*width*height/16;
int expandedWidth = (width+bs) & (~bs); int expandedWidth = (width+bs) & (~bs);
u32 hash_value = TexDecoder_GetSafeTextureHash(ptr, expandedWidth, height, format, 0); u32 hash_value = TexDecoder_GetSafeTextureHash(ptr, expandedWidth, height, format, 0);
if (iter != textures.end()) if (iter != textures.end())
{ {
TCacheEntry &entry = iter->second; TCacheEntry &entry = iter->second;
@ -174,7 +170,7 @@ TextureCache::TCacheEntry *TextureCache::Load(int stage, u32 address, int width,
} }
} }
PC_TexFormat pcfmt = TexDecoder_Decode(temp,ptr,expandedWidth,height,format, tlutaddr, tlutfmt); PC_TexFormat pcfmt = TexDecoder_Decode(temp, ptr, expandedWidth, height, format, tlutaddr, tlutfmt);
D3DFORMAT d3d_fmt; D3DFORMAT d3d_fmt;
switch (pcfmt) { switch (pcfmt) {
case PC_TEX_FMT_BGRA32: case PC_TEX_FMT_BGRA32:
@ -184,7 +180,7 @@ TextureCache::TCacheEntry *TextureCache::Load(int stage, u32 address, int width,
d3d_fmt = D3DFMT_R5G6B5; d3d_fmt = D3DFMT_R5G6B5;
break; break;
case PC_TEX_FMT_IA4_AS_IA8: case PC_TEX_FMT_IA4_AS_IA8:
d3d_fmt = D3DFMT_A4L4; d3d_fmt = D3DFMT_A8L8; //D3DFMT_A4L4;
break; break;
case PC_TEX_FMT_I8: case PC_TEX_FMT_I8:
case PC_TEX_FMT_I4_AS_I8: case PC_TEX_FMT_I4_AS_I8: