From 121417ef1d3d5b1b039174eb171cedab59f2deb0 Mon Sep 17 00:00:00 2001 From: Alyssa Rosenzweig Date: Sun, 24 Mar 2019 21:51:49 +0000 Subject: panfrost: Implement scissor test This preliminary implementation should handle some basic cases. Future work should scissor the FRAGMENT job as well for efficiency. Signed-off-by: Alyssa Rosenzweig --- src/gallium/drivers/panfrost/pan_context.c | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/gallium/drivers/panfrost/pan_context.c b/src/gallium/drivers/panfrost/pan_context.c index 8c4502b1cd8..80b9512371b 100644 --- a/src/gallium/drivers/panfrost/pan_context.c +++ b/src/gallium/drivers/panfrost/pan_context.c @@ -1062,9 +1062,11 @@ panfrost_emit_for_draw(struct panfrost_context *ctx, bool with_vertex_data) /* For flipped-Y buffers (signaled by negative scale), the translate is * flipped as well */ - float translate_y = - vp->scale[1] >= 0.0 ? vp->translate[1] : - (ctx->pipe_framebuffer.height - vp->translate[1]); + bool invert_y = vp->scale[1] < 0.0; + float translate_y = vp->translate[1]; + + if (invert_y) + translate_y = ctx->pipe_framebuffer.height - translate_y; float viewport_vec4[] = { vp->scale[0], @@ -1161,11 +1163,19 @@ panfrost_emit_for_draw(struct panfrost_context *ctx, bool with_vertex_data) view.viewport0[1] = (int) (translate_y - fabs(vp->scale[1])); view.viewport1[1] = MALI_POSITIVE((int) (translate_y + fabs(vp->scale[1]))); - if (ss && ctx->rasterizer && ctx->rasterizer->base.scissor && 0) { + if (ss && ctx->rasterizer && ctx->rasterizer->base.scissor) { + /* Invert scissor if needed */ + unsigned miny = invert_y ? + ctx->pipe_framebuffer.height - ss->maxy : ss->miny; + + unsigned maxy = invert_y ? + ctx->pipe_framebuffer.height - ss->miny : ss->maxy; + + /* Set the actual scissor */ view.viewport0[0] = ss->minx; - view.viewport0[1] = ss->miny; + view.viewport0[1] = miny; view.viewport1[0] = MALI_POSITIVE(ss->maxx); - view.viewport1[1] = MALI_POSITIVE(ss->maxy); + view.viewport1[1] = MALI_POSITIVE(maxy); } ctx->payload_tiler.postfix.viewport = -- cgit v1.2.3