diff options
Diffstat (limited to 'src/mesa/drivers/dri/i965/brw_clear.c')
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_clear.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_clear.c b/src/mesa/drivers/dri/i965/brw_clear.c index ce40e52d461..53d8e5400ef 100644 --- a/src/mesa/drivers/dri/i965/brw_clear.c +++ b/src/mesa/drivers/dri/i965/brw_clear.c @@ -77,6 +77,18 @@ debug_mask(const char *name, GLbitfield mask) } /** + * Returns true if the scissor is a noop (cuts out nothing). + */ +static bool +noop_scissor(struct gl_context *ctx, struct gl_framebuffer *fb) +{ + return ctx->Scissor.X <= 0 && + ctx->Scissor.Y <= 0 && + ctx->Scissor.Width >= fb->Width && + ctx->Scissor.Height >= fb->Height; +} + +/** * Implements fast depth clears on gen6+. * * Fast clears basically work by setting a flag in each of the subspans @@ -107,7 +119,7 @@ brw_fast_clear_depth(struct gl_context *ctx) * a previous clear had happened at a different clear value and resolve it * first. */ - if (ctx->Scissor.Enabled) { + if (ctx->Scissor.Enabled && !noop_scissor(ctx, fb)) { perf_debug("Failed to fast clear depth due to scissor being enabled. " "Possible 5%% performance win if avoided.\n"); return false; |