radeonsi: fix binding the dummy pixel shader
authorMarek Olšák <marek.olsak@amd.com>
Wed, 4 Dec 2013 12:54:50 +0000 (13:54 +0100)
committerMarek Olšák <marek.olsak@amd.com>
Thu, 12 Dec 2013 17:48:04 +0000 (18:48 +0100)
This fixes valgrind errors in glxinfo.

Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
src/gallium/drivers/radeonsi/radeonsi_pipe.h
src/gallium/drivers/radeonsi/si_state.c
src/gallium/drivers/radeonsi/si_state_draw.c

index e84088f11dbedcb27fece1b56f659d2a11618078..56145bc4111c60ea02932221105b64d4ef97040b 100644 (file)
@@ -166,7 +166,7 @@ struct r600_context {
 
        /* With rasterizer discard, there doesn't have to be a pixel shader.
         * In that case, we bind this one: */
-       struct si_pipe_shader   *dummy_pixel_shader;
+       void                    *dummy_pixel_shader;
        struct r600_atom        cache_flush;
        struct pipe_constant_buffer null_const_buf; /* used for set_constant_buffer(NULL) on CIK */
 
index 165475c6fd5a6b9de15be9b0bb56b535d5902c16..d99cfe88bc48d4413211f4064c53d92ad77df091 100644 (file)
@@ -2335,15 +2335,12 @@ static void si_bind_vs_shader(struct pipe_context *ctx, void *state)
        if (rctx->vs_shader == sel)
                return;
 
-       rctx->vs_shader = sel;
-
-       if (sel && sel->current) {
-               si_pm4_bind_state(rctx, vs, sel->current->pm4);
-               rctx->b.streamout.stride_in_dw = sel->so.stride;
-       } else {
-               si_pm4_bind_state(rctx, vs, rctx->dummy_pixel_shader->pm4);
-       }
+       if (!sel || !sel->current)
+               return;
 
+       rctx->vs_shader = sel;
+       si_pm4_bind_state(rctx, vs, sel->current->pm4);
+       rctx->b.streamout.stride_in_dw = sel->so.stride;
        rctx->b.flags |= R600_CONTEXT_INV_SHADER_CACHE;
 }
 
@@ -2355,13 +2352,11 @@ static void si_bind_ps_shader(struct pipe_context *ctx, void *state)
        if (rctx->ps_shader == sel)
                return;
 
-       rctx->ps_shader = sel;
-
-       if (sel && sel->current)
-               si_pm4_bind_state(rctx, ps, sel->current->pm4);
-       else
-               si_pm4_bind_state(rctx, ps, rctx->dummy_pixel_shader->pm4);
+       if (!sel || !sel->current)
+               sel = rctx->dummy_pixel_shader;
 
+       rctx->ps_shader = sel;
+       si_pm4_bind_state(rctx, ps, sel->current->pm4);
        rctx->b.flags |= R600_CONTEXT_INV_SHADER_CACHE;
 }
 
index 952fab9d457ff373bd62471288adb6679d1770c2..620ec7c1a80eebf7a20edc91d53d6822e1959ed0 100644 (file)
@@ -470,17 +470,9 @@ static void si_update_derived_state(struct r600_context *rctx)
                si_pipe_shader_ps(ctx, rctx->ps_shader->current);
                ps_dirty = 0;
        }
-       if (!rctx->ps_shader->current->bo) {
-               if (!rctx->dummy_pixel_shader->pm4)
-                       si_pipe_shader_ps(ctx, rctx->dummy_pixel_shader);
-               else
-                       si_pm4_bind_state(rctx, vs, rctx->dummy_pixel_shader->pm4);
-
-               ps_dirty = 0;
-       }
        if (rctx->ps_shader->current->cb0_is_integer != rctx->fb_cb0_is_integer) {
                si_pipe_shader_ps(ctx, rctx->ps_shader->current);
-               ps_dirty = 1;
+               ps_dirty = 0;
        }
 
        if (ps_dirty) {