summaryrefslogtreecommitdiff
path: root/Source/Core/VideoCommon/RenderBase.cpp
diff options
context:
space:
mode:
authorTony Wasserka <neobrainx@gmail.com>2014-09-30 19:21:21 +0200
committerTony Wasserka <neobrainx@gmail.com>2014-09-30 19:21:21 +0200
commit13fc8e7df135e3a0c9298bb4b6ecaf6f0bacf087 (patch)
tree6fb0a323327dc321cfba2f8490927cd08a1ed04f /Source/Core/VideoCommon/RenderBase.cpp
parenta9b4016cd3a4c86a7efc8345433ed403dfc78acf (diff)
parent4fe1119e52393b176dc4a1a99de163f95112a725 (diff)
Merge pull request #578 from RachelBryk/IR
Cleanup Renderer::CalculateTargetSize(), and allow IRs higher than 4x to be set via INI.
Diffstat (limited to 'Source/Core/VideoCommon/RenderBase.cpp')
-rw-r--r--Source/Core/VideoCommon/RenderBase.cpp63
1 files changed, 31 insertions, 32 deletions
diff --git a/Source/Core/VideoCommon/RenderBase.cpp b/Source/Core/VideoCommon/RenderBase.cpp
index 726efea803..0e5dbba3cf 100644
--- a/Source/Core/VideoCommon/RenderBase.cpp
+++ b/Source/Core/VideoCommon/RenderBase.cpp
@@ -173,62 +173,61 @@ bool Renderer::CalculateTargetSize(unsigned int framebuffer_width, unsigned int
// TODO: Ugly. Clean up
switch (s_LastEFBScale)
{
- case 2: // 1x
+ case SCALE_AUTO:
+ case SCALE_AUTO_INTEGRAL:
+ newEFBWidth = FramebufferManagerBase::ScaleToVirtualXfbWidth(EFB_WIDTH, framebuffer_width);
+ newEFBHeight = FramebufferManagerBase::ScaleToVirtualXfbHeight(EFB_HEIGHT, framebuffer_height);
+
+ if (s_LastEFBScale == SCALE_AUTO_INTEGRAL)
+ {
+ newEFBWidth = ((newEFBWidth-1) / EFB_WIDTH + 1) * EFB_WIDTH;
+ newEFBHeight = ((newEFBHeight-1) / EFB_HEIGHT + 1) * EFB_HEIGHT;
+ }
+ efb_scale_numeratorX = newEFBWidth;
+ efb_scale_denominatorX = EFB_WIDTH;
+ efb_scale_numeratorY = newEFBHeight;
+ efb_scale_denominatorY = EFB_HEIGHT;
+ break;
+
+ case SCALE_1X:
efb_scale_numeratorX = efb_scale_numeratorY = 1;
efb_scale_denominatorX = efb_scale_denominatorY = 1;
break;
- case 3: // 1.5x
+ case SCALE_1_5X:
efb_scale_numeratorX = efb_scale_numeratorY = 3;
efb_scale_denominatorX = efb_scale_denominatorY = 2;
break;
- case 4: // 2x
+ case SCALE_2X:
efb_scale_numeratorX = efb_scale_numeratorY = 2;
efb_scale_denominatorX = efb_scale_denominatorY = 1;
break;
- case 5: // 2.5x
+ case SCALE_2_5X:
efb_scale_numeratorX = efb_scale_numeratorY = 5;
efb_scale_denominatorX = efb_scale_denominatorY = 2;
break;
- case 6: // 3x
- efb_scale_numeratorX = efb_scale_numeratorY = 3;
- efb_scale_denominatorX = efb_scale_denominatorY = 1;
- break;
-
- case 7: // 4x
- efb_scale_numeratorX = efb_scale_numeratorY = 4;
+ case SCALE_3X:
+ case SCALE_4X:
+ default:
+ efb_scale_numeratorX = efb_scale_numeratorY = s_LastEFBScale - 3;
efb_scale_denominatorX = efb_scale_denominatorY = 1;
- break;
-
- default: // fractional & integral handled later
- break;
- }
- switch (s_LastEFBScale)
- {
- case 0: // fractional
- case 1: // integral
- newEFBWidth = FramebufferManagerBase::ScaleToVirtualXfbWidth(EFB_WIDTH, framebuffer_width);
- newEFBHeight = FramebufferManagerBase::ScaleToVirtualXfbHeight(EFB_HEIGHT, framebuffer_height);
- if (s_LastEFBScale == 1)
+ int maxSize;
+ maxSize = GetMaxTextureSize();
+ if ((unsigned)maxSize < EFB_WIDTH * efb_scale_numeratorX / efb_scale_denominatorX)
{
- newEFBWidth = ((newEFBWidth-1) / EFB_WIDTH + 1) * EFB_WIDTH;
- newEFBHeight = ((newEFBHeight-1) / EFB_HEIGHT + 1) * EFB_HEIGHT;
+ efb_scale_numeratorX = efb_scale_numeratorY = (maxSize / EFB_WIDTH);
+ efb_scale_denominatorX = efb_scale_denominatorY = 1;
}
- efb_scale_numeratorX = newEFBWidth;
- efb_scale_denominatorX = EFB_WIDTH;
- efb_scale_numeratorY = newEFBHeight;
- efb_scale_denominatorY = EFB_HEIGHT;
- break;
- default:
- CalculateTargetScale(EFB_WIDTH, EFB_HEIGHT, newEFBWidth, newEFBHeight);
break;
}
+ if (s_LastEFBScale > SCALE_AUTO_INTEGRAL)
+ CalculateTargetScale(EFB_WIDTH, EFB_HEIGHT, newEFBWidth, newEFBHeight);
if (newEFBWidth != s_target_width || newEFBHeight != s_target_height)
{