Merge pull request #11647 from AdmiralCurtiss/perfquery-inconsistency
Fix PerfQuery inconsistencies across backends.
This commit is contained in:
commit
91fca0783e
|
@ -8,6 +8,7 @@
|
||||||
#include "VideoBackends/D3D/D3DBase.h"
|
#include "VideoBackends/D3D/D3DBase.h"
|
||||||
#include "VideoCommon/FramebufferManager.h"
|
#include "VideoCommon/FramebufferManager.h"
|
||||||
#include "VideoCommon/VideoCommon.h"
|
#include "VideoCommon/VideoCommon.h"
|
||||||
|
#include "VideoCommon/VideoConfig.h"
|
||||||
|
|
||||||
namespace DX11
|
namespace DX11
|
||||||
{
|
{
|
||||||
|
@ -96,7 +97,7 @@ u32 PerfQuery::GetQueryResult(PerfQueryType type)
|
||||||
result = m_results[PQG_EFB_COPY_CLOCKS].load(std::memory_order_relaxed);
|
result = m_results[PQG_EFB_COPY_CLOCKS].load(std::memory_order_relaxed);
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result / 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
void PerfQuery::FlushOne()
|
void PerfQuery::FlushOne()
|
||||||
|
@ -114,8 +115,10 @@ void PerfQuery::FlushOne()
|
||||||
// NOTE: Reported pixel metrics should be referenced to native resolution
|
// NOTE: Reported pixel metrics should be referenced to native resolution
|
||||||
// TODO: Dropping the lower 2 bits from this count should be closer to actual
|
// TODO: Dropping the lower 2 bits from this count should be closer to actual
|
||||||
// hardware behavior when drawing triangles.
|
// hardware behavior when drawing triangles.
|
||||||
const u64 native_res_result = result * EFB_WIDTH / g_framebuffer_manager->GetEFBWidth() *
|
u64 native_res_result = result * EFB_WIDTH / g_framebuffer_manager->GetEFBWidth() * EFB_HEIGHT /
|
||||||
EFB_HEIGHT / g_framebuffer_manager->GetEFBHeight();
|
g_framebuffer_manager->GetEFBHeight();
|
||||||
|
if (g_ActiveConfig.iMultisamples > 1)
|
||||||
|
native_res_result /= g_ActiveConfig.iMultisamples;
|
||||||
m_results[entry.query_group].fetch_add(static_cast<u32>(native_res_result),
|
m_results[entry.query_group].fetch_add(static_cast<u32>(native_res_result),
|
||||||
std::memory_order_relaxed);
|
std::memory_order_relaxed);
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
#include "VideoBackends/D3D12/DX12Context.h"
|
#include "VideoBackends/D3D12/DX12Context.h"
|
||||||
#include "VideoCommon/FramebufferManager.h"
|
#include "VideoCommon/FramebufferManager.h"
|
||||||
#include "VideoCommon/VideoCommon.h"
|
#include "VideoCommon/VideoCommon.h"
|
||||||
|
#include "VideoCommon/VideoConfig.h"
|
||||||
|
|
||||||
namespace DX12
|
namespace DX12
|
||||||
{
|
{
|
||||||
|
@ -244,9 +245,11 @@ void PerfQuery::AccumulateQueriesFromBuffer(u32 query_count)
|
||||||
std::memcpy(&result, mapped_ptr + (index * sizeof(PerfQueryDataType)), sizeof(result));
|
std::memcpy(&result, mapped_ptr + (index * sizeof(PerfQueryDataType)), sizeof(result));
|
||||||
|
|
||||||
// NOTE: Reported pixel metrics should be referenced to native resolution
|
// NOTE: Reported pixel metrics should be referenced to native resolution
|
||||||
const u64 native_res_result = static_cast<u64>(result) * EFB_WIDTH /
|
u64 native_res_result = static_cast<u64>(result) * EFB_WIDTH /
|
||||||
g_framebuffer_manager->GetEFBWidth() * EFB_HEIGHT /
|
g_framebuffer_manager->GetEFBWidth() * EFB_HEIGHT /
|
||||||
g_framebuffer_manager->GetEFBHeight();
|
g_framebuffer_manager->GetEFBHeight();
|
||||||
|
if (g_ActiveConfig.iMultisamples > 1)
|
||||||
|
native_res_result /= g_ActiveConfig.iMultisamples;
|
||||||
m_results[entry.query_group].fetch_add(static_cast<u32>(native_res_result),
|
m_results[entry.query_group].fetch_add(static_cast<u32>(native_res_result),
|
||||||
std::memory_order_relaxed);
|
std::memory_order_relaxed);
|
||||||
}
|
}
|
||||||
|
|
|
@ -46,7 +46,7 @@ u32 Metal::PerfQuery::GetQueryResult(PerfQueryType type)
|
||||||
result = m_results[PQG_EFB_COPY_CLOCKS].load(std::memory_order_relaxed);
|
result = m_results[PQG_EFB_COPY_CLOCKS].load(std::memory_order_relaxed);
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result / 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Metal::PerfQuery::FlushResults()
|
void Metal::PerfQuery::FlushResults()
|
||||||
|
|
|
@ -80,7 +80,7 @@ u32 PerfQuery::GetQueryResult(PerfQueryType type)
|
||||||
result = m_results[PQG_EFB_COPY_CLOCKS].load(std::memory_order_relaxed);
|
result = m_results[PQG_EFB_COPY_CLOCKS].load(std::memory_order_relaxed);
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result / 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Implementations
|
// Implementations
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
#include "VideoBackends/Vulkan/VulkanContext.h"
|
#include "VideoBackends/Vulkan/VulkanContext.h"
|
||||||
#include "VideoCommon/FramebufferManager.h"
|
#include "VideoCommon/FramebufferManager.h"
|
||||||
#include "VideoCommon/VideoCommon.h"
|
#include "VideoCommon/VideoCommon.h"
|
||||||
|
#include "VideoCommon/VideoConfig.h"
|
||||||
|
|
||||||
namespace Vulkan
|
namespace Vulkan
|
||||||
{
|
{
|
||||||
|
@ -218,9 +219,11 @@ void PerfQuery::ReadbackQueries(u32 query_count)
|
||||||
entry.has_value = false;
|
entry.has_value = false;
|
||||||
|
|
||||||
// NOTE: Reported pixel metrics should be referenced to native resolution
|
// NOTE: Reported pixel metrics should be referenced to native resolution
|
||||||
const u64 native_res_result = static_cast<u64>(m_query_result_buffer[i]) * EFB_WIDTH /
|
u64 native_res_result = static_cast<u64>(m_query_result_buffer[i]) * EFB_WIDTH /
|
||||||
g_framebuffer_manager->GetEFBWidth() * EFB_HEIGHT /
|
g_framebuffer_manager->GetEFBWidth() * EFB_HEIGHT /
|
||||||
g_framebuffer_manager->GetEFBHeight();
|
g_framebuffer_manager->GetEFBHeight();
|
||||||
|
if (g_ActiveConfig.iMultisamples > 1)
|
||||||
|
native_res_result /= g_ActiveConfig.iMultisamples;
|
||||||
m_results[entry.query_group].fetch_add(static_cast<u32>(native_res_result),
|
m_results[entry.query_group].fetch_add(static_cast<u32>(native_res_result),
|
||||||
std::memory_order_relaxed);
|
std::memory_order_relaxed);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue