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:
parent
b059e405f2
commit
28495eae47
|
@ -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:
|
||||||
|
|
Loading…
Reference in New Issue