Module: Mesa
Branch: master
Commit: b3a2aa9cba46bd6c8de22390b3b1ce9ac6c27988
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=b3a2aa9cba46bd6c8de22390b3b1ce9ac6c27988

Author: Marek Olšák <marek.ol...@amd.com>
Date:   Fri Dec  2 02:18:25 2016 +0100

radeonsi: always restore sampler states when unbinding sampler views

Cc: 12.0 13.0 <mesa-sta...@lists.freedesktop.org>
Reviewed-by: Nicolai Hähnle <nicolai.haeh...@amd.com>

---

 src/gallium/drivers/radeonsi/si_descriptors.c | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/src/gallium/drivers/radeonsi/si_descriptors.c 
b/src/gallium/drivers/radeonsi/si_descriptors.c
index 097ffcd..8777f36 100644
--- a/src/gallium/drivers/radeonsi/si_descriptors.c
+++ b/src/gallium/drivers/radeonsi/si_descriptors.c
@@ -413,13 +413,13 @@ static void si_set_sampler_view(struct si_context *sctx,
        struct si_sampler_views *views = &sctx->samplers[shader].views;
        struct si_sampler_view *rview = (struct si_sampler_view*)view;
        struct si_descriptors *descs = si_sampler_descriptors(sctx, shader);
+       uint32_t *desc = descs->list + slot * 16;
 
        if (views->views[slot] == view && !disallow_early_out)
                return;
 
        if (view) {
                struct r600_texture *rtex = (struct r600_texture 
*)view->texture;
-               uint32_t *desc = descs->list + slot * 16;
 
                assert(rtex); /* views with texture == NULL aren't supported */
                pipe_sampler_view_reference(&views->views[slot], view);
@@ -468,9 +468,14 @@ static void si_set_sampler_view(struct si_context *sctx,
                                           rview->is_stencil_sampler, true);
        } else {
                pipe_sampler_view_reference(&views->views[slot], NULL);
-               memcpy(descs->list + slot*16, null_texture_descriptor, 8*4);
+               memcpy(desc, null_texture_descriptor, 8*4);
                /* Only clear the lower dwords of FMASK. */
-               memcpy(descs->list + slot*16 + 8, null_texture_descriptor, 4*4);
+               memcpy(desc + 8, null_texture_descriptor, 4*4);
+               /* Re-set the sampler state if we are transitioning from FMASK. 
*/
+               if (views->sampler_states[slot])
+                       memcpy(desc + 12,
+                              views->sampler_states[slot], 4*4);
+
                views->enabled_mask &= ~(1u << slot);
        }
 

_______________________________________________
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to