[Mesa-dev] [PATCH 11/12] gallium/radeon: move DCC clearing into a separate function

Marek Olšák maraeo at gmail.com
Tue Jun 7 10:04:35 UTC 2016


From: Marek Olšák <marek.olsak at amd.com>

---
 src/gallium/drivers/radeon/r600_pipe_common.h |  3 +++
 src/gallium/drivers/radeon/r600_texture.c     | 21 ++++++++++++++++-----
 2 files changed, 19 insertions(+), 5 deletions(-)

diff --git a/src/gallium/drivers/radeon/r600_pipe_common.h b/src/gallium/drivers/radeon/r600_pipe_common.h
index bb090d6..edfae95 100644
--- a/src/gallium/drivers/radeon/r600_pipe_common.h
+++ b/src/gallium/drivers/radeon/r600_pipe_common.h
@@ -675,6 +675,9 @@ struct pipe_surface *r600_create_surface_custom(struct pipe_context *pipe,
 						const struct pipe_surface *templ,
 						unsigned width, unsigned height);
 unsigned r600_translate_colorswap(enum pipe_format format, bool do_endian_swap);
+void vi_dcc_clear_level(struct r600_common_context *rctx,
+			struct r600_texture *rtex,
+			unsigned level, unsigned clear_value);
 void evergreen_do_fast_color_clear(struct r600_common_context *rctx,
 				   struct pipe_framebuffer_state *fb,
 				   struct r600_atom *fb_state,
diff --git a/src/gallium/drivers/radeon/r600_texture.c b/src/gallium/drivers/radeon/r600_texture.c
index b0f375e..a1c314e 100644
--- a/src/gallium/drivers/radeon/r600_texture.c
+++ b/src/gallium/drivers/radeon/r600_texture.c
@@ -1793,6 +1793,21 @@ static void vi_get_fast_clear_parameters(enum pipe_format surface_format,
 		*reset_value |= 0x40404040U;
 }
 
+void vi_dcc_clear_level(struct r600_common_context *rctx,
+			struct r600_texture *rtex,
+			unsigned level, unsigned clear_value)
+{
+	struct pipe_resource *dcc_buffer = &rtex->resource.b.b;
+	uint64_t dcc_offset = rtex->dcc_offset +
+			      rtex->surface.level[level].dcc_offset;
+
+	assert(rtex->dcc_offset && rtex->surface.level[level].dcc_enabled);
+
+	rctx->clear_buffer(&rctx->b, dcc_buffer, dcc_offset,
+			   rtex->surface.level[level].dcc_fast_clear_size,
+			   clear_value, R600_COHERENCY_CB_META);
+}
+
 void evergreen_do_fast_color_clear(struct r600_common_context *rctx,
 				   struct pipe_framebuffer_state *fb,
 				   struct r600_atom *fb_state,
@@ -1867,11 +1882,7 @@ void evergreen_do_fast_color_clear(struct r600_common_context *rctx,
 				continue;
 
 			vi_get_fast_clear_parameters(fb->cbufs[i]->format, color, &reset_value, &clear_words_needed);
-
-			rctx->clear_buffer(&rctx->b, &tex->resource.b.b,
-					   tex->dcc_offset,
-					   tex->surface.level[0].dcc_fast_clear_size,
-					   reset_value, R600_COHERENCY_CB_META);
+			vi_dcc_clear_level(rctx, tex, 0, reset_value);
 
 			if (clear_words_needed)
 				tex->dirty_level_mask |= 1 << fb->cbufs[i]->u.tex.level;
-- 
2.7.4



More information about the mesa-dev mailing list