mesa/st: swap order of clear() and clear_with_quad()
authorRob Clark <robdclark@gmail.com>
Tue, 13 Nov 2018 18:40:58 +0000 (13:40 -0500)
committerRob Clark <robdclark@gmail.com>
Tue, 27 Nov 2018 20:44:02 +0000 (15:44 -0500)
If we can't clear all the buffers with pctx->clear() (say, for example,
because of ColorMask), push the buffers we *can* clear with pctx->clear()
first.  Tilers want to see clears coming before draws to enable fast-
paths, and clearing one of the attachments with a quad-draw first
confuses that logic.

Signed-off-by: Rob Clark <robdclark@gmail.com>
Reviewed-by: Eric Anholt <eric@anholt.net>
src/mesa/state_tracker/st_cb_clear.c

index 22e85019764ae5ab36c4430914f796b74288e0de..3b51bd2c8a7217a131f6487c4410ed95376637ac 100644 (file)
@@ -442,9 +442,6 @@ st_Clear(struct gl_context *ctx, GLbitfield mask)
     * use pipe->clear. We want to always use pipe->clear for the other
     * renderbuffers, because it's likely to be faster.
     */
-   if (quad_buffers) {
-      clear_with_quad(ctx, quad_buffers);
-   }
    if (clear_buffers) {
       /* We can't translate the clear color to the colorbuffer format,
        * because different colorbuffers may have different formats.
@@ -453,6 +450,9 @@ st_Clear(struct gl_context *ctx, GLbitfield mask)
                       (union pipe_color_union*)&ctx->Color.ClearColor,
                       ctx->Depth.Clear, ctx->Stencil.Clear);
    }
+   if (quad_buffers) {
+      clear_with_quad(ctx, quad_buffers);
+   }
    if (mask & BUFFER_BIT_ACCUM)
       _mesa_clear_accum_buffer(ctx);
 }