diff --git a/src/gallium/drivers/panfrost/pan_cmdstream.c b/src/gallium/drivers/panfrost/pan_cmdstream.c index e3602619516..7c6f7c5adf3 100644 --- a/src/gallium/drivers/panfrost/pan_cmdstream.c +++ b/src/gallium/drivers/panfrost/pan_cmdstream.c @@ -2325,7 +2325,7 @@ panfrost_emit_vertex_tiler_jobs(struct panfrost_batch *batch, batch->indirect_draw_job_id : 0, 0, vertex_job, false); - if (ctx->rasterizer->base.rasterizer_discard || batch->scissor_culls_everything) + if (panfrost_batch_skip_rasterization(batch)) return; panfrost_add_job(&batch->pool.base, &batch->scoreboard, diff --git a/src/gallium/drivers/panfrost/pan_job.c b/src/gallium/drivers/panfrost/pan_job.c index ebf42cbfc82..d0a4516879f 100644 --- a/src/gallium/drivers/panfrost/pan_job.c +++ b/src/gallium/drivers/panfrost/pan_job.c @@ -901,3 +901,17 @@ panfrost_batch_union_scissor(struct panfrost_batch *batch, batch->maxx = MAX2(batch->maxx, maxx); batch->maxy = MAX2(batch->maxy, maxy); } + +/** + * Checks if rasterization should be skipped. If not, a TILER job must be + * created for each draw, or the IDVS flow must be used. + */ +bool +panfrost_batch_skip_rasterization(struct panfrost_batch *batch) +{ + struct panfrost_context *ctx = batch->ctx; + struct pipe_rasterizer_state *rast = (void *) ctx->rasterizer; + + return (rast->rasterizer_discard || + batch->scissor_culls_everything); +} diff --git a/src/gallium/drivers/panfrost/pan_job.h b/src/gallium/drivers/panfrost/pan_job.h index 32ba7be754e..03f6337f9e4 100644 --- a/src/gallium/drivers/panfrost/pan_job.h +++ b/src/gallium/drivers/panfrost/pan_job.h @@ -195,4 +195,7 @@ panfrost_batch_union_scissor(struct panfrost_batch *batch, unsigned minx, unsigned miny, unsigned maxx, unsigned maxy); +bool +panfrost_batch_skip_rasterization(struct panfrost_batch *batch); + #endif