gl_query_cache: Optimize query cache

Use a custom cache instead of relying on a ranged cache.
This commit is contained in:
ReinUsesLisp 2019-11-28 02:15:34 -03:00
parent aae8c180cb
commit 73d2d3342d
6 changed files with 217 additions and 79 deletions

View file

@ -4,6 +4,7 @@
#include <cinttypes>
#include <cstring>
#include <optional>
#include "common/assert.h"
#include "core/core.h"
#include "core/core_timing.h"
@ -16,6 +17,8 @@
namespace Tegra::Engines {
using VideoCore::QueryType;
/// First register id that is actually a Macro call.
constexpr u32 MacroRegistersStart = 0xE00;
@ -614,10 +617,11 @@ void Maxwell3D::ProcessQueryCondition() {
void Maxwell3D::ProcessCounterReset() {
switch (regs.counter_reset) {
case Regs::CounterReset::SampleCnt:
rasterizer.ResetCounter(VideoCore::QueryType::SamplesPassed);
rasterizer.ResetCounter(QueryType::SamplesPassed);
break;
default:
UNIMPLEMENTED_MSG("counter_reset={}", static_cast<u32>(regs.counter_reset));
LOG_WARNING(Render_OpenGL, "Unimplemented counter reset={}",
static_cast<int>(regs.counter_reset));
break;
}
}
@ -670,7 +674,8 @@ std::optional<u64> Maxwell3D::GetQueryResult() {
return 0;
case Regs::QuerySelect::SamplesPassed:
// Deferred.
rasterizer.Query(regs.query.QueryAddress(), VideoCore::QueryType::SamplesPassed);
rasterizer.Query(regs.query.QueryAddress(), VideoCore::QueryType::SamplesPassed,
system.GPU().GetTicks());
return {};
default:
UNIMPLEMENTED_MSG("Unimplemented query select type {}",