Mesa (master): panfrost: Drop draws with complete scissor
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Mon Jun 17 16:33:41 UTC 2019
Module: Mesa
Branch: master
Commit: 9865b79a882e6eb9bc38427bcff199da3d787b66
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=9865b79a882e6eb9bc38427bcff199da3d787b66
Author: Alyssa Rosenzweig <alyssa.rosenzweig at collabora.com>
Date: Mon Jun 17 09:26:34 2019 -0700
panfrost: Drop draws with complete scissor
The hardware support for scissoring requires minimally 1 pixel to be
drawn. If the scissor culls *everything*, we need to drop the draw
entirely early on.
Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig at collabora.com>
---
.../drivers/panfrost/ci/expected-failures.txt | 4 ----
src/gallium/drivers/panfrost/pan_context.c | 20 ++++++++++++++++++++
2 files changed, 20 insertions(+), 4 deletions(-)
diff --git a/src/gallium/drivers/panfrost/ci/expected-failures.txt b/src/gallium/drivers/panfrost/ci/expected-failures.txt
index 8bfe988e99c..66ca0507cc3 100644
--- a/src/gallium/drivers/panfrost/ci/expected-failures.txt
+++ b/src/gallium/drivers/panfrost/ci/expected-failures.txt
@@ -285,10 +285,6 @@ dEQP-GLES2.functional.fragment_ops.random.96
dEQP-GLES2.functional.fragment_ops.random.97
dEQP-GLES2.functional.fragment_ops.random.98
dEQP-GLES2.functional.fragment_ops.random.99
-dEQP-GLES2.functional.fragment_ops.scissor.clear_color
-dEQP-GLES2.functional.fragment_ops.scissor.outside_render_line
-dEQP-GLES2.functional.fragment_ops.scissor.outside_render_point
-dEQP-GLES2.functional.fragment_ops.scissor.outside_render_tri
dEQP-GLES2.functional.lifetime.attach.deleted_output.renderbuffer_framebuffer
dEQP-GLES2.functional.lifetime.attach.deleted_output.texture_framebuffer
dEQP-GLES2.functional.negative_api.shader.uniform_matrixfv_invalid_transpose
diff --git a/src/gallium/drivers/panfrost/pan_context.c b/src/gallium/drivers/panfrost/pan_context.c
index 7ad20a80fb1..f7033006494 100644
--- a/src/gallium/drivers/panfrost/pan_context.c
+++ b/src/gallium/drivers/panfrost/pan_context.c
@@ -1569,6 +1569,19 @@ panfrost_get_index_buffer_mapped(struct panfrost_context *ctx, const struct pipe
}
}
+static bool
+panfrost_scissor_culls_everything(struct panfrost_context *ctx)
+{
+ const struct pipe_scissor_state *ss = &ctx->scissor;
+
+ /* Check if we're scissoring at all */
+
+ if (!(ss && ctx->rasterizer && ctx->rasterizer->base.scissor))
+ return false;
+
+ return (ss->minx == ss->maxx) && (ss->miny == ss->maxy);
+}
+
static void
panfrost_draw_vbo(
struct pipe_context *pipe,
@@ -1576,6 +1589,13 @@ panfrost_draw_vbo(
{
struct panfrost_context *ctx = pan_context(pipe);
+ /* First of all, check the scissor to see if anything is drawn at all.
+ * If it's not, we drop the draw (mostly a conformance issue;
+ * well-behaved apps shouldn't hit this) */
+
+ if (panfrost_scissor_culls_everything(ctx))
+ return;
+
ctx->payload_vertex.draw_start = info->start;
ctx->payload_tiler.draw_start = info->start;
More information about the mesa-commit
mailing list