summaryrefslogtreecommitdiffstats
path: root/src/video_core/renderer_opengl/gl_query_cache.cpp
blob: 1c7dc999adacf3acd3a954fa94fd970f394ed05e (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
// Copyright 2019 yuzu Emulator Project
// Licensed under GPLv2 or any later version
// Refer to the license.txt file included.

#include <glad/glad.h>

#include "video_core/renderer_opengl/gl_query_cache.h"

namespace OpenGL {

HostCounter::HostCounter(GLenum target) {
    query.Create(target);
}

HostCounter::~HostCounter() = default;

void HostCounter::UpdateState(bool enabled) {
    if (enabled) {
        Enable();
    } else {
        Disable();
    }
}

void HostCounter::Reset() {
    counter = 0;
    Disable();
}

u64 HostCounter::Query() {
    if (!is_beginned) {
        return counter;
    }
    Disable();
    u64 value;
    glGetQueryObjectui64v(query.handle, GL_QUERY_RESULT, &value);
    Enable();

    counter += value;
    return counter;
}

void HostCounter::Enable() {
    if (is_beginned) {
        return;
    }
    is_beginned = true;
    glBeginQuery(GL_SAMPLES_PASSED, query.handle);
}

void HostCounter::Disable() {
    if (!is_beginned) {
        return;
    }
    glEndQuery(GL_SAMPLES_PASSED);
    is_beginned = false;
}

} // namespace OpenGL