Skip to content

Commit

Permalink
Merge pull request #1693 from ssakash/framebuff
Browse files Browse the repository at this point in the history
GSDX: Pass total height of framebuffer on GetOutput()
  • Loading branch information
gregory38 committed Jan 7, 2017
2 parents 80be9d9 + 09c7237 commit 648cc2b
Show file tree
Hide file tree
Showing 6 changed files with 19 additions and 4 deletions.
2 changes: 1 addition & 1 deletion plugins/GSdx/GSRendererCL.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -169,7 +169,7 @@ GSTexture* GSRendererCL::GetOutput(int i, int& y_offset)
const GSRegDISPFB& DISPFB = m_regs->DISP[i].DISPFB;

int w = DISPFB.FBW * 64;
int h = GetFrameRect(i).height();
int h = GetFramebufferHeight();

// TODO: round up bottom

Expand Down
2 changes: 1 addition & 1 deletion plugins/GSdx/GSRendererCS.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -345,7 +345,7 @@ GSTexture* GSRendererCS::GetOutput(int i, int& y_offset)
const GSRegDISPFB& DISPFB = m_regs->DISP[i].DISPFB;

int w = DISPFB.FBW * 64;
int h = GetFrameRect(i).height();
int h = GetFramebufferHeight();

// TODO: round up bottom

Expand Down
2 changes: 1 addition & 1 deletion plugins/GSdx/GSRendererHW.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -219,7 +219,7 @@ GSTexture* GSRendererHW::GetOutput(int i, int& y_offset)

GSTexture* t = NULL;

if(GSTextureCache::Target* rt = m_tc->LookupTarget(TEX0, m_width, m_height, GetFrameRect(i).height()))
if(GSTextureCache::Target* rt = m_tc->LookupTarget(TEX0, m_width, m_height, GetFramebufferHeight()))
{
t = rt->m_texture;

Expand Down
2 changes: 1 addition & 1 deletion plugins/GSdx/GSRendererSW.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,7 @@ GSTexture* GSRendererSW::GetOutput(int i, int& y_offset)
const GSRegDISPFB& DISPFB = m_regs->DISP[i].DISPFB;

int w = DISPFB.FBW * 64;
int h = GetFrameRect(i).height();
int h = GetFramebufferHeight();

// TODO: round up bottom

Expand Down
14 changes: 14 additions & 0 deletions plugins/GSdx/GSState.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -473,6 +473,20 @@ GSVector4i GSState::GetFrameRect(int i)
return rectangle;
}

int GSState::GetFramebufferHeight()
{
const GSVector4i output[2] = { GetFrameRect(0), GetFrameRect(1) };
// Framebuffer height is 11 bits max according to GS user manual
const int height_limit = (1 << 11);
int max_height = std::max(output[0].height(), output[1].height());
int frame_memory_height = std::max(max_height, output[0].runion_ordered(output[1]).height() % height_limit);

if (frame_memory_height > 1024)
GL_PERF("Massive framebuffer height detected! (height:%d)", frame_memory_height);

return frame_memory_height;
}

bool GSState::IsEnabled(int i)
{
ASSERT(i >= 0 && i < 2);
Expand Down
1 change: 1 addition & 0 deletions plugins/GSdx/GSState.h
Original file line number Diff line number Diff line change
Expand Up @@ -242,6 +242,7 @@ class GSState : public GSAlignedClass<32>

void ResetHandlers();

int GetFramebufferHeight();
GSVector4i GetDisplayRect(int i = -1, bool merged_rect = false);
GSVector4i GetFrameRect(int i = -1);
GSVideoMode GetVideoMode();
Expand Down

0 comments on commit 648cc2b

Please sign in to comment.