Respect ShouldEmulate() in PerfQuery implementations for DX11 and OGL (ugly implem, but the current state of VideoCommon does not allow much better)

This commit is contained in:
Pierre Bourdon 2013-08-11 17:13:29 +02:00
parent c322bedf0e
commit e60e50a198
2 changed files with 42 additions and 0 deletions

View File

@ -28,6 +28,9 @@ PerfQuery::~PerfQuery()
void PerfQuery::EnableQuery(PerfQueryGroup type) void PerfQuery::EnableQuery(PerfQueryGroup type)
{ {
if (!ShouldEmulate())
return;
// Is this sane? // Is this sane?
if (m_query_count > ARRAYSIZE(m_query_buffer) / 2) if (m_query_count > ARRAYSIZE(m_query_buffer) / 2)
WeakFlush(); WeakFlush();
@ -53,6 +56,9 @@ void PerfQuery::EnableQuery(PerfQueryGroup type)
void PerfQuery::DisableQuery(PerfQueryGroup type) void PerfQuery::DisableQuery(PerfQueryGroup type)
{ {
if (!ShouldEmulate())
return;
// stop query // stop query
if (type == PQG_ZCOMP_ZCOMPLOC || type == PQG_ZCOMP) if (type == PQG_ZCOMP_ZCOMPLOC || type == PQG_ZCOMP)
{ {
@ -69,6 +75,9 @@ void PerfQuery::ResetQuery()
u32 PerfQuery::GetQueryResult(PerfQueryType type) u32 PerfQuery::GetQueryResult(PerfQueryType type)
{ {
if (!ShouldEmulate())
return 0;
u32 result = 0; u32 result = 0;
if (type == PQ_ZCOMP_INPUT_ZCOMPLOC || type == PQ_ZCOMP_OUTPUT_ZCOMPLOC) if (type == PQ_ZCOMP_INPUT_ZCOMPLOC || type == PQ_ZCOMP_OUTPUT_ZCOMPLOC)
@ -93,6 +102,9 @@ u32 PerfQuery::GetQueryResult(PerfQueryType type)
void PerfQuery::FlushOne() void PerfQuery::FlushOne()
{ {
if (!ShouldEmulate())
return;
auto& entry = m_query_buffer[m_query_read_pos]; auto& entry = m_query_buffer[m_query_read_pos];
UINT64 result = 0; UINT64 result = 0;
@ -113,12 +125,18 @@ void PerfQuery::FlushOne()
// TODO: could selectively flush things, but I don't think that will do much // TODO: could selectively flush things, but I don't think that will do much
void PerfQuery::FlushResults() void PerfQuery::FlushResults()
{ {
if (!ShouldEmulate())
return;
while (!IsFlushed()) while (!IsFlushed())
FlushOne(); FlushOne();
} }
void PerfQuery::WeakFlush() void PerfQuery::WeakFlush()
{ {
if (!ShouldEmulate())
return;
while (!IsFlushed()) while (!IsFlushed())
{ {
auto& entry = m_query_buffer[m_query_read_pos]; auto& entry = m_query_buffer[m_query_read_pos];
@ -143,6 +161,9 @@ void PerfQuery::WeakFlush()
bool PerfQuery::IsFlushed() const bool PerfQuery::IsFlushed() const
{ {
if (!ShouldEmulate())
return true;
return 0 == m_query_count; return 0 == m_query_count;
} }

View File

@ -23,6 +23,9 @@ PerfQuery::~PerfQuery()
void PerfQuery::EnableQuery(PerfQueryGroup type) void PerfQuery::EnableQuery(PerfQueryGroup type)
{ {
if (!ShouldEmulate())
return;
// Is this sane? // Is this sane?
if (m_query_count > ARRAYSIZE(m_query_buffer) / 2) if (m_query_count > ARRAYSIZE(m_query_buffer) / 2)
WeakFlush(); WeakFlush();
@ -47,6 +50,9 @@ void PerfQuery::EnableQuery(PerfQueryGroup type)
void PerfQuery::DisableQuery(PerfQueryGroup type) void PerfQuery::DisableQuery(PerfQueryGroup type)
{ {
if (!ShouldEmulate())
return;
// stop query // stop query
if (type == PQG_ZCOMP_ZCOMPLOC || type == PQG_ZCOMP) if (type == PQG_ZCOMP_ZCOMPLOC || type == PQG_ZCOMP)
{ {
@ -56,11 +62,17 @@ void PerfQuery::DisableQuery(PerfQueryGroup type)
bool PerfQuery::IsFlushed() const bool PerfQuery::IsFlushed() const
{ {
if (!ShouldEmulate())
return true;
return 0 == m_query_count; return 0 == m_query_count;
} }
void PerfQuery::FlushOne() void PerfQuery::FlushOne()
{ {
if (!ShouldEmulate())
return;
auto& entry = m_query_buffer[m_query_read_pos]; auto& entry = m_query_buffer[m_query_read_pos];
GLuint result = 0; GLuint result = 0;
@ -76,12 +88,18 @@ void PerfQuery::FlushOne()
// TODO: could selectively flush things, but I don't think that will do much // TODO: could selectively flush things, but I don't think that will do much
void PerfQuery::FlushResults() void PerfQuery::FlushResults()
{ {
if (!ShouldEmulate())
return;
while (!IsFlushed()) while (!IsFlushed())
FlushOne(); FlushOne();
} }
void PerfQuery::WeakFlush() void PerfQuery::WeakFlush()
{ {
if (!ShouldEmulate())
return;
while (!IsFlushed()) while (!IsFlushed())
{ {
auto& entry = m_query_buffer[m_query_read_pos]; auto& entry = m_query_buffer[m_query_read_pos];
@ -108,6 +126,9 @@ void PerfQuery::ResetQuery()
u32 PerfQuery::GetQueryResult(PerfQueryType type) u32 PerfQuery::GetQueryResult(PerfQueryType type)
{ {
if (!ShouldEmulate())
return 0;
u32 result = 0; u32 result = 0;
if (type == PQ_ZCOMP_INPUT_ZCOMPLOC || type == PQ_ZCOMP_OUTPUT_ZCOMPLOC) if (type == PQ_ZCOMP_INPUT_ZCOMPLOC || type == PQ_ZCOMP_OUTPUT_ZCOMPLOC)