From f03c9e5692c76f658ecc692515bd1a9a79e85524 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Nicolai=20H=C3=A4hnle?= Date: Wed, 9 Mar 2016 17:48:31 -0500 Subject: [PATCH] r600g: update compressed_colortex_masks when a cmask is created or disabled MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Reviewed-by: Bas Nieuwenhuizen Reviewed-by: Marek Olšák --- src/gallium/drivers/r600/r600_state_common.c | 30 ++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/gallium/drivers/r600/r600_state_common.c b/src/gallium/drivers/r600/r600_state_common.c index e3314bbf426..40ceb8d7819 100644 --- a/src/gallium/drivers/r600/r600_state_common.c +++ b/src/gallium/drivers/r600/r600_state_common.c @@ -693,6 +693,26 @@ static void r600_set_sampler_views(struct pipe_context *pipe, unsigned shader, } } +static void r600_update_compressed_colortex_mask(struct r600_samplerview_state *views) +{ + uint32_t mask = views->enabled_mask; + + while (mask) { + unsigned i = u_bit_scan(&mask); + struct pipe_resource *res = views->views[i]->base.texture; + + if (res && res->target != PIPE_BUFFER) { + struct r600_texture *rtex = (struct r600_texture *)res; + + if (rtex->cmask.size) { + views->compressed_colortex_mask |= 1 << i; + } else { + views->compressed_colortex_mask &= ~(1 << i); + } + } + } +} + static void r600_set_viewport_states(struct pipe_context *ctx, unsigned start_slot, unsigned num_viewports, @@ -1457,6 +1477,16 @@ static bool r600_update_derived_state(struct r600_context *rctx) if (!rctx->blitter->running) { unsigned i; + unsigned counter; + + counter = p_atomic_read(&rctx->screen->b.compressed_colortex_counter); + if (counter != rctx->b.last_compressed_colortex_counter) { + rctx->b.last_compressed_colortex_counter = counter; + + for (i = 0; i < PIPE_SHADER_TYPES; ++i) { + r600_update_compressed_colortex_mask(&rctx->samplers[i].views); + } + } /* Decompress textures if needed. */ for (i = 0; i < PIPE_SHADER_TYPES; i++) { -- 2.30.2