display: make PStats clear collectors per-window

This commit is contained in:
rdb 2018-11-19 20:00:59 +01:00
parent c3d52eeee1
commit 8f73f95e79
9 changed files with 23 additions and 9 deletions

View File

@ -1431,7 +1431,11 @@ cull_and_draw_together(GraphicsEngine::Windows wlist,
} }
if (win->begin_frame(GraphicsOutput::FM_render, current_thread)) { if (win->begin_frame(GraphicsOutput::FM_render, current_thread)) {
if (win->is_any_clear_active()) {
GraphicsStateGuardian *gsg = win->get_gsg();
PStatGPUTimer timer(gsg, win->get_clear_window_pcollector(), current_thread);
win->clear(current_thread); win->clear(current_thread);
}
int num_display_regions = win->get_num_active_display_regions(); int num_display_regions = win->get_num_active_display_regions();
for (int i = 0; i < num_display_regions; i++) { for (int i = 0; i < num_display_regions; i++) {
@ -1476,6 +1480,7 @@ cull_and_draw_together(GraphicsOutput *win, DisplayRegion *dr,
gsg->prepare_display_region(&dr_reader); gsg->prepare_display_region(&dr_reader);
if (dr_reader.is_any_clear_active()) { if (dr_reader.is_any_clear_active()) {
PStatGPUTimer timer(gsg, win->get_clear_window_pcollector(), current_thread);
gsg->clear(dr); gsg->clear(dr);
} }
@ -1651,7 +1656,10 @@ draw_bins(const GraphicsEngine::Windows &wlist, Thread *current_thread) {
// a current context for PStatGPUTimer to work. // a current context for PStatGPUTimer to work.
{ {
PStatGPUTimer timer(gsg, win->get_draw_window_pcollector(), current_thread); PStatGPUTimer timer(gsg, win->get_draw_window_pcollector(), current_thread);
if (win->is_any_clear_active()) {
PStatGPUTimer timer(gsg, win->get_clear_window_pcollector(), current_thread);
win->clear(current_thread); win->clear(current_thread);
}
if (display_cat.is_spam()) { if (display_cat.is_spam()) {
display_cat.spam() display_cat.spam()
@ -2015,6 +2023,7 @@ do_draw(GraphicsOutput *win, GraphicsStateGuardian *gsg, DisplayRegion *dr, Thre
win->change_scenes(&dr_reader); win->change_scenes(&dr_reader);
gsg->prepare_display_region(&dr_reader); gsg->prepare_display_region(&dr_reader);
if (dr_reader.is_any_clear_active()) { if (dr_reader.is_any_clear_active()) {
PStatGPUTimer timer(gsg, win->get_clear_window_pcollector(), current_thread);
gsg->clear(dr_reader.get_object()); gsg->clear(dr_reader.get_object());
} }

View File

@ -703,6 +703,15 @@ get_draw_window_pcollector() {
return _draw_window_pcollector; return _draw_window_pcollector;
} }
/**
* Returns a PStatCollector for timing the clear operation for just this
* GraphicsOutput.
*/
INLINE PStatCollector &GraphicsOutput::
get_clear_window_pcollector() {
return _clear_window_pcollector;
}
/** /**
* Display the spam message associated with begin_frame * Display the spam message associated with begin_frame
*/ */

View File

@ -77,6 +77,7 @@ GraphicsOutput(GraphicsEngine *engine, GraphicsPipe *pipe,
_lock("GraphicsOutput"), _lock("GraphicsOutput"),
_cull_window_pcollector(_cull_pcollector, name), _cull_window_pcollector(_cull_pcollector, name),
_draw_window_pcollector(_draw_pcollector, name), _draw_window_pcollector(_draw_pcollector, name),
_clear_window_pcollector(_draw_window_pcollector, "Clear"),
_size(0, 0) _size(0, 0)
{ {
#ifdef DO_MEMORY_USAGE #ifdef DO_MEMORY_USAGE

View File

@ -289,6 +289,7 @@ public:
INLINE PStatCollector &get_cull_window_pcollector(); INLINE PStatCollector &get_cull_window_pcollector();
INLINE PStatCollector &get_draw_window_pcollector(); INLINE PStatCollector &get_draw_window_pcollector();
INLINE PStatCollector &get_clear_window_pcollector();
protected: protected:
virtual void pixel_factor_changed(); virtual void pixel_factor_changed();
@ -409,6 +410,7 @@ protected:
static PStatCollector _draw_pcollector; static PStatCollector _draw_pcollector;
PStatCollector _cull_window_pcollector; PStatCollector _cull_window_pcollector;
PStatCollector _draw_window_pcollector; PStatCollector _draw_window_pcollector;
PStatCollector _clear_window_pcollector;
public: public:
static TypeHandle get_class_type() { static TypeHandle get_class_type() {

View File

@ -92,7 +92,6 @@ PStatCollector GraphicsStateGuardian::_transform_state_pcollector("State changes
PStatCollector GraphicsStateGuardian::_texture_state_pcollector("State changes:Textures"); PStatCollector GraphicsStateGuardian::_texture_state_pcollector("State changes:Textures");
PStatCollector GraphicsStateGuardian::_draw_primitive_pcollector("Draw:Primitive:Draw"); PStatCollector GraphicsStateGuardian::_draw_primitive_pcollector("Draw:Primitive:Draw");
PStatCollector GraphicsStateGuardian::_draw_set_state_pcollector("Draw:Set State"); PStatCollector GraphicsStateGuardian::_draw_set_state_pcollector("Draw:Set State");
PStatCollector GraphicsStateGuardian::_clear_pcollector("Draw:Clear");
PStatCollector GraphicsStateGuardian::_flush_pcollector("Draw:Flush"); PStatCollector GraphicsStateGuardian::_flush_pcollector("Draw:Flush");
PStatCollector GraphicsStateGuardian::_compute_dispatch_pcollector("Draw:Compute dispatch"); PStatCollector GraphicsStateGuardian::_compute_dispatch_pcollector("Draw:Compute dispatch");

View File

@ -685,7 +685,6 @@ public:
static PStatCollector _texture_state_pcollector; static PStatCollector _texture_state_pcollector;
static PStatCollector _draw_primitive_pcollector; static PStatCollector _draw_primitive_pcollector;
static PStatCollector _draw_set_state_pcollector; static PStatCollector _draw_set_state_pcollector;
static PStatCollector _clear_pcollector;
static PStatCollector _flush_pcollector; static PStatCollector _flush_pcollector;
static PStatCollector _compute_dispatch_pcollector; static PStatCollector _compute_dispatch_pcollector;
static PStatCollector _wait_occlusion_pcollector; static PStatCollector _wait_occlusion_pcollector;

View File

@ -113,8 +113,6 @@ clear(Thread *current_thread) {
<< get_name() << " " << (void *)this << "\n"; << get_name() << " " << (void *)this << "\n";
} }
PStatGPUTimer timer(glgsg, glgsg->_clear_pcollector);
// Disable the scissor test, so we can clear the whole buffer. // Disable the scissor test, so we can clear the whole buffer.
glDisable(GL_SCISSOR_TEST); glDisable(GL_SCISSOR_TEST);
glgsg->_scissor_enabled = false; glgsg->_scissor_enabled = false;

View File

@ -3405,7 +3405,6 @@ finish() {
*/ */
void CLP(GraphicsStateGuardian):: void CLP(GraphicsStateGuardian)::
clear(DrawableRegion *clearable) { clear(DrawableRegion *clearable) {
PStatGPUTimer timer(this, _clear_pcollector);
report_my_gl_errors(); report_my_gl_errors();
if (!clearable->is_any_clear_active()) { if (!clearable->is_any_clear_active()) {

View File

@ -202,8 +202,6 @@ make_geom_munger(const RenderState *state, Thread *current_thread) {
*/ */
void TinyGraphicsStateGuardian:: void TinyGraphicsStateGuardian::
clear(DrawableRegion *clearable) { clear(DrawableRegion *clearable) {
PStatTimer timer(_clear_pcollector);
if ((!clearable->get_clear_color_active())&& if ((!clearable->get_clear_color_active())&&
(!clearable->get_clear_depth_active())&& (!clearable->get_clear_depth_active())&&
(!clearable->get_clear_stencil_active())) { (!clearable->get_clear_stencil_active())) {