summaryrefslogtreecommitdiff
path: root/Source
diff options
context:
space:
mode:
authorMarkus Wick <degasus@users.noreply.github.com>2017-04-11 10:27:16 +0200
committerGitHub <noreply@github.com>2017-04-11 10:27:16 +0200
commit4e90c5da8b3c4de34aea8a2521e7612d64f6c7c6 (patch)
treea61b4c1a53fa20c63e5b97e86b2e064407083836 /Source
parentae80a7541d1561bbd46fc53c6db14d02445497c0 (diff)
parentc7ab6861c26955cd1a34d55ecc53db768e7e4724 (diff)
Merge pull request #5234 from lioncash/tuple
RenderBase: Return tuples from CalculateTargetScale and ConvertStereoRectangle instead of using out parameters
Diffstat (limited to 'Source')
-rw-r--r--Source/Core/VideoBackends/D3D/Render.cpp3
-rw-r--r--Source/Core/VideoBackends/D3D12/Render.cpp3
-rw-r--r--Source/Core/VideoBackends/OGL/Render.cpp5
-rw-r--r--Source/Core/VideoBackends/Vulkan/Renderer.cpp3
-rw-r--r--Source/Core/VideoCommon/RenderBase.cpp84
-rw-r--r--Source/Core/VideoCommon/RenderBase.h6
6 files changed, 57 insertions, 47 deletions
diff --git a/Source/Core/VideoBackends/D3D/Render.cpp b/Source/Core/VideoBackends/D3D/Render.cpp
index b082963820..5cc194e543 100644
--- a/Source/Core/VideoBackends/D3D/Render.cpp
+++ b/Source/Core/VideoBackends/D3D/Render.cpp
@@ -9,6 +9,7 @@
#include <memory>
#include <string>
#include <strsafe.h>
+#include <tuple>
#include <unordered_map>
#include "Common/CommonTypes.h"
@@ -1173,7 +1174,7 @@ void Renderer::BlitScreen(TargetRectangle src, TargetRectangle dst, D3DTexture2D
if (g_ActiveConfig.iStereoMode == STEREO_SBS || g_ActiveConfig.iStereoMode == STEREO_TAB)
{
TargetRectangle leftRc, rightRc;
- ConvertStereoRectangle(dst, leftRc, rightRc);
+ std::tie(leftRc, rightRc) = ConvertStereoRectangle(dst);
D3D11_VIEWPORT leftVp = CD3D11_VIEWPORT((float)leftRc.left, (float)leftRc.top,
(float)leftRc.GetWidth(), (float)leftRc.GetHeight());
diff --git a/Source/Core/VideoBackends/D3D12/Render.cpp b/Source/Core/VideoBackends/D3D12/Render.cpp
index da5e48c053..0762dc5ee5 100644
--- a/Source/Core/VideoBackends/D3D12/Render.cpp
+++ b/Source/Core/VideoBackends/D3D12/Render.cpp
@@ -9,6 +9,7 @@
#include <memory>
#include <string>
#include <strsafe.h>
+#include <tuple>
#include <unordered_map>
#include "Common/Align.h"
@@ -1203,7 +1204,7 @@ void Renderer::BlitScreen(TargetRectangle src, TargetRectangle dst, D3DTexture2D
if (g_ActiveConfig.iStereoMode == STEREO_SBS || g_ActiveConfig.iStereoMode == STEREO_TAB)
{
TargetRectangle left_rc, right_rc;
- ConvertStereoRectangle(dst, left_rc, right_rc);
+ std::tie(left_rc, right_rc) = ConvertStereoRectangle(dst);
// Swap chain backbuffer is never multisampled..
diff --git a/Source/Core/VideoBackends/OGL/Render.cpp b/Source/Core/VideoBackends/OGL/Render.cpp
index 18626eaa0e..b845c0b6ca 100644
--- a/Source/Core/VideoBackends/OGL/Render.cpp
+++ b/Source/Core/VideoBackends/OGL/Render.cpp
@@ -10,6 +10,7 @@
#include <cstdio>
#include <memory>
#include <string>
+#include <tuple>
#include <vector>
#include "Common/Atomic.h"
@@ -1181,9 +1182,9 @@ void Renderer::BlitScreen(TargetRectangle src, TargetRectangle dst, GLuint src_t
// Top-and-Bottom mode needs to compensate for inverted vertical screen coordinates.
if (g_ActiveConfig.iStereoMode == STEREO_TAB)
- ConvertStereoRectangle(dst, rightRc, leftRc);
+ std::tie(rightRc, leftRc) = ConvertStereoRectangle(dst);
else
- ConvertStereoRectangle(dst, leftRc, rightRc);
+ std::tie(leftRc, rightRc) = ConvertStereoRectangle(dst);
m_post_processor->BlitFromTexture(src, leftRc, src_texture, src_width, src_height, 0);
m_post_processor->BlitFromTexture(src, rightRc, src_texture, src_width, src_height, 1);
diff --git a/Source/Core/VideoBackends/Vulkan/Renderer.cpp b/Source/Core/VideoBackends/Vulkan/Renderer.cpp
index 0a65290dd0..eba40f0315 100644
--- a/Source/Core/VideoBackends/Vulkan/Renderer.cpp
+++ b/Source/Core/VideoBackends/Vulkan/Renderer.cpp
@@ -8,6 +8,7 @@
#include <cstdio>
#include <limits>
#include <string>
+#include <tuple>
#include "Common/Assert.h"
#include "Common/CommonTypes.h"
@@ -907,7 +908,7 @@ void Renderer::BlitScreen(VkRenderPass render_pass, const TargetRectangle& dst_r
{
TargetRectangle left_rect;
TargetRectangle right_rect;
- ConvertStereoRectangle(dst_rect, left_rect, right_rect);
+ std::tie(left_rect, right_rect) = ConvertStereoRectangle(dst_rect);
draw.DrawQuad(left_rect.left, left_rect.top, left_rect.GetWidth(), left_rect.GetHeight(),
src_rect.left, src_rect.top, 0, src_rect.GetWidth(), src_rect.GetHeight(),
diff --git a/Source/Core/VideoCommon/RenderBase.cpp b/Source/Core/VideoCommon/RenderBase.cpp
index b389756b5b..ff390a8c7d 100644
--- a/Source/Core/VideoCommon/RenderBase.cpp
+++ b/Source/Core/VideoCommon/RenderBase.cpp
@@ -163,49 +163,52 @@ float Renderer::EFBToScaledYf(float y) const
return y * ((float)GetTargetHeight() / (float)EFB_HEIGHT);
}
-void Renderer::CalculateTargetScale(int x, int y, int* scaledX, int* scaledY) const
+std::tuple<int, int> Renderer::CalculateTargetScale(int x, int y) const
{
if (g_ActiveConfig.iEFBScale == SCALE_AUTO || g_ActiveConfig.iEFBScale == SCALE_AUTO_INTEGRAL)
{
- *scaledX = x;
- *scaledY = y;
- }
- else
- {
- *scaledX = x * (int)m_efb_scale_numeratorX / (int)m_efb_scale_denominatorX;
- *scaledY = y * (int)m_efb_scale_numeratorY / (int)m_efb_scale_denominatorY;
+ return std::make_tuple(x, y);
}
+
+ const int scaled_x =
+ x * static_cast<int>(m_efb_scale_numeratorX) / static_cast<int>(m_efb_scale_denominatorX);
+
+ const int scaled_y =
+ y * static_cast<int>(m_efb_scale_numeratorY) / static_cast<int>(m_efb_scale_denominatorY);
+
+ return std::make_tuple(scaled_x, scaled_y);
}
// return true if target size changed
bool Renderer::CalculateTargetSize()
{
- int newEFBWidth, newEFBHeight;
- newEFBWidth = newEFBHeight = 0;
-
m_last_efb_scale = g_ActiveConfig.iEFBScale;
+ int new_efb_width = 0;
+ int new_efb_height = 0;
+
// TODO: Ugly. Clean up
switch (m_last_efb_scale)
{
case SCALE_AUTO:
case SCALE_AUTO_INTEGRAL:
- newEFBWidth = FramebufferManagerBase::ScaleToVirtualXfbWidth(EFB_WIDTH, m_target_rectangle);
- newEFBHeight = FramebufferManagerBase::ScaleToVirtualXfbHeight(EFB_HEIGHT, m_target_rectangle);
+ new_efb_width = FramebufferManagerBase::ScaleToVirtualXfbWidth(EFB_WIDTH, m_target_rectangle);
+ new_efb_height =
+ FramebufferManagerBase::ScaleToVirtualXfbHeight(EFB_HEIGHT, m_target_rectangle);
if (m_last_efb_scale == SCALE_AUTO_INTEGRAL)
{
m_efb_scale_numeratorX = m_efb_scale_numeratorY =
- std::max((newEFBWidth - 1) / EFB_WIDTH + 1, (newEFBHeight - 1) / EFB_HEIGHT + 1);
+ std::max((new_efb_width - 1) / EFB_WIDTH + 1, (new_efb_height - 1) / EFB_HEIGHT + 1);
m_efb_scale_denominatorX = m_efb_scale_denominatorY = 1;
- newEFBWidth = EFBToScaledX(EFB_WIDTH);
- newEFBHeight = EFBToScaledY(EFB_HEIGHT);
+ new_efb_width = EFBToScaledX(EFB_WIDTH);
+ new_efb_height = EFBToScaledY(EFB_HEIGHT);
}
else
{
- m_efb_scale_numeratorX = newEFBWidth;
+ m_efb_scale_numeratorX = new_efb_width;
m_efb_scale_denominatorX = EFB_WIDTH;
- m_efb_scale_numeratorY = newEFBHeight;
+ m_efb_scale_numeratorY = new_efb_height;
m_efb_scale_denominatorY = EFB_HEIGHT;
}
break;
@@ -244,53 +247,56 @@ bool Renderer::CalculateTargetSize()
break;
}
if (m_last_efb_scale > SCALE_AUTO_INTEGRAL)
- CalculateTargetScale(EFB_WIDTH, EFB_HEIGHT, &newEFBWidth, &newEFBHeight);
+ std::tie(new_efb_width, new_efb_height) = CalculateTargetScale(EFB_WIDTH, EFB_HEIGHT);
- if (newEFBWidth != m_target_width || newEFBHeight != m_target_height)
+ if (new_efb_width != m_target_width || new_efb_height != m_target_height)
{
- m_target_width = newEFBWidth;
- m_target_height = newEFBHeight;
+ m_target_width = new_efb_width;
+ m_target_height = new_efb_height;
PixelShaderManager::SetEfbScaleChanged(EFBToScaledXf(1), EFBToScaledYf(1));
return true;
}
return false;
}
-void Renderer::ConvertStereoRectangle(const TargetRectangle& rc, TargetRectangle& leftRc,
- TargetRectangle& rightRc) const
+std::tuple<TargetRectangle, TargetRectangle>
+Renderer::ConvertStereoRectangle(const TargetRectangle& rc) const
{
// Resize target to half its original size
- TargetRectangle drawRc = rc;
+ TargetRectangle draw_rc = rc;
if (g_ActiveConfig.iStereoMode == STEREO_TAB)
{
// The height may be negative due to flipped rectangles
int height = rc.bottom - rc.top;
- drawRc.top += height / 4;
- drawRc.bottom -= height / 4;
+ draw_rc.top += height / 4;
+ draw_rc.bottom -= height / 4;
}
else
{
int width = rc.right - rc.left;
- drawRc.left += width / 4;
- drawRc.right -= width / 4;
+ draw_rc.left += width / 4;
+ draw_rc.right -= width / 4;
}
// Create two target rectangle offset to the sides of the backbuffer
- leftRc = drawRc, rightRc = drawRc;
+ TargetRectangle left_rc = draw_rc;
+ TargetRectangle right_rc = draw_rc;
if (g_ActiveConfig.iStereoMode == STEREO_TAB)
{
- leftRc.top -= m_backbuffer_height / 4;
- leftRc.bottom -= m_backbuffer_height / 4;
- rightRc.top += m_backbuffer_height / 4;
- rightRc.bottom += m_backbuffer_height / 4;
+ left_rc.top -= m_backbuffer_height / 4;
+ left_rc.bottom -= m_backbuffer_height / 4;
+ right_rc.top += m_backbuffer_height / 4;
+ right_rc.bottom += m_backbuffer_height / 4;
}
else
{
- leftRc.left -= m_backbuffer_width / 4;
- leftRc.right -= m_backbuffer_width / 4;
- rightRc.left += m_backbuffer_width / 4;
- rightRc.right += m_backbuffer_width / 4;
+ left_rc.left -= m_backbuffer_width / 4;
+ left_rc.right -= m_backbuffer_width / 4;
+ right_rc.left += m_backbuffer_width / 4;
+ right_rc.right += m_backbuffer_width / 4;
}
+
+ return std::make_tuple(left_rc, right_rc);
}
void Renderer::SaveScreenshot(const std::string& filename, bool wait_for_completion)
@@ -650,7 +656,7 @@ void Renderer::SetWindowSize(int width, int height)
height = std::max(height, 1);
// Scale the window size by the EFB scale.
- CalculateTargetScale(width, height, &width, &height);
+ std::tie(width, height) = CalculateTargetScale(width, height);
float scaled_width, scaled_height;
std::tie(scaled_width, scaled_height) = ScaleToDisplayAspectRatio(width, height);
diff --git a/Source/Core/VideoCommon/RenderBase.h b/Source/Core/VideoCommon/RenderBase.h
index 027d7dd793..fe2fd4e0e4 100644
--- a/Source/Core/VideoCommon/RenderBase.h
+++ b/Source/Core/VideoCommon/RenderBase.h
@@ -100,8 +100,8 @@ public:
void UpdateDrawRectangle();
// Use this to convert a single target rectangle to two stereo rectangles
- void ConvertStereoRectangle(const TargetRectangle& rc, TargetRectangle& leftRc,
- TargetRectangle& rightRc) const;
+ std::tuple<TargetRectangle, TargetRectangle>
+ ConvertStereoRectangle(const TargetRectangle& rc) const;
// Use this to upscale native EFB coordinates to IDEAL internal resolution
int EFBToScaledX(int x) const;
@@ -144,7 +144,7 @@ public:
bool UseVertexDepthRange() const;
protected:
- void CalculateTargetScale(int x, int y, int* scaledX, int* scaledY) const;
+ std::tuple<int, int> CalculateTargetScale(int x, int y) const;
bool CalculateTargetSize();
void CheckFifoRecording();