Mesa (master): freedreno/a4xx: pass number of instances to draw

Rob Clark robclark at kemper.freedesktop.org
Tue Feb 24 19:24:48 UTC 2015


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

Author: Rob Clark <robclark at freedesktop.org>
Date:   Sun Dec 21 11:14:24 2014 -0500

freedreno/a4xx: pass number of instances to draw

a4xx has it's own draw packet, so needs equivalent update to what a3xx
already got.

Signed-off-by: Rob Clark <robclark at freedesktop.org>

---

 src/gallium/drivers/freedreno/a4xx/fd4_draw.c |    2 +-
 src/gallium/drivers/freedreno/a4xx/fd4_draw.h |    7 ++++---
 src/gallium/drivers/freedreno/a4xx/fd4_gmem.c |    4 ++--
 3 files changed, 7 insertions(+), 6 deletions(-)

diff --git a/src/gallium/drivers/freedreno/a4xx/fd4_draw.c b/src/gallium/drivers/freedreno/a4xx/fd4_draw.c
index aa3df9f..29dc2ed 100644
--- a/src/gallium/drivers/freedreno/a4xx/fd4_draw.c
+++ b/src/gallium/drivers/freedreno/a4xx/fd4_draw.c
@@ -305,7 +305,7 @@ fd4_clear(struct fd_context *ctx, unsigned buffers,
 	OUT_RING(ring, 0x00000001);
 
 	fd4_draw(ctx, ring, DI_PT_RECTLIST, USE_VISIBILITY,
-			DI_SRC_SEL_AUTO_INDEX, 2, INDEX_SIZE_IGN, 0, 0, NULL);
+			DI_SRC_SEL_AUTO_INDEX, 2, 1, INDEX_SIZE_IGN, 0, 0, NULL);
 
 	OUT_PKT3(ring, CP_UNKNOWN_1A, 1);
 	OUT_RING(ring, 0x00000000);
diff --git a/src/gallium/drivers/freedreno/a4xx/fd4_draw.h b/src/gallium/drivers/freedreno/a4xx/fd4_draw.h
index dd2516a..1bd376c 100644
--- a/src/gallium/drivers/freedreno/a4xx/fd4_draw.h
+++ b/src/gallium/drivers/freedreno/a4xx/fd4_draw.h
@@ -51,7 +51,7 @@ fd4_draw(struct fd_context *ctx, struct fd_ringbuffer *ring,
 		enum pc_di_primtype primtype,
 		enum pc_di_vis_cull_mode vismode,
 		enum pc_di_src_sel src_sel, uint32_t count,
-		enum a4xx_index_size idx_type,
+		uint32_t instances, enum a4xx_index_size idx_type,
 		uint32_t idx_size, uint32_t idx_offset,
 		struct fd_bo *idx_bo)
 {
@@ -73,7 +73,7 @@ fd4_draw(struct fd_context *ctx, struct fd_ringbuffer *ring,
 	} else {
 		OUT_RING(ring, DRAW4(primtype, src_sel, idx_type, vismode));
 	}
-	OUT_RING(ring, 0x1);               /* XXX */
+	OUT_RING(ring, instances);         /* NumInstances */
 	OUT_RING(ring, count);             /* NumIndices */
 	if (idx_bo) {
 		OUT_RING(ring, 0x0);           /* XXX */
@@ -127,7 +127,8 @@ fd4_draw_emit(struct fd_context *ctx, struct fd_ringbuffer *ring,
 	}
 
 	fd4_draw(ctx, ring, ctx->primtypes[info->mode], vismode, src_sel,
-			info->count, idx_type, idx_size, idx_offset, idx_bo);
+			info->count, info->instance_count,
+			idx_type, idx_size, idx_offset, idx_bo);
 }
 
 #endif /* FD4_DRAW_H_ */
diff --git a/src/gallium/drivers/freedreno/a4xx/fd4_gmem.c b/src/gallium/drivers/freedreno/a4xx/fd4_gmem.c
index 7f852e0..2c57995 100644
--- a/src/gallium/drivers/freedreno/a4xx/fd4_gmem.c
+++ b/src/gallium/drivers/freedreno/a4xx/fd4_gmem.c
@@ -156,7 +156,7 @@ emit_gmem2mem_surf(struct fd_context *ctx,
 			A4XX_RB_COPY_DEST_INFO_SWAP(fd4_pipe2swap(psurf->format)));
 
 	fd4_draw(ctx, ring, DI_PT_RECTLIST, IGNORE_VISIBILITY,
-			DI_SRC_SEL_AUTO_INDEX, 2, INDEX_SIZE_IGN, 0, 0, NULL);
+			DI_SRC_SEL_AUTO_INDEX, 2, 1, INDEX_SIZE_IGN, 0, 0, NULL);
 }
 
 static void
@@ -270,7 +270,7 @@ emit_mem2gmem_surf(struct fd_context *ctx, uint32_t base,
 	fd4_emit_gmem_restore_tex(ring, psurf);
 
 	fd4_draw(ctx, ring, DI_PT_RECTLIST, IGNORE_VISIBILITY,
-			DI_SRC_SEL_AUTO_INDEX, 2, INDEX_SIZE_IGN, 0, 0, NULL);
+			DI_SRC_SEL_AUTO_INDEX, 2, 1, INDEX_SIZE_IGN, 0, 0, NULL);
 }
 
 static void




More information about the mesa-commit mailing list