mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-04-01 01:20:40 +00:00
Add in the Mali driver bug so we can call glFlush every flush. It seemingly is quicker calling flush every time instead of every n times.
This commit is contained in:
parent
7a6eeb5fbd
commit
672871b3be
@ -31,6 +31,9 @@ namespace DriverDetails
|
|||||||
{BUG_BROKENINFOLOG, 300, -1.0, -1.0},
|
{BUG_BROKENINFOLOG, 300, -1.0, -1.0},
|
||||||
{BUG_BROKENBUFFERS, 300, 14.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;
|
std::map<std::pair<Vendor, Bug>, BugInfo> m_bugs;
|
||||||
|
|
||||||
@ -43,6 +46,9 @@ namespace DriverDetails
|
|||||||
for (unsigned int a = 0; a < (sizeof(m_qualcommbugs) / sizeof(BugInfo)); ++a)
|
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];
|
m_bugs[std::make_pair(m_vendor, m_qualcommbugs[a].m_bug)] = m_qualcommbugs[a];
|
||||||
break;
|
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:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -62,6 +62,16 @@ namespace DriverDetails
|
|||||||
// The "workaround" is calling swapbuffers every single time we flush
|
// The "workaround" is calling swapbuffers every single time we flush
|
||||||
// This causes flickering, but it is the only known way to work around it
|
// This causes flickering, but it is the only known way to work around it
|
||||||
BUG_BROKENBUFFERS,
|
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
|
// Initializes our internal vendor, device family, and driver version
|
||||||
|
@ -307,6 +307,12 @@ void InitDriverInfo()
|
|||||||
sscanf(g_ogl_config.gl_version, "OpenGL ES %lg V@%lg", &glVersion, &version);
|
sscanf(g_ogl_config.gl_version, "OpenGL ES %lg V@%lg", &glVersion, &version);
|
||||||
}
|
}
|
||||||
break;
|
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
|
// We don't care about these
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
@ -664,6 +670,7 @@ void Renderer::DrawDebugInfo()
|
|||||||
if (g_ActiveConfig.bShowInputDisplay)
|
if (g_ActiveConfig.bShowInputDisplay)
|
||||||
p+=sprintf(p, "%s", Movie::GetInputDisplay().c_str());
|
p+=sprintf(p, "%s", Movie::GetInputDisplay().c_str());
|
||||||
|
|
||||||
|
#ifndef USE_GLES3
|
||||||
if (g_ActiveConfig.bShowEFBCopyRegions)
|
if (g_ActiveConfig.bShowEFBCopyRegions)
|
||||||
{
|
{
|
||||||
// Set Line Size
|
// Set Line Size
|
||||||
@ -783,6 +790,7 @@ void Renderer::DrawDebugInfo()
|
|||||||
// Clear stored regions
|
// Clear stored regions
|
||||||
stats.efb_regions.clear();
|
stats.efb_regions.clear();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if (g_ActiveConfig.bOverlayStats)
|
if (g_ActiveConfig.bOverlayStats)
|
||||||
p = Statistics::ToString(p);
|
p = Statistics::ToString(p);
|
||||||
|
@ -270,6 +270,8 @@ void VertexManager::vFlush()
|
|||||||
Draw(stride);
|
Draw(stride);
|
||||||
if (DriverDetails::HasBug(DriverDetails::BUG_BROKENBUFFERS))
|
if (DriverDetails::HasBug(DriverDetails::BUG_BROKENBUFFERS))
|
||||||
GLInterface->Swap();
|
GLInterface->Swap();
|
||||||
|
if(DriverDetails::HasBug(DriverDetails::BUG_MALIBROKENBUFFERS))
|
||||||
|
glFlush();
|
||||||
g_perf_query->DisableQuery(bpmem.zcontrol.early_ztest ? PQG_ZCOMP_ZCOMPLOC : PQG_ZCOMP);
|
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));
|
//ERROR_LOG(VIDEO, "PerfQuery result: %d", g_perf_query->GetQueryResult(bpmem.zcontrol.early_ztest ? PQ_ZCOMP_OUTPUT_ZCOMPLOC : PQ_ZCOMP_OUTPUT));
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user