Skip to content

Commit

Permalink
rendermanager: adjust displayed render buffer for ati
Browse files Browse the repository at this point in the history
  • Loading branch information
FernetMenta committed Mar 26, 2012
1 parent 7c77d30 commit ab4b60c
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 3 deletions.
15 changes: 12 additions & 3 deletions xbmc/cores/VideoRenderers/RenderManager.cpp
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -54,6 +54,8 @@
#include "../dvdplayer/DVDCodecs/Video/DVDVideoCodec.h" #include "../dvdplayer/DVDCodecs/Video/DVDVideoCodec.h"
#include "../dvdplayer/DVDCodecs/DVDCodecUtils.h" #include "../dvdplayer/DVDCodecs/DVDCodecUtils.h"


#include "windowing/WindowingFactory.h"

#define MAXPRESENTDELAY 0.500 #define MAXPRESENTDELAY 0.500


/* at any point we want an exclusive lock on rendermanager */ /* at any point we want an exclusive lock on rendermanager */
Expand Down Expand Up @@ -332,6 +334,13 @@ unsigned int CXBMCRenderManager::PreInit(CDVDClock *pClock)


UpdateDisplayLatency(); UpdateDisplayLatency();


m_swapCount = 1;
std::string Vendor = g_Windowing.GetRenderVendor();
std::transform(Vendor.begin(), Vendor.end(), Vendor.begin(), ::tolower);
if (Vendor.compare(0, 3, "ati") == 0)
{
m_swapCount = 2;
}
ResetRenderBuffer(); ResetRenderBuffer();
m_bUseBuffering = false; m_bUseBuffering = false;
m_overlays.SetNumBuffers(m_iNumRenderBuffers); m_overlays.SetNumBuffers(m_iNumRenderBuffers);
Expand Down Expand Up @@ -906,9 +915,9 @@ bool CXBMCRenderManager::HasFreeBuffer()
return true; return true;
} }


int outputPlus1 = (m_iOutputRenderBuffer + 1) % m_iNumRenderBuffers; int outputPlusSwap = (m_iOutputRenderBuffer + m_swapCount) % m_iNumRenderBuffers;
if ((m_iOutputRenderBuffer == m_iDisplayedRenderBuffer && !m_bAllRenderBuffersDisplayed) if ((m_iOutputRenderBuffer == m_iDisplayedRenderBuffer && !m_bAllRenderBuffersDisplayed)
|| outputPlus1 == m_iCurrentRenderBuffer) || outputPlusSwap == m_iCurrentRenderBuffer)
return false; return false;
else else
return true; return true;
Expand Down Expand Up @@ -995,7 +1004,7 @@ void CXBMCRenderManager::NotifyDisplayFlip()
// } // }


int last = m_iDisplayedRenderBuffer; int last = m_iDisplayedRenderBuffer;
m_iDisplayedRenderBuffer = (m_iCurrentRenderBuffer + m_iNumRenderBuffers - 1) % m_iNumRenderBuffers; m_iDisplayedRenderBuffer = (m_iCurrentRenderBuffer + m_iNumRenderBuffers - m_swapCount) % m_iNumRenderBuffers;
m_iFlipRequestRenderBuffer = m_iCurrentRenderBuffer; m_iFlipRequestRenderBuffer = m_iCurrentRenderBuffer;


// // we have caught up with output so all buffers are re-usable // // we have caught up with output so all buffers are re-usable
Expand Down
1 change: 1 addition & 0 deletions xbmc/cores/VideoRenderers/RenderManager.h
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -285,6 +285,7 @@ class CXBMCRenderManager
CEvent m_flushEvent; CEvent m_flushEvent;
CDVDClock *m_pClock; CDVDClock *m_pClock;
uint64_t m_rendertime; uint64_t m_rendertime;
unsigned int m_swapCount;


OVERLAY::CRenderer m_overlays; OVERLAY::CRenderer m_overlays;


Expand Down

0 comments on commit ab4b60c

Please sign in to comment.