Mesa (master): r600g: simplify block relocation

Jerome Glisse glisse at kemper.freedesktop.org
Tue Oct 5 19:24:30 UTC 2010


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

Author: Jerome Glisse <jglisse at redhat.com>
Date:   Tue Oct  5 15:23:07 2010 -0400

r600g: simplify block relocation

Since flush rework there could be only one relocation per
register in a block.

Signed-off-by: Jerome Glisse <jglisse at redhat.com>

---

 src/gallium/drivers/r600/r600.h               |    5 ++---
 src/gallium/winsys/r600/drm/r600_hw_context.c |    2 +-
 src/gallium/winsys/r600/drm/r600_priv.h       |   14 ++++++--------
 3 files changed, 9 insertions(+), 12 deletions(-)

diff --git a/src/gallium/drivers/r600/r600.h b/src/gallium/drivers/r600/r600.h
index acacec0..630177d 100644
--- a/src/gallium/drivers/r600/r600.h
+++ b/src/gallium/drivers/r600/r600.h
@@ -152,11 +152,10 @@ static inline void r600_pipe_state_add_reg(struct r600_pipe_state *state,
 #define R600_BLOCK_STATUS_DIRTY		(1 << 1)
 
 struct r600_block_reloc {
-	struct r600_bo	*bo;
-	unsigned		nreloc;
+	struct r600_bo		*bo;
 	unsigned		flush_flags;
 	unsigned		flush_mask;
-	unsigned		bo_pm4_index[R600_BLOCK_MAX_BO];
+	unsigned		bo_pm4_index;
 };
 
 struct r600_block {
diff --git a/src/gallium/winsys/r600/drm/r600_hw_context.c b/src/gallium/winsys/r600/drm/r600_hw_context.c
index 5019c26..b379499 100644
--- a/src/gallium/winsys/r600/drm/r600_hw_context.c
+++ b/src/gallium/winsys/r600/drm/r600_hw_context.c
@@ -96,7 +96,7 @@ int r600_context_add_block(struct r600_context *ctx, const struct r600_reg *reg,
 				block->pm4[block->pm4_ndwords++] = 0x00000000;
 				block->reloc[block->nbo].flush_flags = reg[i+j].flush_flags;
 				block->reloc[block->nbo].flush_mask = reg[i+j].flush_mask;
-				block->reloc[block->nbo].bo_pm4_index[block->reloc[block->nbo].nreloc++] = block->pm4_ndwords - 1;
+				block->reloc[block->nbo].bo_pm4_index = block->pm4_ndwords - 1;
 			}
 		}
 		for (j = 0; j < n; j++) {
diff --git a/src/gallium/winsys/r600/drm/r600_priv.h b/src/gallium/winsys/r600/drm/r600_priv.h
index 9a38cc5..ea2cf34 100644
--- a/src/gallium/winsys/r600/drm/r600_priv.h
+++ b/src/gallium/winsys/r600/drm/r600_priv.h
@@ -149,15 +149,13 @@ static inline void r600_context_block_emit_dirty(struct r600_context *ctx, struc
 		if (block->pm4_bo_index[j]) {
 			/* find relocation */
 			id = block->pm4_bo_index[j];
-			for (int k = 0; k < block->reloc[id].nreloc; k++) {
-				r600_context_bo_reloc(ctx,
-					&block->pm4[block->reloc[id].bo_pm4_index[k]],
+			r600_context_bo_reloc(ctx,
+					&block->pm4[block->reloc[id].bo_pm4_index],
+					block->reloc[id].bo);
+			r600_context_bo_flush(ctx,
+					block->reloc[id].flush_flags,
+					block->reloc[id].flush_mask,
 					block->reloc[id].bo);
-				r600_context_bo_flush(ctx,
-							block->reloc[id].flush_flags,
-							block->reloc[id].flush_mask,
-							block->reloc[id].bo);
-			}
 		}
 	}
 	memcpy(&ctx->pm4[ctx->pm4_cdwords], block->pm4, block->pm4_ndwords * 4);




More information about the mesa-commit mailing list