From 417b6721a007a1e6b425758ffce32fd805d81f16 Mon Sep 17 00:00:00 2001 From: Bas Nieuwenhuizen Date: Thu, 10 Mar 2016 17:57:41 +0100 Subject: radeonsi: Lazily re-set sampler views after disabling DCC MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Clear DCC flags if necessary when binding a new sampler view. v2: Do not reset DCC flags of bound sampler views. v3: Check that we have a real texture (Nicolai) Signed-off-by: Bas Nieuwenhuizen Reviewed-by: Nicolai Hähnle --- src/gallium/drivers/radeon/r600_texture.c | 2 -- src/gallium/drivers/radeonsi/si_descriptors.c | 11 ++++++++--- 2 files changed, 8 insertions(+), 5 deletions(-) (limited to 'src/gallium') diff --git a/src/gallium/drivers/radeon/r600_texture.c b/src/gallium/drivers/radeon/r600_texture.c index 6b2d9096525..115c7289c4c 100644 --- a/src/gallium/drivers/radeon/r600_texture.c +++ b/src/gallium/drivers/radeon/r600_texture.c @@ -311,8 +311,6 @@ static void r600_texture_disable_dcc(struct r600_common_screen *rscreen, /* Notify all contexts about the change. */ r600_dirty_all_framebuffer_states(rscreen); - - /* TODO: re-set all sampler views and images, but how? */ } static boolean r600_texture_get_handle(struct pipe_screen* screen, diff --git a/src/gallium/drivers/radeonsi/si_descriptors.c b/src/gallium/drivers/radeonsi/si_descriptors.c index 9aa48772975..11b902516e0 100644 --- a/src/gallium/drivers/radeonsi/si_descriptors.c +++ b/src/gallium/drivers/radeonsi/si_descriptors.c @@ -185,12 +185,17 @@ static void si_set_sampler_view(struct si_context *sctx, struct si_sampler_views *views, unsigned slot, struct pipe_sampler_view *view) { - if (views->views[slot] == view) + struct si_sampler_view *rview = (struct si_sampler_view*)view; + + if (view && view->texture && view->texture->target != PIPE_BUFFER && + G_008F28_COMPRESSION_EN(rview->state[6]) && + ((struct r600_texture*)view->texture)->dcc_offset == 0) { + rview->state[6] &= C_008F28_COMPRESSION_EN & + C_008F28_ALPHA_IS_ON_MSB; + } else if (views->views[slot] == view) return; if (view) { - struct si_sampler_view *rview = - (struct si_sampler_view*)view; struct r600_texture *rtex = (struct r600_texture *)view->texture; si_sampler_view_add_buffer(sctx, view->texture); -- cgit v1.2.3