diff options
| author | Tony Wasserka <neobrainx@gmail.com> | 2014-09-30 19:21:21 +0200 |
|---|---|---|
| committer | Tony Wasserka <neobrainx@gmail.com> | 2014-09-30 19:21:21 +0200 |
| commit | 13fc8e7df135e3a0c9298bb4b6ecaf6f0bacf087 (patch) | |
| tree | 6fb0a323327dc321cfba2f8490927cd08a1ed04f /Source/Core/VideoCommon/RenderBase.cpp | |
| parent | a9b4016cd3a4c86a7efc8345433ed403dfc78acf (diff) | |
| parent | 4fe1119e52393b176dc4a1a99de163f95112a725 (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.cpp | 63 |
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) { |
