Skip to content

Commit

Permalink
Split out texture level
Browse files Browse the repository at this point in the history
  • Loading branch information
raven02 committed Apr 18, 2014
1 parent 86fdf88 commit abc5c86
Show file tree
Hide file tree
Showing 6 changed files with 26 additions and 20 deletions.
24 changes: 14 additions & 10 deletions GPU/GLES/GLES_GPU.cpp
Expand Up @@ -93,7 +93,7 @@ static const CommandTableEntry commandTable[] = {
{GE_CMD_TEXSIZE6, FLAG_FLUSHBEFOREONCHANGE | FLAG_EXECUTEONCHANGE, &GLES_GPU::Execute_TexSizeN},
{GE_CMD_TEXSIZE7, FLAG_FLUSHBEFOREONCHANGE | FLAG_EXECUTEONCHANGE, &GLES_GPU::Execute_TexSizeN},
{GE_CMD_TEXFORMAT, FLAG_FLUSHBEFOREONCHANGE | FLAG_EXECUTEONCHANGE, &GLES_GPU::Execute_TexFormat},
{GE_CMD_TEXLEVEL, FLAG_EXECUTEONCHANGE},
{GE_CMD_TEXLEVEL, FLAG_EXECUTEONCHANGE, &GLES_GPU::Execute_TexLevel},
{GE_CMD_TEXADDR0, FLAG_FLUSHBEFOREONCHANGE | FLAG_EXECUTEONCHANGE, &GLES_GPU::Execute_TexAddr0},
{GE_CMD_TEXADDR1, FLAG_FLUSHBEFOREONCHANGE | FLAG_EXECUTEONCHANGE, &GLES_GPU::Execute_TexAddrN},
{GE_CMD_TEXADDR2, FLAG_FLUSHBEFOREONCHANGE | FLAG_EXECUTEONCHANGE, &GLES_GPU::Execute_TexAddrN},
Expand Down Expand Up @@ -1264,6 +1264,18 @@ void GLES_GPU::Execute_BlockTransferStart(u32 op, u32 diff) {
gstate_c.textureChanged = TEXCHANGE_UPDATED;
}

void GLES_GPU::Execute_TexLevel(u32 op, u32 diff) {
// I had hoped that this would let us avoid excessively flushing in Gran Turismo, but not so,
// as the game switches rapidly between modes 0 and 1.
/*
if (gstate.getTexLevelMode() == GE_TEXLEVEL_MODE_CONST) {
gstate.texlevel ^= diff;
Flush();
gstate.texlevel ^= diff;
}
*/
gstate_c.textureChanged |= TEXCHANGE_PARAMSONLY;
}
void GLES_GPU::ExecuteOpInternal(u32 op, u32 diff) {
u32 cmd = op >> 24;
u32 data = op & 0xFFFFFF;
Expand Down Expand Up @@ -1720,15 +1732,7 @@ void GLES_GPU::ExecuteOpInternal(u32 op, u32 diff) {
#endif

case GE_CMD_TEXLEVEL:
// I had hoped that this would let us avoid excessively flushing in Gran Turismo, but not so,
// as the game switches rapidly between modes 0 and 1.
/*
if ((gstate.texlevel & 0x3) == 1) {
gstate.texlevel ^= diff;
Flush();
gstate.texlevel ^= diff;
}*/
gstate_c.textureChanged |= TEXCHANGE_PARAMSONLY;
Execute_TexLevel(op, diff);
break;

//////////////////////////////////////////////////////////////////
Expand Down
1 change: 1 addition & 0 deletions GPU/GLES/GLES_GPU.h
Expand Up @@ -127,6 +127,7 @@ class GLES_GPU : public GPUCommon {
void Execute_BoneMtxNum(u32 op, u32 diff);
void Execute_BoneMtxData(u32 op, u32 diff);
void Execute_BlockTransferStart(u32 op, u32 diff);
void Execute_TexLevel(u32 op, u32 diff);

protected:
virtual void FastRunLoop(DisplayList &list);
Expand Down
8 changes: 4 additions & 4 deletions GPU/GLES/TextureCache.cpp
Expand Up @@ -504,15 +504,15 @@ void TextureCache::UpdateSamplingParams(TexCacheEntry &entry, bool force) {
float lodBias = (float)(int)(s8)((gstate.texlevel >> 16) & 0xFF) / 16.0f;
if (force || entry.lodBias != lodBias) {
#ifndef USING_GLES2
int mode = gstate.texlevel & 0x3;
GETexLevelMode mode = gstate.getTexLevelMode();
switch (mode) {
case GE_TEXBIAS_MODE_AUTO:
case GE_TEXLEVEL_MODE_AUTO:
// TODO
break;
case GE_TEXBIAS_MODE_CONST:
case GE_TEXLEVEL_MODE_CONST:
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_LOD_BIAS, lodBias);
break;
case GE_TEXBIAS_MODE_SLOPE:
case GE_TEXLEVEL_MODE_SLOPE:
// TODO
break;
}
Expand Down
6 changes: 0 additions & 6 deletions GPU/GLES/TextureCache.h
Expand Up @@ -39,12 +39,6 @@ enum FramebufferNotification {
NOTIFY_FB_DESTROYED,
};

enum TextureLevelMode {
GE_TEXBIAS_MODE_AUTO = 0,
GE_TEXBIAS_MODE_CONST = 1,
GE_TEXBIAS_MODE_SLOPE = 2,
};

class TextureCache {
public:
TextureCache();
Expand Down
1 change: 1 addition & 0 deletions GPU/GPUState.h
Expand Up @@ -292,6 +292,7 @@ struct GPUgstate
int getTextureWidth(int level) const { return 1 << (texsize[level] & 0xf);}
int getTextureHeight(int level) const { return 1 << ((texsize[level] >> 8) & 0xf);}
u16 getTextureDimension(int level) const { return texsize[level] & 0xf0f;}
GETexLevelMode getTexLevelMode() const { return static_cast<GETexLevelMode>(texlevel & 0x3); }
bool isTextureMapEnabled() const { return textureMapEnable & 1; }
GETexFunc getTextureFunction() const { return static_cast<GETexFunc>(texfunc & 0x7); }
bool isColorDoublingEnabled() const { return (texfunc & 0x10000) != 0; }
Expand Down
6 changes: 6 additions & 0 deletions GPU/ge_constants.h
Expand Up @@ -414,6 +414,12 @@ enum GETextureFormat
GE_TFMT_DXT5 = 10,
};

enum GETexLevelMode {
GE_TEXLEVEL_MODE_AUTO = 0,
GE_TEXLEVEL_MODE_CONST = 1,
GE_TEXLEVEL_MODE_SLOPE = 2,
};

enum GEMaterialColorSetting
{
GE_MATERIALCOLOR_EMISSIVE = 0,
Expand Down

0 comments on commit abc5c86

Please sign in to comment.