mirror of https://github.com/PCSX2/pcsx2.git
Merge pull request #2122 from PCSX2/target_load
GSdx-TC: Fix load size calculation in target update Fixes #1972 Fixes #2110 Fixes #2138
This commit is contained in:
commit
084530eeca
|
@ -1457,3 +1457,9 @@ enum class CRCHackLevel : int8
|
||||||
Full,
|
Full,
|
||||||
Aggressive
|
Aggressive
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#ifdef ENABLE_ACCURATE_BUFFER_EMULATION
|
||||||
|
const GSVector2i default_rt_size(2048, 2048);
|
||||||
|
#else
|
||||||
|
const GSVector2i default_rt_size(1280, 1024);
|
||||||
|
#endif
|
||||||
|
|
|
@ -23,8 +23,8 @@
|
||||||
#include "GSRendererHW.h"
|
#include "GSRendererHW.h"
|
||||||
|
|
||||||
GSRendererHW::GSRendererHW(GSTextureCache* tc)
|
GSRendererHW::GSRendererHW(GSTextureCache* tc)
|
||||||
: m_width(native_buffer.x)
|
: m_width(default_rt_size.x)
|
||||||
, m_height(native_buffer.y)
|
, m_height(default_rt_size.y)
|
||||||
, m_custom_width(1024)
|
, m_custom_width(1024)
|
||||||
, m_custom_height(1024)
|
, m_custom_height(1024)
|
||||||
, m_reset(false)
|
, m_reset(false)
|
||||||
|
@ -159,8 +159,8 @@ void GSRendererHW::CustomResolutionScaling()
|
||||||
return;
|
return;
|
||||||
|
|
||||||
m_tc->RemovePartial();
|
m_tc->RemovePartial();
|
||||||
m_width = std::max(m_width, native_buffer.x);
|
m_width = std::max(m_width, default_rt_size.x);
|
||||||
m_height = std::max(framebuffer_height[m_large_framebuffer], native_buffer.y);
|
m_height = std::max(framebuffer_height[m_large_framebuffer], default_rt_size.y);
|
||||||
|
|
||||||
std::string overhead = std::to_string(framebuffer_height[1] - framebuffer_height[0]);
|
std::string overhead = std::to_string(framebuffer_height[1] - framebuffer_height[0]);
|
||||||
std::string message = "(Custom resolution) Framebuffer size set to " + std::to_string(crtc_width) + "x" + std::to_string(crtc_height);
|
std::string message = "(Custom resolution) Framebuffer size set to " + std::to_string(crtc_width) + "x" + std::to_string(crtc_height);
|
||||||
|
|
|
@ -30,7 +30,6 @@
|
||||||
class GSRendererHW : public GSRenderer
|
class GSRendererHW : public GSRenderer
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
GSVector2i native_buffer = GSVector2i{1280, 1024};
|
|
||||||
int m_width;
|
int m_width;
|
||||||
int m_height;
|
int m_height;
|
||||||
int m_custom_width;
|
int m_custom_width;
|
||||||
|
|
|
@ -1846,18 +1846,13 @@ void GSTextureCache::Target::Update()
|
||||||
// Alternate
|
// Alternate
|
||||||
// 1/ uses multiple vertex rectangle
|
// 1/ uses multiple vertex rectangle
|
||||||
|
|
||||||
GSVector2i t_size = m_texture->GetSize();
|
GSVector2i t_size = default_rt_size;
|
||||||
GSVector2 t_scale = m_texture->GetScale();
|
|
||||||
|
|
||||||
//Avoids division by zero when calculating texture size.
|
// Ensure buffer width is at least of the minimum required value.
|
||||||
t_scale = GSVector2(std::max(1.0f, t_scale.x), std::max(1.0f, t_scale.y));
|
// Probably not necessary but doesn't hurt to be on the safe side.
|
||||||
t_size.x = lround(static_cast<float>(t_size.x) / t_scale.x);
|
// I've seen some games use buffer sizes over 1024, which might bypass our default limit
|
||||||
t_size.y = lround(static_cast<float>(t_size.y) / t_scale.y);
|
int buffer_width = m_TEX0.TBW << 6;
|
||||||
|
t_size.x = std::max(buffer_width, t_size.x);
|
||||||
// Don't load above the GS memory
|
|
||||||
int max_y_blocks = (MAX_BLOCKS - m_TEX0.TBP0) / std::max(1u, m_TEX0.TBW);
|
|
||||||
int max_y = (max_y_blocks >> 5) * GSLocalMemory::m_psm[m_TEX0.PSM].pgs.y;
|
|
||||||
t_size.y = std::min(t_size.y, max_y);
|
|
||||||
|
|
||||||
GSVector4i r = m_dirty.GetDirtyRectAndClear(m_TEX0, t_size);
|
GSVector4i r = m_dirty.GetDirtyRectAndClear(m_TEX0, t_size);
|
||||||
|
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
|
|
||||||
//#define ENABLE_VTUNE
|
//#define ENABLE_VTUNE
|
||||||
//#define ENABLE_PCRTC_DEBUG
|
//#define ENABLE_PCRTC_DEBUG
|
||||||
|
//#define ENABLE_ACCURATE_BUFFER_EMULATION
|
||||||
#define ENABLE_JIT_RASTERIZER
|
#define ENABLE_JIT_RASTERIZER
|
||||||
|
|
||||||
#define EXTERNAL_SHADER_LOADING 1
|
#define EXTERNAL_SHADER_LOADING 1
|
||||||
|
|
Loading…
Reference in New Issue