Mesa (master): freedreno/a6xx: Write multiple regs for SP_VS_OUT_REG and SP_VS_VPC_DST_REG

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu Sep 19 00:32:50 UTC 2019


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

Author: Kristian H. Kristensen <hoegsberg at google.com>
Date:   Mon Jun 10 12:04:21 2019 -0700

freedreno/a6xx: Write multiple regs for SP_VS_OUT_REG and SP_VS_VPC_DST_REG

Compute the number of writes up front.

Signed-off-by: Kristian H. Kristensen <hoegsberg at google.com>
Reviewed-by: Eric Anholt <eric at anholt.net>

---

 src/gallium/drivers/freedreno/a6xx/fd6_program.c | 11 +++++------
 1 file changed, 5 insertions(+), 6 deletions(-)

diff --git a/src/gallium/drivers/freedreno/a6xx/fd6_program.c b/src/gallium/drivers/freedreno/a6xx/fd6_program.c
index 26be370833d..3a1c0a411f9 100644
--- a/src/gallium/drivers/freedreno/a6xx/fd6_program.c
+++ b/src/gallium/drivers/freedreno/a6xx/fd6_program.c
@@ -352,11 +352,11 @@ setup_stateobj(struct fd_ringbuffer *ring, struct fd_screen *screen,
 		setup_stream_out(state, vs, &l);
 	}
 
-	for (i = 0, j = 0; (i < 16) && (j < l.cnt); i++) {
+	debug_assert(l.cnt < 32);
+	OUT_PKT4(ring, REG_A6XX_SP_VS_OUT_REG(0), DIV_ROUND_UP(l.cnt, 2));
+	for (j = 0; j < l.cnt; ) {
 		uint32_t reg = 0;
 
-		OUT_PKT4(ring, REG_A6XX_SP_VS_OUT_REG(i), 1);
-
 		reg |= A6XX_SP_VS_OUT_REG_A_REGID(l.var[j].regid);
 		reg |= A6XX_SP_VS_OUT_REG_A_COMPMASK(l.var[j].compmask);
 		j++;
@@ -368,11 +368,10 @@ setup_stateobj(struct fd_ringbuffer *ring, struct fd_screen *screen,
 		OUT_RING(ring, reg);
 	}
 
-	for (i = 0, j = 0; (i < 8) && (j < l.cnt); i++) {
+	OUT_PKT4(ring, REG_A6XX_SP_VS_VPC_DST_REG(0), DIV_ROUND_UP(l.cnt, 4));
+	for (j = 0; j < l.cnt; ) {
 		uint32_t reg = 0;
 
-		OUT_PKT4(ring, REG_A6XX_SP_VS_VPC_DST_REG(i), 1);
-
 		reg |= A6XX_SP_VS_VPC_DST_REG_OUTLOC0(l.var[j++].loc);
 		reg |= A6XX_SP_VS_VPC_DST_REG_OUTLOC1(l.var[j++].loc);
 		reg |= A6XX_SP_VS_VPC_DST_REG_OUTLOC2(l.var[j++].loc);




More information about the mesa-commit mailing list