mesa: Track whether a performance monitor has ever ended.

If a monitor has ended, it means a result should eventually become
available, pending some flushing.

This is distinct from !m->Active; if a monitor has not been started,
then m->Active == false and m->Ended == false.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
This commit is contained in:
Kenneth Graunke 2013-11-13 17:12:37 -08:00
parent a6712f5109
commit bde5e4a1e6
2 changed files with 13 additions and 1 deletions

View file

@ -1848,8 +1848,16 @@ struct gl_perf_monitor_object
{
GLuint Name;
/** True if the monitor is currently active (Begin called but not End). */
GLboolean Active;
/**
* True if the monitor has ended.
*
* This is distinct from !Active because it may never have began.
*/
GLboolean Ended;
/**
* A list of groups with currently active counters.
*

View file

@ -359,8 +359,10 @@ _mesa_DeletePerfMonitorsAMD(GLsizei n, GLuint *monitors)
if (m) {
/* Give the driver a chance to stop the monitor if it's active. */
if (m->Active)
if (m->Active) {
ctx->Driver.ResetPerfMonitor(ctx, m);
m->Ended = false;
}
_mesa_HashRemove(ctx->PerfMonitor.Monitors, monitors[i]);
ralloc_free(m->ActiveGroups);
@ -478,6 +480,7 @@ _mesa_BeginPerfMonitorAMD(GLuint monitor)
*/
if (ctx->Driver.BeginPerfMonitor(ctx, m)) {
m->Active = true;
m->Ended = false;
} else {
_mesa_error(ctx, GL_INVALID_OPERATION,
"glBeginPerfMonitor(driver unable to begin monitoring)");
@ -507,6 +510,7 @@ _mesa_EndPerfMonitorAMD(GLuint monitor)
ctx->Driver.EndPerfMonitor(ctx, m);
m->Active = false;
m->Ended = true;
}
/**