radeonsi: update clip_regs if clip_disable changes to fix a hang
authorMarek Olšák <marek.olsak@amd.com>
Tue, 3 Jan 2017 10:02:41 +0000 (11:02 +0100)
committerMarek Olšák <marek.olsak@amd.com>
Thu, 5 Jan 2017 13:01:18 +0000 (14:01 +0100)
This seems to fix the GPU hangs caused by:

commit ed3190b3f3a776fc8c75b1e6130a88079166d115
Author: Marek Olšák <marek.olsak@amd.com>
Date:   Sun Nov 13 18:41:43 2016 +0100

    radeonsi: don't export ClipVertex and ClipDistance[] if clipping is disabled

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=99219

Tested-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
src/gallium/drivers/radeonsi/si_state_shaders.c

index 4a7f638f1d36a7afaea8d0dbfa7bd8171cd24836..ce0ed31055e019b62e929a5c6aa08264e968bc9d 100644 (file)
@@ -2370,6 +2370,8 @@ bool si_update_shaders(struct si_context *sctx)
 {
        struct pipe_context *ctx = (struct pipe_context*)sctx;
        struct si_state_rasterizer *rs = sctx->queued.named.rasterizer;
+       struct si_shader *old_vs = si_get_vs_state(sctx);
+       bool old_clip_disable = old_vs ? old_vs->key.opt.hw_vs.clip_disable : false;
        int r;
 
        /* Update stages before GS. */
@@ -2450,6 +2452,9 @@ bool si_update_shaders(struct si_context *sctx)
 
        si_update_vgt_shader_config(sctx);
 
+       if (old_clip_disable != si_get_vs_state(sctx)->key.opt.hw_vs.clip_disable)
+               si_mark_atom_dirty(sctx, &sctx->clip_regs);
+
        if (sctx->ps_shader.cso) {
                unsigned db_shader_control;