mirror of
https://github.com/hrydgard/ppsspp.git
synced 2025-04-02 11:01:50 -04:00
Split out texture level
This commit is contained in:
parent
86fdf88cec
commit
abc5c86339
6 changed files with 26 additions and 20 deletions
|
@ -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},
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
||||
//////////////////////////////////////////////////////////////////
|
||||
|
|
|
@ -127,6 +127,7 @@ public:
|
|||
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);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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; }
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Add table
Reference in a new issue