summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>2019-06-20 15:25:17 -0700
committerAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>2019-06-21 09:35:31 -0700
commitcd5d618b5ccf1ff847de4d0203830f9ad81862c7 (patch)
tree411b8f59927a02238eac6c692b1aef925ba47cb7
parent26c5a145a7459d47793edbe7b6adbcc649ed4bef (diff)
panfrost: Implement rasterizer discard
D'aww, look how cute that is now that scoreboarding is setup. Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
-rw-r--r--src/gallium/drivers/panfrost/pan_context.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/gallium/drivers/panfrost/pan_context.c b/src/gallium/drivers/panfrost/pan_context.c
index 6257ffe2ac4..a803a8b68cb 100644
--- a/src/gallium/drivers/panfrost/pan_context.c
+++ b/src/gallium/drivers/panfrost/pan_context.c
@@ -1338,12 +1338,22 @@ panfrost_queue_draw(struct panfrost_context *ctx)
/* Handle dirty flags now */
panfrost_emit_for_draw(ctx, true);
+ /* If rasterizer discard is enable, only submit the vertex */
+
+ bool rasterizer_discard = ctx->rasterizer
+ && ctx->rasterizer->base.rasterizer_discard;
+
struct panfrost_transfer vertex = panfrost_vertex_tiler_job(ctx, false);
- struct panfrost_transfer tiler = panfrost_vertex_tiler_job(ctx, true);
+ struct panfrost_transfer tiler;
+
+ if (!rasterizer_discard)
+ tiler = panfrost_vertex_tiler_job(ctx, true);
struct panfrost_job *batch = panfrost_get_job_for_fbo(ctx);
- if (ctx->wallpaper_batch)
+ if (rasterizer_discard)
+ panfrost_scoreboard_queue_vertex_job(batch, vertex, FALSE);
+ else if (ctx->wallpaper_batch)
panfrost_scoreboard_queue_fused_job_prepend(batch, vertex, tiler);
else
panfrost_scoreboard_queue_fused_job(batch, vertex, tiler);