Mesa (master): freedreno/a4xx: add ARB_instanced_arrays support

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


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

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

freedreno/a4xx: add ARB_instanced_arrays support

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

---

 src/gallium/drivers/freedreno/a4xx/fd4_emit.c    |    5 +++--
 src/gallium/drivers/freedreno/freedreno_screen.c |    4 +---
 2 files changed, 4 insertions(+), 5 deletions(-)

diff --git a/src/gallium/drivers/freedreno/a4xx/fd4_emit.c b/src/gallium/drivers/freedreno/a4xx/fd4_emit.c
index c1d7c40..6540e1d 100644
--- a/src/gallium/drivers/freedreno/a4xx/fd4_emit.c
+++ b/src/gallium/drivers/freedreno/a4xx/fd4_emit.c
@@ -322,10 +322,11 @@ fd4_emit_vertex_bufs(struct fd_ringbuffer *ring, struct fd4_emit *emit)
 			OUT_PKT0(ring, REG_A4XX_VFD_FETCH(j), 4);
 			OUT_RING(ring, A4XX_VFD_FETCH_INSTR_0_FETCHSIZE(fs - 1) |
 					A4XX_VFD_FETCH_INSTR_0_BUFSTRIDE(vb->stride) |
+					COND(elem->instance_divisor, A4XX_VFD_FETCH_INSTR_0_INSTANCED) |
 					COND(switchnext, A4XX_VFD_FETCH_INSTR_0_SWITCHNEXT));
 			OUT_RELOC(ring, rsc->bo, off, 0, 0);
 			OUT_RING(ring, A4XX_VFD_FETCH_INSTR_2_SIZE(size));
-			OUT_RING(ring, 0x00000001);
+			OUT_RING(ring, A4XX_VFD_FETCH_INSTR_3_STEPRATE(MAX2(1, elem->instance_divisor)));
 
 			OUT_PKT0(ring, REG_A4XX_VFD_DECODE_INSTR(j), 1);
 			OUT_RING(ring, A4XX_VFD_DECODE_INSTR_CONSTFILL |
@@ -351,7 +352,7 @@ fd4_emit_vertex_bufs(struct fd_ringbuffer *ring, struct fd4_emit *emit)
 			A4XX_VFD_CONTROL_1_REGID4VTX(vertex_regid) |
 			A4XX_VFD_CONTROL_1_REGID4INST(instance_regid));
 	OUT_RING(ring, 0x00000000);   /* XXX VFD_CONTROL_2 */
-	OUT_RING(ring, 0x0000fc00);   /* XXX VFD_CONTROL_3 */
+	OUT_RING(ring, A4XX_VFD_CONTROL_3_REGID_VTXCNT(regid(63, 0)));
 	OUT_RING(ring, 0x00000000);   /* XXX VFD_CONTROL_4 */
 
 	/* cache invalidate, otherwise vertex fetch could see
diff --git a/src/gallium/drivers/freedreno/freedreno_screen.c b/src/gallium/drivers/freedreno/freedreno_screen.c
index 97bab9d..2973458 100644
--- a/src/gallium/drivers/freedreno/freedreno_screen.c
+++ b/src/gallium/drivers/freedreno/freedreno_screen.c
@@ -170,10 +170,8 @@ fd_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
 	case PIPE_CAP_SM3:
 	case PIPE_CAP_PRIMITIVE_RESTART:
 	case PIPE_CAP_TGSI_INSTANCEID:
-		return is_a3xx(screen) || is_a4xx(screen);
-
 	case PIPE_CAP_VERTEX_ELEMENT_INSTANCE_DIVISOR:
-		return is_a3xx(screen) && glsl130;
+		return is_a3xx(screen) || is_a4xx(screen);
 
 	case PIPE_CAP_CONSTANT_BUFFER_OFFSET_ALIGNMENT:
 		return 256;




More information about the mesa-commit mailing list