Mesa (master): r600g: use LINEAR_ALIGNED tiling for staging textures, reorder the code

Marek Olšák mareko at kemper.freedesktop.org
Tue Nov 13 14:02:27 UTC 2012


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

Author: Marek Olšák <maraeo at gmail.com>
Date:   Tue Nov 13 00:25:49 2012 +0100

r600g: use LINEAR_ALIGNED tiling for staging textures, reorder the code

Reviewed-by: Alex Deucher <alexander.deucher at amd.com>

---

 src/gallium/drivers/r600/r600_texture.c |   16 ++++++++++------
 1 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/src/gallium/drivers/r600/r600_texture.c b/src/gallium/drivers/r600/r600_texture.c
index ea017d3..b1dbf07 100644
--- a/src/gallium/drivers/r600/r600_texture.c
+++ b/src/gallium/drivers/r600/r600_texture.c
@@ -494,10 +494,18 @@ struct pipe_resource *r600_texture_create(struct pipe_screen *screen,
 {
 	struct r600_screen *rscreen = (struct r600_screen*)screen;
 	struct radeon_surface surface;
-	unsigned array_mode = 0;
+	const struct util_format_description *desc = util_format_description(templ->format);
+	unsigned array_mode;
 	int r;
 
-	if (!(templ->flags & R600_RESOURCE_FLAG_TRANSFER)) {
+	/* Default tiling mode for staging textures. */
+	array_mode = V_038000_ARRAY_LINEAR_ALIGNED;
+
+	/* Tiling doesn't work with the 422 (SUBSAMPLED) formats. That's not an issue,
+	 * because 422 formats are used for videos, which prefer linear buffers
+	 * for fast uploads anyway. */
+	if (!(templ->flags & R600_RESOURCE_FLAG_TRANSFER) &&
+	    desc->layout != UTIL_FORMAT_LAYOUT_SUBSAMPLED) {
 		if (!(templ->bind & PIPE_BIND_SCANOUT) &&
 		    templ->usage != PIPE_USAGE_STAGING &&
 		    templ->usage != PIPE_USAGE_STREAM) {
@@ -507,10 +515,6 @@ struct pipe_resource *r600_texture_create(struct pipe_screen *screen,
 		}
 	}
 
-	/* XXX tiling is broken for the 422 formats */
-	if (util_format_description(templ->format)->layout == UTIL_FORMAT_LAYOUT_SUBSAMPLED)
-		array_mode = V_038000_ARRAY_LINEAR_ALIGNED;
-
 	r = r600_init_surface(rscreen, &surface, templ, array_mode,
 			      templ->flags & R600_RESOURCE_FLAG_FLUSHED_DEPTH);
 	if (r) {




More information about the mesa-commit mailing list