freedreno/a6xx: fix LRZ hang
authorRob Clark <robdclark@chromium.org>
Thu, 30 Apr 2020 23:00:21 +0000 (16:00 -0700)
committerMarge Bot <eric+marge@anholt.net>
Fri, 1 May 2020 00:02:28 +0000 (00:02 +0000)
In detecting the case where we actually do need to re-emit LRZ state
(due to new batch), we were checking `ctx->last.dirty` to detect when
we cannot trust previous state.  But this is cleared before we check
it.

Move where it is cleared to the end of the draw_vbo() path.

Fixes: dfa702e94b9 ("freedreno/a6xx: limit LRZ state emit")
Signed-off-by: Rob Clark <robdclark@chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4842>

src/gallium/drivers/freedreno/a6xx/fd6_draw.c
src/gallium/drivers/freedreno/freedreno_context.h

index 5ce0f860511ba92f496602dbcbe81ed25a8d7028..78bd62051f69ae33118bf440017fda4355b03961 100644 (file)
@@ -137,8 +137,6 @@ fixup_draw_state(struct fd_context *ctx, struct fd6_emit *emit)
                ctx->dirty |= FD_DIRTY_RASTERIZER;
                ctx->last.primitive_restart = emit->primitive_restart;
        }
-
-       ctx->last.dirty = false;
 }
 
 static bool
index b3a0f212dd0454333c259aa455d17cf05623bc83..e756411d1830e2f0abae03e6cc6f30eecd5cbda8 100644 (file)
@@ -450,6 +450,7 @@ fd_context_all_dirty(struct fd_context *ctx)
 static inline void
 fd_context_all_clean(struct fd_context *ctx)
 {
+       ctx->last.dirty = false;
        ctx->dirty = 0;
        for (unsigned i = 0; i < PIPE_SHADER_TYPES; i++) {
                /* don't mark compute state as clean, since it is not emitted