Mesa (staging/21.3): freedreno/a5xx: Fix clip_mask

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue Jan 25 21:32:51 UTC 2022


Module: Mesa
Branch: staging/21.3
Commit: 377c6d5ff55b81769dc6b3944daf81dc64dc910b
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=377c6d5ff55b81769dc6b3944daf81dc64dc910b

Author: Rob Clark <robdclark at chromium.org>
Date:   Thu Jan 20 15:46:49 2022 -0800

freedreno/a5xx: Fix clip_mask

The clip_mask needs to also take into account rast->clip_plane_enable

Fixes: 99838513aee ("freedreno/a5xx: Add support for clip distances and use them for userclip.")
Signed-off-by: Rob Clark <robdclark at chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14643>
(cherry picked from commit 2dfebf34874b5365156d254c2c1ba2ecc5262deb)

---

 .pick_status.json                                | 2 +-
 src/gallium/drivers/freedreno/a5xx/fd5_emit.c    | 2 +-
 src/gallium/drivers/freedreno/a5xx/fd5_program.c | 5 ++++-
 src/gallium/drivers/freedreno/a5xx/fd5_program.h | 2 +-
 4 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/.pick_status.json b/.pick_status.json
index 39cdbb2ea0e..b72f66655be 100644
--- a/.pick_status.json
+++ b/.pick_status.json
@@ -706,7 +706,7 @@
         "description": "freedreno/a5xx: Fix clip_mask",
         "nominated": true,
         "nomination_type": 1,
-        "resolution": 0,
+        "resolution": 1,
         "main_sha": null,
         "because_sha": "99838513aee4aeb100ff82fa7e2424c2d8e4f845"
     },
diff --git a/src/gallium/drivers/freedreno/a5xx/fd5_emit.c b/src/gallium/drivers/freedreno/a5xx/fd5_emit.c
index 9e27308eb89..ec48d89e034 100644
--- a/src/gallium/drivers/freedreno/a5xx/fd5_emit.c
+++ b/src/gallium/drivers/freedreno/a5xx/fd5_emit.c
@@ -658,7 +658,7 @@ fd5_emit_state(struct fd_context *ctx, struct fd_ringbuffer *ring,
       OUT_RING(ring, A5XX_GRAS_CL_VPORT_ZSCALE_0(ctx->viewport.scale[2]));
    }
 
-   if (dirty & FD_DIRTY_PROG)
+   if (dirty & (FD_DIRTY_PROG | FD_DIRTY_RASTERIZER_CLIP_PLANE_ENABLE))
       fd5_program_emit(ctx, ring, emit);
 
    if (dirty & FD_DIRTY_RASTERIZER) {
diff --git a/src/gallium/drivers/freedreno/a5xx/fd5_program.c b/src/gallium/drivers/freedreno/a5xx/fd5_program.c
index 272a044a738..289490019c5 100644
--- a/src/gallium/drivers/freedreno/a5xx/fd5_program.c
+++ b/src/gallium/drivers/freedreno/a5xx/fd5_program.c
@@ -250,9 +250,12 @@ fd5_program_emit(struct fd_context *ctx, struct fd_ringbuffer *ring,
    setup_stages(emit, s);
 
    bool do_streamout = (s[VS].v->shader->stream_output.num_outputs > 0);
-   uint8_t clip_mask = s[VS].v->clip_mask, cull_mask = s[VS].v->cull_mask;
+   uint8_t clip_mask = s[VS].v->clip_mask,
+           cull_mask = s[VS].v->cull_mask;
    uint8_t clip_cull_mask = clip_mask | cull_mask;
 
+   clip_mask &= ctx->rasterizer->clip_plane_enable;
+
    fssz = (s[FS].i->double_threadsize) ? FOUR_QUADS : TWO_QUADS;
 
    pos_regid = ir3_find_output_regid(s[VS].v, VARYING_SLOT_POS);
diff --git a/src/gallium/drivers/freedreno/a5xx/fd5_program.h b/src/gallium/drivers/freedreno/a5xx/fd5_program.h
index 59c499e6dfd..bc31c74cfa3 100644
--- a/src/gallium/drivers/freedreno/a5xx/fd5_program.h
+++ b/src/gallium/drivers/freedreno/a5xx/fd5_program.h
@@ -52,7 +52,7 @@ void fd5_emit_shader(struct fd_ringbuffer *ring,
                      const struct ir3_shader_variant *so);
 
 void fd5_program_emit(struct fd_context *ctx, struct fd_ringbuffer *ring,
-                      struct fd5_emit *emit);
+                      struct fd5_emit *emit) in_dt;
 
 void fd5_prog_init(struct pipe_context *pctx);
 



More information about the mesa-commit mailing list