freedreno/a6xx: fixup draw state earlier
authorRob Clark <robdclark@chromium.org>
Wed, 29 Jul 2020 17:14:34 +0000 (10:14 -0700)
committerMarge Bot <eric+marge@anholt.net>
Wed, 29 Jul 2020 20:22:05 +0000 (20:22 +0000)
`fixup_draw_state()` was updating `ctx->dirty` after it had already been
copied into the emit struct, which had the result that we were not re-
emitting the rast state when primitive_restart changes.

Fixes: 4d8f42c8512 ("freedreno/a6xx: separate rast stateobj for prim restart")
Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/3067
Signed-off-by: Rob Clark <robdclark@chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6117>

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

index 810bdf0ca79870d7e70b66a89949ef7eb8507f5d..e95c400dd387e69047200f1544cc118a1fbd5643 100644 (file)
@@ -210,6 +210,8 @@ fd6_draw_vbo(struct fd_context *ctx, const struct pipe_draw_info *info,
        if (!fd6_ctx->prog)
                return NULL;
 
+       fixup_draw_state(ctx, &emit);
+
        emit.dirty = ctx->dirty;      /* *after* fixup_shader_state() */
        emit.bs = fd6_emit_get_prog(&emit)->bs;
        emit.vs = fd6_emit_get_prog(&emit)->vs;
@@ -303,8 +305,6 @@ fd6_draw_vbo(struct fd_context *ctx, const struct pipe_draw_info *info,
                ctx->last.restart_index = restart_index;
        }
 
-       fixup_draw_state(ctx, &emit);
-
        fd6_emit_state(ring, &emit);
 
        /* for debug after a lock up, write a unique counter value