Mesa (master): r600g: fixup pitch alignment like r600c.

Dave Airlie airlied at kemper.freedesktop.org
Wed Aug 18 02:50:15 UTC 2010


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

Author: Dave Airlie <airlied at redhat.com>
Date:   Wed Aug 18 11:49:51 2010 +1000

r600g: fixup pitch alignment like r600c.

This still needs work, passes tex3d, fbo-scissor-bitmap, scissor-bitmap

---

 src/gallium/drivers/r600/r600_state.c   |    9 ++++++---
 src/gallium/drivers/r600/r600_texture.c |    1 +
 2 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/src/gallium/drivers/r600/r600_state.c b/src/gallium/drivers/r600/r600_state.c
index 0059952..260688a 100644
--- a/src/gallium/drivers/r600/r600_state.c
+++ b/src/gallium/drivers/r600/r600_state.c
@@ -1217,7 +1217,7 @@ static struct radeon_state *r600_resource(struct r600_context *rctx,
 	struct r600_resource *rbuffer;
 	struct radeon_state *rstate;
 	unsigned format;
-	uint32_t word4 = 0, yuv_format = 0;
+	uint32_t word4 = 0, yuv_format = 0, pitch = 0;
 	unsigned char swizzle[4];
 
 	swizzle[0] = view->swizzle_r;
@@ -1248,16 +1248,19 @@ static struct radeon_state *r600_resource(struct r600_context *rctx,
 	rstate->placement[2] = RADEON_GEM_DOMAIN_GTT;
 	rstate->placement[3] = RADEON_GEM_DOMAIN_GTT;
 
+	pitch = (tmp->pitch[0] / tmp->bpt);
+	pitch = (pitch + 0x7) & ~0x7;
+	
 	/* FIXME properly handle first level != 0 */
 	rstate->states[R600_PS_RESOURCE__RESOURCE0_WORD0] =
 			S_038000_DIM(r600_tex_dim(view->texture->target)) |
-			S_038000_PITCH(((tmp->pitch[0] / tmp->bpt) / 8) - 1) |
+	                S_038000_PITCH((pitch / 8) - 1) |
 			S_038000_TEX_WIDTH(view->texture->width0 - 1);
 	rstate->states[R600_PS_RESOURCE__RESOURCE0_WORD1] =
 			S_038004_TEX_HEIGHT(view->texture->height0 - 1) |
 			S_038004_TEX_DEPTH(view->texture->depth0 - 1) |
 			S_038004_DATA_FORMAT(format);
-	rstate->states[R600_PS_RESOURCE__RESOURCE0_WORD2] = 0;
+	rstate->states[R600_PS_RESOURCE__RESOURCE0_WORD2] = tmp->offset[0] >> 8;
 	rstate->states[R600_PS_RESOURCE__RESOURCE0_WORD3] = tmp->offset[1] >> 8;
 	rstate->states[R600_PS_RESOURCE__RESOURCE0_WORD4] =
 		        word4 | 
diff --git a/src/gallium/drivers/r600/r600_texture.c b/src/gallium/drivers/r600/r600_texture.c
index 55cceb6..eabd7f7 100644
--- a/src/gallium/drivers/r600/r600_texture.c
+++ b/src/gallium/drivers/r600/r600_texture.c
@@ -67,6 +67,7 @@ static void r600_setup_miptree(struct r600_screen *rscreen, struct r600_resource
 		h = u_minify(ptex->height0, i);
 		h = util_next_power_of_two(h);
 		pitch = util_format_get_stride(ptex->format, align(w, 64));
+		pitch = align(pitch, 256);
 		layer_size = pitch * h;
 		if (ptex->target == PIPE_TEXTURE_CUBE)
 			size = layer_size * 6;




More information about the mesa-commit mailing list