Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Add in the Mali driver bug so we can call glFlush every flush. It see…
…mingly is quicker calling flush every time instead of every n times.
  • Loading branch information
Sonicadvance1 committed Jul 25, 2013
1 parent 7a6eeb5 commit 672871b
Show file tree
Hide file tree
Showing 4 changed files with 26 additions and 0 deletions.
6 changes: 6 additions & 0 deletions Source/Core/VideoCommon/Src/DriverDetails.cpp
Expand Up @@ -31,6 +31,9 @@ namespace DriverDetails
{BUG_BROKENINFOLOG, 300, -1.0, -1.0},
{BUG_BROKENBUFFERS, 300, 14.0, -1.0},
};
BugInfo m_armbugs[] = {
{BUG_MALIBROKENBUFFERS, 600, -1.0, -1.0},
};

std::map<std::pair<Vendor, Bug>, BugInfo> m_bugs;

Expand All @@ -43,6 +46,9 @@ namespace DriverDetails
for (unsigned int a = 0; a < (sizeof(m_qualcommbugs) / sizeof(BugInfo)); ++a)
m_bugs[std::make_pair(m_vendor, m_qualcommbugs[a].m_bug)] = m_qualcommbugs[a];
break;
case VENDOR_ARM:
for (unsigned int a = 0; a < (sizeof(m_armbugs) / sizeof(BugInfo)); ++a)
m_bugs[std::make_pair(m_vendor, m_armbugs[a].m_bug)] = m_armbugs[a];
default:
break;
}
Expand Down
10 changes: 10 additions & 0 deletions Source/Core/VideoCommon/Src/DriverDetails.h
Expand Up @@ -62,6 +62,16 @@ namespace DriverDetails
// The "workaround" is calling swapbuffers every single time we flush
// This causes flickering, but it is the only known way to work around it
BUG_BROKENBUFFERS,
// Bug: Uploading data without swapping causes issues
// Affected devices: Mali-T6xx
// Started Version: -1
// Ended Version: -1
// This is similar to the Adreno rendering bug where uploading the data
// to the GPU causes the device to quickly run out of RAM.
// Unlike the Adreno workaround though, this can be fixed by calling
// either glFlush() or glFinish() after flushing.
// glFlush tends to take 0-1Ms on each call
BUG_MALIBROKENBUFFERS,
};

// Initializes our internal vendor, device family, and driver version
Expand Down
8 changes: 8 additions & 0 deletions Source/Plugins/Plugin_VideoOGL/Src/Render.cpp
Expand Up @@ -307,6 +307,12 @@ void InitDriverInfo()
sscanf(g_ogl_config.gl_version, "OpenGL ES %lg V@%lg", &glVersion, &version);
}
break;
case DriverDetails::VENDOR_ARM:
if (std::string::npos != srenderer.find("Mali-T6"))
devfamily = 600;
else if(std::string::npos != srenderer.find("Mali-4"))
devfamily = 400;
break;
// We don't care about these
default:
break;
Expand Down Expand Up @@ -664,6 +670,7 @@ void Renderer::DrawDebugInfo()
if (g_ActiveConfig.bShowInputDisplay)
p+=sprintf(p, "%s", Movie::GetInputDisplay().c_str());

#ifndef USE_GLES3
if (g_ActiveConfig.bShowEFBCopyRegions)
{
// Set Line Size
Expand Down Expand Up @@ -783,6 +790,7 @@ void Renderer::DrawDebugInfo()
// Clear stored regions
stats.efb_regions.clear();
}
#endif

if (g_ActiveConfig.bOverlayStats)
p = Statistics::ToString(p);
Expand Down
2 changes: 2 additions & 0 deletions Source/Plugins/Plugin_VideoOGL/Src/VertexManager.cpp
Expand Up @@ -270,6 +270,8 @@ void VertexManager::vFlush()
Draw(stride);
if (DriverDetails::HasBug(DriverDetails::BUG_BROKENBUFFERS))
GLInterface->Swap();
if(DriverDetails::HasBug(DriverDetails::BUG_MALIBROKENBUFFERS))
glFlush();
g_perf_query->DisableQuery(bpmem.zcontrol.early_ztest ? PQG_ZCOMP_ZCOMPLOC : PQG_ZCOMP);
//ERROR_LOG(VIDEO, "PerfQuery result: %d", g_perf_query->GetQueryResult(bpmem.zcontrol.early_ztest ? PQ_ZCOMP_OUTPUT_ZCOMPLOC : PQ_ZCOMP_OUTPUT));

Expand Down

0 comments on commit 672871b

Please sign in to comment.