mirror of
https://github.com/hrydgard/ppsspp.git
synced 2026-10-10 13:06:24 +02:00
Update the uvscale uniform a bit more conservatively on framebuffer changes
Plus fixes a few minor oversights Fixes #17581 and possibly #17522
This commit is contained in:
1 parent
4a4cd3d977
commit
def09bf575
6 files changed
+53
-29
No files matched your search
@@ -1141,23 +1141,26 @@ void TextureCacheCommon::SetTextureFramebuffer(const AttachCandidate &candidate)
|
||||
bool needsDepthXSwizzle = depthUpperBits == 2;
|
||||
|
||||
// We need to force it, since we may have set it on a texture before attaching.
|
||||
gstate_c.curTextureWidth = framebuffer->bufferWidth;
|
||||
gstate_c.curTextureHeight = framebuffer->bufferHeight;
|
||||
|
||||
int texWidth = framebuffer->bufferWidth;
|
||||
int texHeight = framebuffer->bufferHeight;
|
||||
if (candidate.channel == RASTER_COLOR && gstate.getTextureFormat() == GE_TFMT_CLUT8 && framebuffer->fb_format == GE_FORMAT_5551 && PSP_CoreParameter().compat.flags().SOCOMClut8Replacement) {
|
||||
// See #16210. UV must be adjusted as if the texture was twice the width.
|
||||
gstate_c.curTextureWidth *= 2.0f;
|
||||
texWidth *= 2.0f;
|
||||
}
|
||||
|
||||
if (needsDepthXSwizzle) {
|
||||
gstate_c.curTextureWidth = RoundUpToPowerOf2(gstate_c.curTextureWidth);
|
||||
texWidth = RoundUpToPowerOf2(texWidth);
|
||||
}
|
||||
|
||||
gstate_c.curTextureWidth = texWidth;
|
||||
gstate_c.curTextureHeight = texHeight;
|
||||
gstate_c.SetTextureIsFramebuffer(true);
|
||||
gstate_c.SetTextureIsBGRA(false);
|
||||
|
||||
if ((gstate_c.curTextureXOffset == 0) != (fbInfo.xOffset == 0) || (gstate_c.curTextureYOffset == 0) != (fbInfo.yOffset == 0)) {
|
||||
gstate_c.Dirty(DIRTY_FRAGMENTSHADER_STATE);
|
||||
}
|
||||
gstate_c.SetTextureIsBGRA(false);
|
||||
gstate_c.SetTextureIsFramebuffer(true);
|
||||
|
||||
gstate_c.curTextureXOffset = fbInfo.xOffset;
|
||||
gstate_c.curTextureYOffset = fbInfo.yOffset;
|
||||
u32 texW = (u32)gstate.getTextureWidth(0);
|
||||
@@ -2364,6 +2367,7 @@ void TextureCacheCommon::ApplyTextureFramebuffer(VirtualFramebuffer *framebuffer
|
||||
gpuStats.numDepal++;
|
||||
|
||||
gstate_c.curTextureWidth = texWidth;
|
||||
gstate_c.Dirty(DIRTY_UVSCALEOFFSET);
|
||||
|
||||
draw_->BindTexture(0, nullptr);
|
||||
framebufferManager_->RebindFramebuffer("ApplyTextureFramebuffer");
|
||||
@@ -2465,6 +2469,7 @@ void TextureCacheCommon::ApplyTextureDepal(TexCacheEntry *entry) {
|
||||
gpuStats.numDepal++;
|
||||
|
||||
gstate_c.curTextureWidth = texWidth;
|
||||
gstate_c.Dirty(DIRTY_UVSCALEOFFSET);
|
||||
|
||||
draw_->BindTexture(0, nullptr);
|
||||
framebufferManager_->RebindFramebuffer("ApplyTextureFramebuffer");
|
||||
|
||||
Reference in new issue
Block a user