radeonsi: allow unbinding pixel shaders and remove the dummy shader
authorMarek Olšák <marek.olsak@amd.com>
Thu, 22 Oct 2015 20:19:34 +0000 (22:19 +0200)
committerMarek Olšák <marek.olsak@amd.com>
Fri, 23 Oct 2015 22:01:20 +0000 (00:01 +0200)
Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
src/gallium/drivers/radeonsi/si_pipe.c
src/gallium/drivers/radeonsi/si_pipe.h
src/gallium/drivers/radeonsi/si_state_shaders.c

index 5f910c9..e211e92 100644 (file)
@@ -55,8 +55,6 @@ static void si_destroy_context(struct pipe_context *context)
 
        if (sctx->pstipple_sampler_state)
                sctx->b.b.delete_sampler_state(&sctx->b.b, sctx->pstipple_sampler_state);
-       if (sctx->dummy_pixel_shader)
-               sctx->b.b.delete_fs_state(&sctx->b.b, sctx->dummy_pixel_shader);
        if (sctx->fixed_func_tcs_shader.cso)
                sctx->b.b.delete_tcs_state(&sctx->b.b, sctx->fixed_func_tcs_shader.cso);
        if (sctx->custom_dsa_flush)
index d7a2282..6305724 100644 (file)
@@ -203,9 +203,6 @@ struct si_context {
        struct si_pm4_state             *init_config;
        bool                            init_config_has_vgt_flush;
        struct si_pm4_state             *vgt_shader_config[4];
-       /* With rasterizer discard, there doesn't have to be a pixel shader.
-        * In that case, we bind this one: */
-       void                            *dummy_pixel_shader;
 
        /* shaders */
        struct si_shader_ctx_state      ps_shader;
index ce8d1cc..25cba84 100644 (file)
@@ -864,16 +864,6 @@ static void si_bind_tes_shader(struct pipe_context *ctx, void *state)
        si_update_viewports_and_scissors(sctx);
 }
 
-static void si_make_dummy_ps(struct si_context *sctx)
-{
-       if (!sctx->dummy_pixel_shader) {
-               sctx->dummy_pixel_shader =
-                       util_make_fragment_cloneinput_shader(&sctx->b.b, 0,
-                                                            TGSI_SEMANTIC_GENERIC,
-                                                            TGSI_INTERPOLATE_CONSTANT);
-       }
-}
-
 static void si_bind_ps_shader(struct pipe_context *ctx, void *state)
 {
        struct si_context *sctx = (struct si_context *)ctx;
@@ -883,14 +873,8 @@ static void si_bind_ps_shader(struct pipe_context *ctx, void *state)
        if (sctx->ps_shader.cso == sel)
                return;
 
-       /* use a dummy shader if binding a NULL shader */
-       if (!sel) {
-               si_make_dummy_ps(sctx);
-               sel = sctx->dummy_pixel_shader;
-       }
-
        sctx->ps_shader.cso = sel;
-       sctx->ps_shader.current = sel->first_variant;
+       sctx->ps_shader.current = sel ? sel->first_variant : NULL;
        si_mark_atom_dirty(sctx, &sctx->cb_target_mask);
 }