st/mesa: Skip scissor rect updates when scissor is entirely disabled.
authorKenneth Graunke <kenneth@whitecape.org>
Wed, 31 Jul 2019 01:07:17 +0000 (18:07 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Wed, 31 Jul 2019 15:33:50 +0000 (08:33 -0700)
If any scissor rectangles are enabled, then we need to set proper
scissor rectangles for all viewports.  But if the scissor test is
entirely disabled, then we can skip updating any scissor rectangles.

Without this step, we were updating the scissor rectangles based on
the current framebuffer size.  So if an app rendered to a variety of
render targets at different sizes, with scissor test disabled each
time, we'd still be continually updating the scissor rectangles,
even though it's not necessary.

In Civilization VI, this drops us from 310-350 set_scissor_state
calls per frame to 0, as it doesn't appear to use scissor testing.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
src/mesa/state_tracker/st_atom_scissor.c

index 04135a3a3408a143210e851bb07e592fa140e04c..f0546df6cb3b2fee1311314f886a7bfd31fef5d4 100644 (file)
@@ -54,6 +54,9 @@ st_update_scissor( struct st_context *st )
    unsigned i;
    bool changed = false;
 
+   if (!ctx->Scissor.EnableFlags)
+      return;
+
    for (i = 0 ; i < st->state.num_viewports; i++) {
       scissor[i].minx = 0;
       scissor[i].miny = 0;