diff options
| author | Stenzek <stenzek@gmail.com> | 2019-04-16 00:47:46 +1000 |
|---|---|---|
| committer | Stenzek <stenzek@gmail.com> | 2019-04-21 14:28:14 +1000 |
| commit | f8c1ba409cdfc41e60d27b0fc002a8fd79f9c73e (patch) | |
| tree | c3814adea3fb269649fd18e1afd3c8764be5c491 /Source/Core/VideoCommon | |
| parent | 6ea43235d54a18b70529cb6d0d740e0f8f9c34ea (diff) | |
Replace EFBRectangle/TargetRectangle with MathUtil::Rectangle
Diffstat (limited to 'Source/Core/VideoCommon')
| -rw-r--r-- | Source/Core/VideoCommon/BPFunctions.cpp | 6 | ||||
| -rw-r--r-- | Source/Core/VideoCommon/BPFunctions.h | 2 | ||||
| -rw-r--r-- | Source/Core/VideoCommon/BPStructs.cpp | 2 | ||||
| -rw-r--r-- | Source/Core/VideoCommon/RenderBase.cpp | 26 | ||||
| -rw-r--r-- | Source/Core/VideoCommon/RenderBase.h | 21 | ||||
| -rw-r--r-- | Source/Core/VideoCommon/TextureCacheBase.cpp | 19 | ||||
| -rw-r--r-- | Source/Core/VideoCommon/TextureCacheBase.h | 15 | ||||
| -rw-r--r-- | Source/Core/VideoCommon/VideoCommon.h | 33 |
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 |
