diff --git a/Source/Core/VideoBackends/D3D/D3DPerfQuery.cpp b/Source/Core/VideoBackends/D3D/D3DPerfQuery.cpp index fe34a8ff45..f2ae05bb99 100644 --- a/Source/Core/VideoBackends/D3D/D3DPerfQuery.cpp +++ b/Source/Core/VideoBackends/D3D/D3DPerfQuery.cpp @@ -8,6 +8,7 @@ #include "VideoBackends/D3D/D3DBase.h" #include "VideoCommon/FramebufferManager.h" #include "VideoCommon/VideoCommon.h" +#include "VideoCommon/VideoConfig.h" namespace DX11 { @@ -96,7 +97,7 @@ u32 PerfQuery::GetQueryResult(PerfQueryType type) result = m_results[PQG_EFB_COPY_CLOCKS].load(std::memory_order_relaxed); } - return result; + return result / 4; } void PerfQuery::FlushOne() @@ -114,8 +115,10 @@ void PerfQuery::FlushOne() // NOTE: Reported pixel metrics should be referenced to native resolution // TODO: Dropping the lower 2 bits from this count should be closer to actual // hardware behavior when drawing triangles. - const u64 native_res_result = result * EFB_WIDTH / g_framebuffer_manager->GetEFBWidth() * - EFB_HEIGHT / g_framebuffer_manager->GetEFBHeight(); + u64 native_res_result = result * EFB_WIDTH / g_framebuffer_manager->GetEFBWidth() * EFB_HEIGHT / + g_framebuffer_manager->GetEFBHeight(); + if (g_ActiveConfig.iMultisamples > 1) + native_res_result /= g_ActiveConfig.iMultisamples; m_results[entry.query_group].fetch_add(static_cast(native_res_result), std::memory_order_relaxed); diff --git a/Source/Core/VideoBackends/D3D12/D3D12PerfQuery.cpp b/Source/Core/VideoBackends/D3D12/D3D12PerfQuery.cpp index 933f118ce9..da9a6e6546 100644 --- a/Source/Core/VideoBackends/D3D12/D3D12PerfQuery.cpp +++ b/Source/Core/VideoBackends/D3D12/D3D12PerfQuery.cpp @@ -13,6 +13,7 @@ #include "VideoBackends/D3D12/DX12Context.h" #include "VideoCommon/FramebufferManager.h" #include "VideoCommon/VideoCommon.h" +#include "VideoCommon/VideoConfig.h" namespace DX12 { @@ -244,9 +245,11 @@ void PerfQuery::AccumulateQueriesFromBuffer(u32 query_count) std::memcpy(&result, mapped_ptr + (index * sizeof(PerfQueryDataType)), sizeof(result)); // NOTE: Reported pixel metrics should be referenced to native resolution - const u64 native_res_result = static_cast(result) * EFB_WIDTH / - g_framebuffer_manager->GetEFBWidth() * EFB_HEIGHT / - g_framebuffer_manager->GetEFBHeight(); + u64 native_res_result = static_cast(result) * EFB_WIDTH / + g_framebuffer_manager->GetEFBWidth() * EFB_HEIGHT / + g_framebuffer_manager->GetEFBHeight(); + if (g_ActiveConfig.iMultisamples > 1) + native_res_result /= g_ActiveConfig.iMultisamples; m_results[entry.query_group].fetch_add(static_cast(native_res_result), std::memory_order_relaxed); } diff --git a/Source/Core/VideoBackends/Metal/MTLPerfQuery.mm b/Source/Core/VideoBackends/Metal/MTLPerfQuery.mm index 76bddc1dce..37036f28aa 100644 --- a/Source/Core/VideoBackends/Metal/MTLPerfQuery.mm +++ b/Source/Core/VideoBackends/Metal/MTLPerfQuery.mm @@ -46,7 +46,7 @@ u32 Metal::PerfQuery::GetQueryResult(PerfQueryType type) result = m_results[PQG_EFB_COPY_CLOCKS].load(std::memory_order_relaxed); } - return result; + return result / 4; } void Metal::PerfQuery::FlushResults() diff --git a/Source/Core/VideoBackends/OGL/OGLPerfQuery.cpp b/Source/Core/VideoBackends/OGL/OGLPerfQuery.cpp index 6303464251..b7e7cc0301 100644 --- a/Source/Core/VideoBackends/OGL/OGLPerfQuery.cpp +++ b/Source/Core/VideoBackends/OGL/OGLPerfQuery.cpp @@ -80,7 +80,7 @@ u32 PerfQuery::GetQueryResult(PerfQueryType type) result = m_results[PQG_EFB_COPY_CLOCKS].load(std::memory_order_relaxed); } - return result; + return result / 4; } // Implementations diff --git a/Source/Core/VideoBackends/Vulkan/VKPerfQuery.cpp b/Source/Core/VideoBackends/Vulkan/VKPerfQuery.cpp index d16c8c379b..c6aee79327 100644 --- a/Source/Core/VideoBackends/Vulkan/VKPerfQuery.cpp +++ b/Source/Core/VideoBackends/Vulkan/VKPerfQuery.cpp @@ -17,6 +17,7 @@ #include "VideoBackends/Vulkan/VulkanContext.h" #include "VideoCommon/FramebufferManager.h" #include "VideoCommon/VideoCommon.h" +#include "VideoCommon/VideoConfig.h" namespace Vulkan { @@ -218,9 +219,11 @@ void PerfQuery::ReadbackQueries(u32 query_count) entry.has_value = false; // NOTE: Reported pixel metrics should be referenced to native resolution - const u64 native_res_result = static_cast(m_query_result_buffer[i]) * EFB_WIDTH / - g_framebuffer_manager->GetEFBWidth() * EFB_HEIGHT / - g_framebuffer_manager->GetEFBHeight(); + u64 native_res_result = static_cast(m_query_result_buffer[i]) * EFB_WIDTH / + g_framebuffer_manager->GetEFBWidth() * EFB_HEIGHT / + g_framebuffer_manager->GetEFBHeight(); + if (g_ActiveConfig.iMultisamples > 1) + native_res_result /= g_ActiveConfig.iMultisamples; m_results[entry.query_group].fetch_add(static_cast(native_res_result), std::memory_order_relaxed); }