Added invalid characters substitution from Wii64.

Fixed primitive depth source.
This commit is contained in:
Extrems 2020-05-24 13:15:01 -04:00
parent 1c519b2c0f
commit f2bd1b0084
8 changed files with 25 additions and 71 deletions

View file

@ -794,9 +794,9 @@ void OGL_UpdateStates()
glDisable( GL_POLYGON_STIPPLE );*/
if (gDP.otherMode.depthSource == G_ZS_PRIM)
GX_SetZTexture(GX_ZT_REPLACE,GX_TF_Z16,0);
GX_SetZTexture(GX_ZT_REPLACE,GX_TF_Z24X8,gDP.primDepth.z*GX_MAX_Z24);
else
GX_SetZTexture(GX_ZT_DISABLE,GX_TF_Z16,0);
GX_SetZTexture(GX_ZT_DISABLE,GX_TF_Z8,0);
}
#endif // __GX__
@ -1950,9 +1950,8 @@ void OGL_GXinitDlist()
OGL.enable2xSaI = glN64_use2xSaiTextures;
OGL.forceBilinear = glN64_use2xSaiTextures;
// init primeDepthZtex, Ztexture, AlphaCompare, and Texture Clamping
TextureCache_UpdatePrimDepthZtex( 1.0f );
GX_SetZTexture(GX_ZT_DISABLE,GX_TF_Z16,0); //GX_ZT_DISABLE or GX_ZT_REPLACE; set in gDP.cpp
// init Ztexture, AlphaCompare, and Texture Clamping
GX_SetZTexture(GX_ZT_DISABLE,GX_TF_Z8,0);
OGL.GXuseAlphaCompare = false;
GX_SetZCompLoc(GX_TRUE); // Do Z-compare before texturing.
OGL.GXrenderTexRect = false;
@ -2027,7 +2026,7 @@ void OGL_GXclearEFB()
GX_SetTevOp (GX_TEVSTAGE0, GX_PASSCLR);
GX_SetTevOrder (GX_TEVSTAGE0, GX_TEXMAP_NULL, GX_TEXMAP_NULL, GX_COLOR0A0);
GX_SetBlendMode(GX_BM_NONE, GX_BL_ONE, GX_BL_ZERO, GX_LO_CLEAR);
GX_SetZTexture(GX_ZT_DISABLE,GX_TF_Z16,0); //GX_ZT_DISABLE or GX_ZT_REPLACE; set in gDP.cpp
GX_SetZTexture(GX_ZT_DISABLE,GX_TF_Z8,0);
GX_SetZCompLoc(GX_TRUE); // Do Z-compare before texturing.
GX_SetAlphaCompare(GX_ALWAYS,0,GX_AOP_AND,GX_ALWAYS,0);
GX_SetFog(GX_FOG_NONE,0.1,1.0,0.0,1.0,(GXColor){0,0,0,255});

View file

@ -168,6 +168,7 @@ void Init_TEV_combine() //Called at Combiner Init
//Load dummy tex for first 2 textures. Maybe should for 2 more for Noise/FB textures.
TextureCache_ActivateDummy( 0 );
TextureCache_ActivateDummy( 1 );
TextureCache_ActivateDummy( 2 );
/*
if ((OGL.ARB_texture_env_crossbar) || (OGL.NV_texture_env_combine4) || (OGL.ATIX_texture_env_route))

View file

@ -470,33 +470,15 @@ void TextureCache_Init()
// cache.dummy->GXtexture = (u16*) memalign(32,cache.dummy->textureBytes);
cache.dummy->GXtexture = (u16*) __lwp_heap_allocate(GXtexCache,cache.dummy->textureBytes);
cache.dummy->GXtexfmt = GX_TF_RGBA8;
for (int i = 0; i<16; i+=4)
{
((u32*)cache.dummy->GXtexture)[i ] = (u32) 0x0000FFFF; //alternate white/black pixels
((u32*)cache.dummy->GXtexture)[i+1] = (u32) 0x0000FFFF;
((u32*)cache.dummy->GXtexture)[i+2] = (u32) 0xFFFF0000;
((u32*)cache.dummy->GXtexture)[i+3] = (u32) 0xFFFF0000;
}
DCZeroRange(cache.dummy->GXtexture, cache.dummy->textureBytes);
DCFlushRange(cache.dummy->GXtexture, cache.dummy->textureBytes);
//Init GXprimDepthZ textures
cache.GXprimDepthZ[0] = (CachedTexture*)malloc( sizeof( CachedTexture ) );
cache.GXprimDepthZ[1] = (CachedTexture*)malloc( sizeof( CachedTexture ) );
cache.GXprimDepthZ[0]->textureBytes = 32;
cache.GXprimDepthZ[1]->textureBytes = 32;
cache.GXprimDepthZ[0]->GXtexture = (u16*)memalign(32,cache.GXprimDepthZ[0]->textureBytes);
cache.GXprimDepthZ[1]->GXtexture = (u16*)memalign(32,cache.GXprimDepthZ[1]->textureBytes);
memset( cache.GXprimDepthZ[0]->GXtexture, 0x00, cache.GXprimDepthZ[0]->textureBytes);
memset( cache.GXprimDepthZ[1]->GXtexture, 0x00, cache.GXprimDepthZ[1]->textureBytes);
cache.cachedBytes += cache.GXprimDepthZ[0]->textureBytes;
cache.cachedBytes += cache.GXprimDepthZ[1]->textureBytes;
#endif // __GX__
cache.cachedBytes = cache.dummy->textureBytes;
TextureCache_ActivateDummy( 0 );
TextureCache_ActivateDummy( 1 );
TextureCache_ActivateDummy( 2 );
}
BOOL TextureCache_Verify()
@ -675,16 +657,6 @@ void TextureCache_Destroy()
// glDeleteTextures( 1, &cache.glDummyName );
#else // !__GX__
//For now we're not using Noise textures.
//De-Init GXprimDepthZ textures
cache.cachedBytes -= cache.GXprimDepthZ[0]->textureBytes;
cache.cachedBytes -= cache.GXprimDepthZ[1]->textureBytes;
if( cache.GXprimDepthZ[0]->GXtexture != NULL )
free(cache.GXprimDepthZ[0]->GXtexture);
if( cache.GXprimDepthZ[1]->GXtexture != NULL )
free(cache.GXprimDepthZ[1]->GXtexture);
free( cache.GXprimDepthZ[0] );
free( cache.GXprimDepthZ[1] );
#endif // __GX__
cache.top = NULL;
@ -1923,26 +1895,4 @@ void TextureCache_FreeNextTexture()
FrameBuffer_RemoveBottom();
}
}
void TextureCache_UpdatePrimDepthZtex( f32 z )
{
//This function sets a Ztex to gDP.primDepth.z which is in the range [0,1]
//Called from gDPSetPrimDepth()
// Let GX finish with all previous commands before loading the new tex
// TODO: Work around this with tokens.
GX_DrawDone();
u16 primDepthval = GXcastf32u16(z);
for (int i = 0; i < 16; i++)
cache.GXprimDepthZ[0]->GXtexture[i] = primDepthval;
if(cache.GXprimDepthZ[0]->GXtexture != NULL)
{
DCFlushRange(cache.GXprimDepthZ[0]->GXtexture, cache.GXprimDepthZ[0]->textureBytes);
GX_InitTexObj(&cache.GXprimDepthZ[0]->GXtex, cache.GXprimDepthZ[0]->GXtexture, (u16) 4, (u16) 4, GX_TF_Z16,
GX_CLAMP, GX_CLAMP, GX_FALSE);
GX_LoadTexObj(&cache.GXprimDepthZ[0]->GXtex, GX_TEXMAP2);
}
cache.GXprimDepthCnt++;
}
#endif // __GX__

View file

@ -78,7 +78,6 @@ struct TextureCache
u32 enable2xSaI, bitDepth;
#ifdef __GX__
int VIcount;
CachedTexture *(GXprimDepthZ[2]);
u32 GXprimDepthCnt,GXZTexPrimCnt,GXnoZTexPrimCnt;
#endif // __GX__
};
@ -130,7 +129,6 @@ void TextureCache_ActivateDummy( u32 t );
BOOL TextureCache_Verify();
#ifdef __GX__
void TextureCache_FreeNextTexture();
void TextureCache_UpdatePrimDepthZtex( f32 z );
#endif // __GX__
#endif

View file

@ -285,7 +285,7 @@ void VI_GX_showLoadIcon()
GX_SetAlphaUpdate(GX_ENABLE);
GX_SetDstAlpha(GX_DISABLE, 0xFF);
GX_SetZMode(GX_DISABLE,GX_ALWAYS,GX_FALSE);
GX_SetZTexture(GX_ZT_DISABLE,GX_TF_Z16,0); //GX_ZT_DISABLE or GX_ZT_REPLACE; set in gDP.cpp
GX_SetZTexture(GX_ZT_DISABLE,GX_TF_Z8,0);
GX_SetZCompLoc(GX_TRUE); // Do Z-compare before texturing.
//set cull mode
GX_SetCullMode (GX_CULL_NONE);
@ -351,7 +351,7 @@ void VI_GX_showLoadIcon()
GX_SetAlphaUpdate(GX_ENABLE);
GX_SetDstAlpha(GX_DISABLE, 0xFF);
GX_SetZMode(GX_DISABLE,GX_ALWAYS,GX_FALSE);
GX_SetZTexture(GX_ZT_DISABLE,GX_TF_Z16,0); //GX_ZT_DISABLE or GX_ZT_REPLACE; set in gDP.cpp
GX_SetZTexture(GX_ZT_DISABLE,GX_TF_Z8,0);
GX_SetZCompLoc(GX_TRUE); // Do Z-compare before texturing.
//set cull mode
GX_SetCullMode (GX_CULL_NONE);

View file

@ -82,15 +82,16 @@ void gDPSetOtherMode( u32 mode0, u32 mode1 )
void gDPSetPrimDepth( u16 z, u16 dz )
{
gDP.primDepth.z = min( 1.0f, max( 0.0f, (_FIXED2FLOAT( z, 15 ) - gSP.viewport.vtrans[2]) / gSP.viewport.vscale[2] ) );
gDP.primDepth.deltaZ = dz;
gDP.primDepth.z = _FIXED2FLOAT( _SHIFTR( z, 0, 15 ), 15 );
gDP.primDepth.deltaZ = _FIXED2FLOAT( _SHIFTR( dz, 0, 15 ), 15 );
#ifdef __GX__
gDP.changed |= CHANGED_RENDERMODE;
#ifdef SHOW_DEBUG
sprintf(txtbuffer,"gDP: Setting PrimDepth to %f", gDP.primDepth.z);
DEBUG_print(txtbuffer,DBG_RSPINFO1);
#endif
TextureCache_UpdatePrimDepthZtex(gDP.primDepth.z);
#endif //__GX__
#ifdef DEBUG
@ -230,11 +231,6 @@ void gDPSetDepthSource( u32 source )
#ifdef __GX__
gDP.changed |= CHANGED_RENDERMODE;
/* if (gDP.otherMode.depthSource == G_ZS_PRIM)
GX_SetZTexture(GX_ZT_REPLACE,GX_TF_Z16,0);
else
GX_SetZTexture(GX_ZT_DISABLE,GX_TF_Z16,0);*/
#endif // __GX__
#ifdef DEBUG

View file

@ -220,7 +220,7 @@ void Graphics::init()
void Graphics::drawInit()
{
// Reset various parameters from gfx plugin
GX_SetZTexture(GX_ZT_DISABLE,GX_TF_Z16,0); //GX_ZT_DISABLE or GX_ZT_REPLACE; set in gDP.cpp
GX_SetZTexture(GX_ZT_DISABLE,GX_TF_Z8,0);
GX_SetZCompLoc(GX_TRUE); // Do Z-compare before texturing.
GX_SetFog(GX_FOG_NONE,0,1,0,1,(GXColor){0,0,0,255});
GX_SetViewport(0,0,vmode->fbWidth,vmode->efbHeight,0,1);

View file

@ -75,6 +75,14 @@ void byte_swap(char* buffer, unsigned int length)
}
}
void stripInvalidChars(char* str)
{
char* p;
while ((p = strpbrk(str, "\\/:*?\"<>|")) != NULL)
*p = '_';
}
static struct {
int Cartridge_ID;
char* Country_codes;
@ -150,6 +158,8 @@ int rom_read(fileBrowser_file* file){
break;
}
}
// Replace any non file system compliant chars with underscores
stripInvalidChars(&ROM_SETTINGS.goodname[0]);
// Fix save type for certain special sized (16kbit) eeprom games
ROM_SETTINGS.isEEPROM16k = isEEPROM16k();