mirror of
https://github.com/hrydgard/ppsspp.git
synced 2025-04-02 11:01:50 -04:00
GPU: Mask away unused bits in framebuf/zbuf ptr.
Lower 4 bits are ignored during rendering, and mirrors (even even the 8 bit at the top) are ignored.
This commit is contained in:
parent
bc1975bc99
commit
b9b59f7806
6 changed files with 8 additions and 7 deletions
|
@ -340,7 +340,7 @@ void DrawEngineD3D11::DoFlush() {
|
|||
textureCache_->SetTexture();
|
||||
gstate_c.Clean(DIRTY_TEXTURE_IMAGE | DIRTY_TEXTURE_PARAMS);
|
||||
textureNeedsApply = true;
|
||||
} else if (gstate.getTextureAddress(0) == ((gstate.getFrameBufRawAddress() | 0x04000000) & 0x3FFFFFFF)) {
|
||||
} else if (gstate.getTextureAddress(0) == (gstate.getFrameBufRawAddress() | 0x04000000)) {
|
||||
// This catches the case of clearing a texture. (#10957)
|
||||
gstate_c.Dirty(DIRTY_TEXTURE_IMAGE);
|
||||
}
|
||||
|
|
|
@ -433,7 +433,7 @@ void DrawEngineD3D11::ApplyDrawState(int prim) {
|
|||
if (gstate_c.IsDirty(DIRTY_TEXTURE_IMAGE | DIRTY_TEXTURE_PARAMS) && !gstate.isModeClear() && gstate.isTextureMapEnabled()) {
|
||||
textureCache_->SetTexture();
|
||||
gstate_c.Clean(DIRTY_TEXTURE_IMAGE | DIRTY_TEXTURE_PARAMS);
|
||||
} else if (gstate.getTextureAddress(0) == ((gstate.getFrameBufRawAddress() | 0x04000000) & 0x3FFFFFFF)) {
|
||||
} else if (gstate.getTextureAddress(0) == (gstate.getFrameBufRawAddress() | 0x04000000)) {
|
||||
// This catches the case of clearing a texture.
|
||||
gstate_c.Dirty(DIRTY_TEXTURE_IMAGE);
|
||||
}
|
||||
|
|
|
@ -327,7 +327,7 @@ void DrawEngineDX9::DoFlush() {
|
|||
textureCache_->SetTexture();
|
||||
gstate_c.Clean(DIRTY_TEXTURE_IMAGE | DIRTY_TEXTURE_PARAMS);
|
||||
textureNeedsApply = true;
|
||||
} else if (gstate.getTextureAddress(0) == ((gstate.getFrameBufRawAddress() | 0x04000000) & 0x3FFFFFFF)) {
|
||||
} else if (gstate.getTextureAddress(0) == (gstate.getFrameBufRawAddress() | 0x04000000)) {
|
||||
// This catches the case of clearing a texture. (#10957)
|
||||
gstate_c.Dirty(DIRTY_TEXTURE_IMAGE);
|
||||
}
|
||||
|
|
|
@ -259,7 +259,7 @@ void DrawEngineGLES::DoFlush() {
|
|||
textureCache_->SetTexture();
|
||||
gstate_c.Clean(DIRTY_TEXTURE_IMAGE | DIRTY_TEXTURE_PARAMS);
|
||||
textureNeedsApply = true;
|
||||
} else if (gstate.getTextureAddress(0) == ((gstate.getFrameBufRawAddress() | 0x04000000) & 0x3FFFFFFF)) {
|
||||
} else if (gstate.getTextureAddress(0) == (gstate.getFrameBufRawAddress() | 0x04000000)) {
|
||||
// This catches the case of clearing a texture. (#10957)
|
||||
gstate_c.Dirty(DIRTY_TEXTURE_IMAGE);
|
||||
}
|
||||
|
|
|
@ -206,12 +206,13 @@ struct GPUgstate {
|
|||
float boneMatrix[12 * 8]; // Eight 4x3 bone matrices.
|
||||
|
||||
// We ignore the high bits of the framebuffer in fbwidth - even 0x08000000 renders to vRAM.
|
||||
u32 getFrameBufRawAddress() const { return (fbptr & 0xFFFFFF); }
|
||||
// The top bits of mirroring are also not respected, so we mask them away.
|
||||
u32 getFrameBufRawAddress() const { return fbptr & 0x1FFFF0; }
|
||||
// 0x44000000 is uncached VRAM.
|
||||
u32 getFrameBufAddress() const { return 0x44000000 | getFrameBufRawAddress(); }
|
||||
GEBufferFormat FrameBufFormat() const { return static_cast<GEBufferFormat>(framebufpixformat & 3); }
|
||||
int FrameBufStride() const { return fbwidth&0x7FC; }
|
||||
u32 getDepthBufRawAddress() const { return (zbptr & 0xFFFFFF); }
|
||||
u32 getDepthBufRawAddress() const { return zbptr & 0x1FFFF0; }
|
||||
u32 getDepthBufAddress() const { return 0x44000000 | getDepthBufRawAddress(); }
|
||||
int DepthBufStride() const { return zbwidth&0x7FC; }
|
||||
|
||||
|
|
|
@ -569,7 +569,7 @@ void DrawEngineVulkan::DoFlush() {
|
|||
textureCache_->SetTexture();
|
||||
gstate_c.Clean(DIRTY_TEXTURE_IMAGE | DIRTY_TEXTURE_PARAMS);
|
||||
textureNeedsApply = true;
|
||||
} else if (gstate.getTextureAddress(0) == ((gstate.getFrameBufRawAddress() | 0x04000000) & 0x3FFFFFFF)) {
|
||||
} else if (gstate.getTextureAddress(0) == (gstate.getFrameBufRawAddress() | 0x04000000)) {
|
||||
// This catches the case of clearing a texture.
|
||||
gstate_c.Dirty(DIRTY_TEXTURE_IMAGE);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue