Pulp 1.88.0
Cross-platform audio plugin framework
Loading...
Searching...
No Matches
render_pass.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <cstddef>
4#include <cstdint>
5#include <vector>
6
7namespace pulp::render {
8
19
28struct PassStats {
30 int draw_calls = 0;
31 float time_ms = 0;
32
36 float cpu_time_ms() const { return time_ms; }
37};
38
42public:
44 void begin_frame() {
45 passes_.clear();
46 current_pass_ = RenderPassType::background;
47 frame_count_++;
48 total_time_ms_ = 0;
49 over_budget_ = false;
50 // Invalidate last frame's whole-recording GPU sample; a fresh sample
51 // (if any) is fed in via set_gpu_render_time_ms() for this frame. The
52 // value itself is left as-is so a stale read between begin_frame() and
53 // the next set is reported as invalid rather than as a bogus 0.
54 gpu_render_time_valid_ = false;
55 }
56
59 current_pass_ = type;
60 passes_.push_back({type, 0, 0});
61 }
62
64 void end_pass(float time_ms = 0, int draw_calls = 0) {
65 if (!passes_.empty()) {
66 passes_.back().time_ms = time_ms;
67 passes_.back().draw_calls = draw_calls;
68 total_time_ms_ += time_ms;
69 }
70 }
71
73 void end_frame() {
74 // Check if we exceeded budget
75 over_budget_ = (budget_ms_ > 0 && total_time_ms_ > budget_ms_);
76 }
77
89 void set_gpu_render_time_ms(float ms, bool valid) {
90 if (valid && ms >= 0.0f) {
91 gpu_render_time_ms_ = ms;
92 gpu_render_time_valid_ = true;
93 } else {
94 gpu_render_time_valid_ = false;
95 }
96 }
97
101 float gpu_render_time_ms() const { return gpu_render_time_ms_; }
102
106 bool gpu_render_timing_available() const { return gpu_render_time_valid_; }
107
110 void set_budget(float ms) { budget_ms_ = ms; }
111 float budget() const { return budget_ms_; }
112
114 bool over_budget() const { return over_budget_; }
115
117 float total_time_ms() const { return total_time_ms_; }
118
120 const std::vector<PassStats>& passes() const { return passes_; }
121
123 uint64_t frame_count() const { return frame_count_; }
124
126 RenderPassType current_pass() const { return current_pass_; }
127
128private:
129 std::vector<PassStats> passes_;
131 float budget_ms_ = 16.67f; // 60fps default
132 float total_time_ms_ = 0;
133 bool over_budget_ = false;
134 uint64_t frame_count_ = 0;
135 // Frame-level (whole-recording) GPU render time. This is the ONLY GPU-clock
136 // granularity Pulp exposes — per-pass GPU timing is structurally unavailable
137 // under Skia Graphite (see PassStats + set_gpu_render_time_ms()).
138 float gpu_render_time_ms_ = 0.0f;
139 bool gpu_render_time_valid_ = false;
140};
141
142} // namespace pulp::render
Frame-level render pass manager.
Definition render_pass.hpp:41
uint64_t frame_count() const
Frame counter.
Definition render_pass.hpp:123
void end_frame()
End the frame.
Definition render_pass.hpp:73
void end_pass(float time_ms=0, int draw_calls=0)
End the current render pass.
Definition render_pass.hpp:64
void set_gpu_render_time_ms(float ms, bool valid)
Feed the whole-recording GPU render time for this frame.
Definition render_pass.hpp:89
float gpu_render_time_ms() const
Whole-recording GPU render time (ms) for the most recent frame that fed a valid sample.
Definition render_pass.hpp:101
bool gpu_render_timing_available() const
Whether the frame-level whole-recording GPU render time holds a real, current sample.
Definition render_pass.hpp:106
void set_budget(float ms)
Set the per-frame time budget in milliseconds (0 = no budget).
Definition render_pass.hpp:110
void begin_frame()
Begin a new frame. Resets all pass statistics.
Definition render_pass.hpp:44
float budget() const
Definition render_pass.hpp:111
void begin_pass(RenderPassType type)
Begin a render pass of the given type.
Definition render_pass.hpp:58
float total_time_ms() const
Total time for the last frame.
Definition render_pass.hpp:117
bool over_budget() const
Whether the last frame exceeded its time budget.
Definition render_pass.hpp:114
RenderPassType current_pass() const
Current pass type.
Definition render_pass.hpp:126
const std::vector< PassStats > & passes() const
Get statistics for all passes in the last frame.
Definition render_pass.hpp:120
Definition gpu_fwd.hpp:31
RenderPassType
Defines the ordering of render passes in a frame.
Definition render_pass.hpp:12
@ effects
Per-layer effects (blur, bloom).
Definition render_pass.hpp:15
@ overlay
Tooltips, dropdowns, modals (always on top).
Definition render_pass.hpp:16
@ post_effects
Full-frame post-processing (vignette, color grading).
Definition render_pass.hpp:17
@ content
Main widget content (knobs, faders, meters).
Definition render_pass.hpp:14
@ background
Static backgrounds, panel fills.
Definition render_pass.hpp:13
Statistics for a single render pass.
Definition render_pass.hpp:28
RenderPassType type
Definition render_pass.hpp:29
float cpu_time_ms() const
Explicit alias for the CPU number.
Definition render_pass.hpp:36
float time_ms
CPU wall-time around draw submission (ms).
Definition render_pass.hpp:31
int draw_calls
Definition render_pass.hpp:30