summaryrefslogtreecommitdiff
path: root/Source/Core/VideoCommon
diff options
context:
space:
mode:
authorStenzek <stenzek@gmail.com>2019-04-16 00:47:46 +1000
committerStenzek <stenzek@gmail.com>2019-04-21 14:28:14 +1000
commitf8c1ba409cdfc41e60d27b0fc002a8fd79f9c73e (patch)
treec3814adea3fb269649fd18e1afd3c8764be5c491 /Source/Core/VideoCommon
parent6ea43235d54a18b70529cb6d0d740e0f8f9c34ea (diff)
Replace EFBRectangle/TargetRectangle with MathUtil::Rectangle
Diffstat (limited to 'Source/Core/VideoCommon')
-rw-r--r--Source/Core/VideoCommon/BPFunctions.cpp6
-rw-r--r--Source/Core/VideoCommon/BPFunctions.h2
-rw-r--r--Source/Core/VideoCommon/BPStructs.cpp2
-rw-r--r--Source/Core/VideoCommon/RenderBase.cpp26
-rw-r--r--Source/Core/VideoCommon/RenderBase.h21
-rw-r--r--Source/Core/VideoCommon/TextureCacheBase.cpp19
-rw-r--r--Source/Core/VideoCommon/TextureCacheBase.h15
-rw-r--r--Source/Core/VideoCommon/VideoCommon.h33
8 files changed, 47 insertions, 77 deletions
diff --git a/Source/Core/VideoCommon/BPFunctions.cpp b/Source/Core/VideoCommon/BPFunctions.cpp
index 7db9d58cad..2aa325f8f7 100644
--- a/Source/Core/VideoCommon/BPFunctions.cpp
+++ b/Source/Core/VideoCommon/BPFunctions.cpp
@@ -49,8 +49,8 @@ void SetScissor()
const int xoff = bpmem.scissorOffset.x * 2;
const int yoff = bpmem.scissorOffset.y * 2;
- EFBRectangle native_rc(bpmem.scissorTL.x - xoff, bpmem.scissorTL.y - yoff,
- bpmem.scissorBR.x - xoff + 1, bpmem.scissorBR.y - yoff + 1);
+ MathUtil::Rectangle<int> native_rc(bpmem.scissorTL.x - xoff, bpmem.scissorTL.y - yoff,
+ bpmem.scissorBR.x - xoff + 1, bpmem.scissorBR.y - yoff + 1);
native_rc.ClampUL(0, 0, EFB_WIDTH, EFB_HEIGHT);
auto target_rc = g_renderer->ConvertEFBRectangle(native_rc);
@@ -172,7 +172,7 @@ void SetBlendMode()
- convert the RGBA8 color to RGBA6/RGB8/RGB565 and convert it to RGBA8 again
- convert the Z24 depth value to Z16 and back to Z24
*/
-void ClearScreen(const EFBRectangle& rc)
+void ClearScreen(const MathUtil::Rectangle<int>& rc)
{
bool colorEnable = (bpmem.blendmode.colorupdate != 0);
bool alphaEnable = (bpmem.blendmode.alphaupdate != 0);
diff --git a/Source/Core/VideoCommon/BPFunctions.h b/Source/Core/VideoCommon/BPFunctions.h
index 24ebee7a21..93fd5b0d78 100644
--- a/Source/Core/VideoCommon/BPFunctions.h
+++ b/Source/Core/VideoCommon/BPFunctions.h
@@ -20,7 +20,7 @@ void SetScissor();
void SetViewport();
void SetDepthMode();
void SetBlendMode();
-void ClearScreen(const EFBRectangle& rc);
+void ClearScreen(const MathUtil::Rectangle<int>& rc);
void OnPixelFormatChange();
void SetInterlacingMode(const BPCmd& bp);
}
diff --git a/Source/Core/VideoCommon/BPStructs.cpp b/Source/Core/VideoCommon/BPStructs.cpp
index 925619e797..12fc46b209 100644
--- a/Source/Core/VideoCommon/BPStructs.cpp
+++ b/Source/Core/VideoCommon/BPStructs.cpp
@@ -219,7 +219,7 @@ static void BPWritten(const BPCmd& bp)
u32 destAddr = bpmem.copyTexDest << 5;
u32 destStride = bpmem.copyMipMapStrideChannels << 5;
- EFBRectangle srcRect;
+ MathUtil::Rectangle<int> srcRect;
srcRect.left = static_cast<int>(bpmem.copyTexSrcXY.x);
srcRect.top = static_cast<int>(bpmem.copyTexSrcXY.y);
diff --git a/Source/Core/VideoCommon/RenderBase.cpp b/Source/Core/VideoCommon/RenderBase.cpp
index 67bc9ede9e..523a681884 100644
--- a/Source/Core/VideoCommon/RenderBase.cpp
+++ b/Source/Core/VideoCommon/RenderBase.cpp
@@ -158,8 +158,8 @@ bool Renderer::EFBHasAlphaChannel() const
return m_prev_efb_format == PEControl::RGBA6_Z24;
}
-void Renderer::ClearScreen(const EFBRectangle& rc, bool colorEnable, bool alphaEnable, bool zEnable,
- u32 color, u32 z)
+void Renderer::ClearScreen(const MathUtil::Rectangle<int>& rc, bool colorEnable, bool alphaEnable,
+ bool zEnable, u32 color, u32 z)
{
g_framebuffer_manager->ClearEFB(rc, colorEnable, alphaEnable, zEnable, color, z);
}
@@ -258,8 +258,8 @@ void Renderer::PokeEFB(EFBAccessType type, const EfbPokeData* points, size_t num
}
}
-void Renderer::RenderToXFB(u32 xfbAddr, const EFBRectangle& sourceRc, u32 fbStride, u32 fbHeight,
- float Gamma)
+void Renderer::RenderToXFB(u32 xfbAddr, const MathUtil::Rectangle<int>& sourceRc, u32 fbStride,
+ u32 fbHeight, float Gamma)
{
CheckFifoRecording();
@@ -332,11 +332,11 @@ bool Renderer::CalculateTargetSize()
return false;
}
-std::tuple<TargetRectangle, TargetRectangle>
-Renderer::ConvertStereoRectangle(const TargetRectangle& rc) const
+std::tuple<MathUtil::Rectangle<int>, MathUtil::Rectangle<int>>
+Renderer::ConvertStereoRectangle(const MathUtil::Rectangle<int>& rc) const
{
// Resize target to half its original size
- TargetRectangle draw_rc = rc;
+ auto draw_rc = rc;
if (g_ActiveConfig.stereo_mode == StereoMode::TAB)
{
// The height may be negative due to flipped rectangles
@@ -352,8 +352,8 @@ Renderer::ConvertStereoRectangle(const TargetRectangle& rc) const
}
// Create two target rectangle offset to the sides of the backbuffer
- TargetRectangle left_rc = draw_rc;
- TargetRectangle right_rc = draw_rc;
+ auto left_rc = draw_rc;
+ auto right_rc = draw_rc;
if (g_ActiveConfig.stereo_mode == StereoMode::TAB)
{
left_rc.top -= m_backbuffer_height / 4;
@@ -649,9 +649,9 @@ MathUtil::Rectangle<int> Renderer::ConvertFramebufferRectangle(const MathUtil::R
return ret;
}
-TargetRectangle Renderer::ConvertEFBRectangle(const EFBRectangle& rc)
+MathUtil::Rectangle<int> Renderer::ConvertEFBRectangle(const MathUtil::Rectangle<int>& rc)
{
- TargetRectangle result;
+ MathUtil::Rectangle<int> result;
result.left = EFBToScaledX(rc.left);
result.top = EFBToScaledY(rc.top);
result.right = EFBToScaledX(rc.right);
@@ -1285,13 +1285,13 @@ void Renderer::Swap(u32 xfb_addr, u32 fb_width, u32 fb_stride, u32 fb_height, u6
}
}
-void Renderer::RenderXFBToScreen(const AbstractTexture* texture, const EFBRectangle& rc)
+void Renderer::RenderXFBToScreen(const AbstractTexture* texture, const MathUtil::Rectangle<int>& rc)
{
const auto target_rc = GetTargetRectangle();
if (g_ActiveConfig.stereo_mode == StereoMode::SBS ||
g_ActiveConfig.stereo_mode == StereoMode::TAB)
{
- TargetRectangle left_rc, right_rc;
+ MathUtil::Rectangle<int> left_rc, right_rc;
std::tie(left_rc, right_rc) = ConvertStereoRectangle(target_rc);
m_post_processor->BlitFromTexture(left_rc, rc, texture, 0);
diff --git a/Source/Core/VideoCommon/RenderBase.h b/Source/Core/VideoCommon/RenderBase.h
index 596b19834b..ad4f2332b3 100644
--- a/Source/Core/VideoCommon/RenderBase.h
+++ b/Source/Core/VideoCommon/RenderBase.h
@@ -167,17 +167,17 @@ public:
// EFB coordinate conversion functions
// Use this to convert a whole native EFB rect to backbuffer coordinates
- TargetRectangle ConvertEFBRectangle(const EFBRectangle& rc);
+ MathUtil::Rectangle<int> ConvertEFBRectangle(const MathUtil::Rectangle<int>& rc);
- const TargetRectangle& GetTargetRectangle() const { return m_target_rectangle; }
+ const MathUtil::Rectangle<int>& GetTargetRectangle() const { return m_target_rectangle; }
float CalculateDrawAspectRatio() const;
std::tuple<float, float> ScaleToDisplayAspectRatio(int width, int height) const;
void UpdateDrawRectangle();
// Use this to convert a single target rectangle to two stereo rectangles
- std::tuple<TargetRectangle, TargetRectangle>
- ConvertStereoRectangle(const TargetRectangle& rc) const;
+ std::tuple<MathUtil::Rectangle<int>, MathUtil::Rectangle<int>>
+ ConvertStereoRectangle(const MathUtil::Rectangle<int>& rc) const;
unsigned int GetEFBScale() const;
@@ -196,11 +196,11 @@ public:
// ImGui initialization depends on being able to create textures and pipelines, so do it last.
bool InitializeImGui();
- virtual void ClearScreen(const EFBRectangle& rc, bool colorEnable, bool alphaEnable, bool zEnable,
- u32 color, u32 z);
+ virtual void ClearScreen(const MathUtil::Rectangle<int>& rc, bool colorEnable, bool alphaEnable,
+ bool zEnable, u32 color, u32 z);
virtual void ReinterpretPixelData(EFBReinterpretType convtype);
- void RenderToXFB(u32 xfbAddr, const EFBRectangle& sourceRc, u32 fbStride, u32 fbHeight,
- float Gamma = 1.0f);
+ void RenderToXFB(u32 xfbAddr, const MathUtil::Rectangle<int>& sourceRc, u32 fbStride,
+ u32 fbHeight, float Gamma = 1.0f);
virtual u32 AccessEFB(EFBAccessType type, u32 x, u32 y, u32 poke_data);
virtual void PokeEFB(EFBAccessType type, const EfbPokeData* points, size_t num_points);
@@ -217,7 +217,8 @@ public:
// Draws the specified XFB buffer to the screen, performing any post-processing.
// Assumes that the backbuffer has already been bound and cleared.
- virtual void RenderXFBToScreen(const AbstractTexture* texture, const EFBRectangle& rc);
+ virtual void RenderXFBToScreen(const AbstractTexture* texture,
+ const MathUtil::Rectangle<int>& rc);
// Called when the configuration changes, and backend structures need to be updated.
virtual void OnConfigChanged(u32 bits) {}
@@ -295,7 +296,7 @@ protected:
int m_backbuffer_height = 0;
float m_backbuffer_scale = 1.0f;
AbstractTextureFormat m_backbuffer_format = AbstractTextureFormat::Undefined;
- TargetRectangle m_target_rectangle = {};
+ MathUtil::Rectangle<int> m_target_rectangle = {};
int m_frame_count = 0;
FPSCounter m_fps_counter;
diff --git a/Source/Core/VideoCommon/TextureCacheBase.cpp b/Source/Core/VideoCommon/TextureCacheBase.cpp
index 4e0d2547f2..01d7a675eb 100644
--- a/Source/Core/VideoCommon/TextureCacheBase.cpp
+++ b/Source/Core/VideoCommon/TextureCacheBase.cpp
@@ -1527,8 +1527,9 @@ bool TextureCacheBase::NeedsCopyFilterInShader(const EFBCopyFilterCoefficients&
void TextureCacheBase::CopyRenderTargetToTexture(
u32 dstAddr, EFBCopyFormat dstFormat, u32 width, u32 height, u32 dstStride, bool is_depth_copy,
- const EFBRectangle& srcRect, bool isIntensity, bool scaleByHalf, float y_scale, float gamma,
- bool clamp_top, bool clamp_bottom, const CopyFilterCoefficients::Values& filter_coefficients)
+ const MathUtil::Rectangle<int>& srcRect, bool isIntensity, bool scaleByHalf, float y_scale,
+ float gamma, bool clamp_top, bool clamp_bottom,
+ const CopyFilterCoefficients::Values& filter_coefficients)
{
// Emulation methods:
//
@@ -2158,10 +2159,10 @@ bool TextureCacheBase::CreateUtilityTextures()
}
void TextureCacheBase::CopyEFBToCacheEntry(TCacheEntry* entry, bool is_depth_copy,
- const EFBRectangle& src_rect, bool scale_by_half,
- bool linear_filter, EFBCopyFormat dst_format,
- bool is_intensity, float gamma, bool clamp_top,
- bool clamp_bottom,
+ const MathUtil::Rectangle<int>& src_rect,
+ bool scale_by_half, bool linear_filter,
+ EFBCopyFormat dst_format, bool is_intensity, float gamma,
+ bool clamp_top, bool clamp_bottom,
const EFBCopyFilterCoefficients& filter_coefficients)
{
// Flush EFB pokes first, as they're expected to be included.
@@ -2229,9 +2230,9 @@ void TextureCacheBase::CopyEFBToCacheEntry(TCacheEntry* entry, bool is_depth_cop
void TextureCacheBase::CopyEFB(AbstractStagingTexture* dst, const EFBCopyParams& params,
u32 native_width, u32 bytes_per_row, u32 num_blocks_y,
- u32 memory_stride, const EFBRectangle& src_rect, bool scale_by_half,
- bool linear_filter, float y_scale, float gamma, bool clamp_top,
- bool clamp_bottom,
+ u32 memory_stride, const MathUtil::Rectangle<int>& src_rect,
+ bool scale_by_half, bool linear_filter, float y_scale, float gamma,
+ bool clamp_top, bool clamp_bottom,
const EFBCopyFilterCoefficients& filter_coefficients)
{
// Flush EFB pokes first, as they're expected to be included.
diff --git a/Source/Core/VideoCommon/TextureCacheBase.h b/Source/Core/VideoCommon/TextureCacheBase.h
index c33dd4b7df..6c647359dd 100644
--- a/Source/Core/VideoCommon/TextureCacheBase.h
+++ b/Source/Core/VideoCommon/TextureCacheBase.h
@@ -213,9 +213,10 @@ public:
virtual void BindTextures();
void CopyRenderTargetToTexture(u32 dstAddr, EFBCopyFormat dstFormat, u32 width, u32 height,
- u32 dstStride, bool is_depth_copy, const EFBRectangle& srcRect,
- bool isIntensity, bool scaleByHalf, float y_scale, float gamma,
- bool clamp_top, bool clamp_bottom,
+ u32 dstStride, bool is_depth_copy,
+ const MathUtil::Rectangle<int>& srcRect, bool isIntensity,
+ bool scaleByHalf, float y_scale, float gamma, bool clamp_top,
+ bool clamp_bottom,
const CopyFilterCoefficients::Values& filter_coefficients);
void ScaleTextureCacheEntryTo(TCacheEntry* entry, u32 new_width, u32 new_height);
@@ -243,11 +244,11 @@ protected:
virtual void CopyEFB(AbstractStagingTexture* dst, const EFBCopyParams& params, u32 native_width,
u32 bytes_per_row, u32 num_blocks_y, u32 memory_stride,
- const EFBRectangle& src_rect, bool scale_by_half, bool linear_filter,
- float y_scale, float gamma, bool clamp_top, bool clamp_bottom,
- const EFBCopyFilterCoefficients& filter_coefficients);
+ const MathUtil::Rectangle<int>& src_rect, bool scale_by_half,
+ bool linear_filter, float y_scale, float gamma, bool clamp_top,
+ bool clamp_bottom, const EFBCopyFilterCoefficients& filter_coefficients);
virtual void CopyEFBToCacheEntry(TCacheEntry* entry, bool is_depth_copy,
- const EFBRectangle& src_rect, bool scale_by_half,
+ const MathUtil::Rectangle<int>& src_rect, bool scale_by_half,
bool linear_filter, EFBCopyFormat dst_format, bool is_intensity,
float gamma, bool clamp_top, bool clamp_bottom,
const EFBCopyFilterCoefficients& filter_coefficients);
diff --git a/Source/Core/VideoCommon/VideoCommon.h b/Source/Core/VideoCommon/VideoCommon.h
index 32843701c8..e727edd0b0 100644
--- a/Source/Core/VideoCommon/VideoCommon.h
+++ b/Source/Core/VideoCommon/VideoCommon.h
@@ -3,11 +3,6 @@
// Refer to the license.txt file included.
#pragma once
-
-#ifdef _WIN32
-#include <windows.h>
-#endif
-
#include "Common/CommonTypes.h"
#include "Common/MathUtil.h"
@@ -31,34 +26,6 @@ const u32 MAX_XFB_WIDTH = 720;
// that are next to each other in memory (TODO: handle that situation).
const u32 MAX_XFB_HEIGHT = 576;
-// This structure should only be used to represent a rectangle in EFB
-// coordinates, where the origin is at the upper left and the frame dimensions
-// are 640 x 528.
-typedef MathUtil::Rectangle<int> EFBRectangle;
-
-// This structure should only be used to represent a rectangle in standard target
-// coordinates, where the origin is at the lower left and the frame dimensions
-// depend on the resolution settings. Use Renderer::ConvertEFBRectangle to
-// convert an EFBRectangle to a TargetRectangle.
-struct TargetRectangle : public MathUtil::Rectangle<int>
-{
-#ifdef _WIN32
- // Only used by D3D backend.
- const RECT* AsRECT() const
- {
- // The types are binary compatible so this works.
- return (const RECT*)this;
- }
- RECT* AsRECT()
- {
- // The types are binary compatible so this works.
- return (RECT*)this;
- }
-#endif
- TargetRectangle(const MathUtil::Rectangle<int>& other) : MathUtil::Rectangle<int>(other) {}
- TargetRectangle() = default;
-};
-
#ifdef _WIN32
#define PRIM_LOG(...) DEBUG_LOG(VIDEO, __VA_ARGS__)
#else