diff options
author | Marek Olšák <marek.olsak@amd.com> | 2016-12-02 02:18:25 +0100 |
---|---|---|
committer | Emil Velikov <emil.l.velikov@gmail.com> | 2016-12-16 18:52:24 +0000 |
commit | 6d919a6fc6e236fc001e6a61a1d4288830020a60 (patch) | |
tree | 844691df048450b030fe5d5cd37233efa3c09109 | |
parent | f71c3734ced0d33693422abe1ed83774fa1e3851 (diff) |
radeonsi: always restore sampler states when unbinding sampler views
Cc: 13.0 12.0 <mesa-stable@lists.freedesktop.org>
(cherry picked from commit b3a2aa9cba46bd6c8de22390b3b1ce9ac6c27988)
-rw-r--r-- | src/gallium/drivers/radeonsi/si_descriptors.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/src/gallium/drivers/radeonsi/si_descriptors.c b/src/gallium/drivers/radeonsi/si_descriptors.c index fe4cb2968de..dc84d495519 100644 --- a/src/gallium/drivers/radeonsi/si_descriptors.c +++ b/src/gallium/drivers/radeonsi/si_descriptors.c @@ -311,6 +311,7 @@ static void si_set_sampler_view(struct si_context *sctx, unsigned slot, struct pipe_sampler_view *view) { struct si_sampler_view *rview = (struct si_sampler_view*)view; + uint32_t *desc = views->desc.list + slot * 16; if (view && view->texture && view->texture->target != PIPE_BUFFER && G_008F28_COMPRESSION_EN(rview->state[6]) && @@ -346,9 +347,14 @@ static void si_set_sampler_view(struct si_context *sctx, views->desc.enabled_mask |= 1u << slot; } else { pipe_sampler_view_reference(&views->views[slot], NULL); - memcpy(views->desc.list + slot*16, null_texture_descriptor, 8*4); + memcpy(desc, null_texture_descriptor, 8*4); /* Only clear the lower dwords of FMASK. */ - memcpy(views->desc.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->desc.enabled_mask &= ~(1u << slot); } |