Mesa (master): freedreno/a2xx: move setup/restore cmds into binning pass

Rob Clark robclark at kemper.freedesktop.org
Sat Jul 2 13:20:01 UTC 2016


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

Author: Rob Clark <robclark at freedesktop.org>
Date:   Fri May 20 16:00:26 2016 -0400

freedreno/a2xx: move setup/restore cmds into binning pass

Rather than doing a separate submit at context create, move these cmds
to before first tile, as is done on a3xx/a4xx.  Otherwise state can
be overwritten by other contexts.

Signed-off-by: Rob Clark <robdclark at gmail.com>

---

 src/gallium/drivers/freedreno/a2xx/fd2_context.c | 2 --
 src/gallium/drivers/freedreno/a2xx/fd2_emit.c    | 7 +------
 src/gallium/drivers/freedreno/a2xx/fd2_emit.h    | 2 +-
 src/gallium/drivers/freedreno/a2xx/fd2_gmem.c    | 2 ++
 4 files changed, 4 insertions(+), 9 deletions(-)

diff --git a/src/gallium/drivers/freedreno/a2xx/fd2_context.c b/src/gallium/drivers/freedreno/a2xx/fd2_context.c
index 058f821..ec76a22 100644
--- a/src/gallium/drivers/freedreno/a2xx/fd2_context.c
+++ b/src/gallium/drivers/freedreno/a2xx/fd2_context.c
@@ -120,7 +120,5 @@ fd2_context_create(struct pipe_screen *pscreen, void *priv, unsigned flags)
 	/* construct vertex state used for solid ops (clear, and gmem<->mem) */
 	fd2_ctx->solid_vertexbuf = create_solid_vertexbuf(pctx);
 
-	fd2_emit_setup(&fd2_ctx->base);
-
 	return pctx;
 }
diff --git a/src/gallium/drivers/freedreno/a2xx/fd2_emit.c b/src/gallium/drivers/freedreno/a2xx/fd2_emit.c
index 4f667ab..f8d03ca 100644
--- a/src/gallium/drivers/freedreno/a2xx/fd2_emit.c
+++ b/src/gallium/drivers/freedreno/a2xx/fd2_emit.c
@@ -316,10 +316,8 @@ fd2_emit_state(struct fd_context *ctx, uint32_t dirty)
 /* emit per-context initialization:
  */
 void
-fd2_emit_setup(struct fd_context *ctx)
+fd2_emit_restore(struct fd_context *ctx, struct fd_ringbuffer *ring)
 {
-	struct fd_ringbuffer *ring = ctx->ring;
-
 	OUT_PKT0(ring, REG_A2XX_TP0_CHICKEN, 1);
 	OUT_RING(ring, 0x00000002);
 
@@ -442,9 +440,6 @@ fd2_emit_setup(struct fd_context *ctx)
 	OUT_RING(ring, 0x00000000);        /* RB_BLEND_GREEN */
 	OUT_RING(ring, 0x00000000);        /* RB_BLEND_BLUE */
 	OUT_RING(ring, 0x000000ff);        /* RB_BLEND_ALPHA */
-
-	fd_ringbuffer_flush(ring);
-	fd_ringmarker_mark(ctx->draw_start);
 }
 
 static void
diff --git a/src/gallium/drivers/freedreno/a2xx/fd2_emit.h b/src/gallium/drivers/freedreno/a2xx/fd2_emit.h
index 3c146c1..6a26c85 100644
--- a/src/gallium/drivers/freedreno/a2xx/fd2_emit.h
+++ b/src/gallium/drivers/freedreno/a2xx/fd2_emit.h
@@ -43,7 +43,7 @@ struct fd2_vertex_buf {
 void fd2_emit_vertex_bufs(struct fd_ringbuffer *ring, uint32_t val,
 		struct fd2_vertex_buf *vbufs, uint32_t n);
 void fd2_emit_state(struct fd_context *ctx, uint32_t dirty);
-void fd2_emit_setup(struct fd_context *ctx);
+void fd2_emit_restore(struct fd_context *ctx, struct fd_ringbuffer *ring);
 
 void fd2_emit_init(struct pipe_context *pctx);
 
diff --git a/src/gallium/drivers/freedreno/a2xx/fd2_gmem.c b/src/gallium/drivers/freedreno/a2xx/fd2_gmem.c
index aa47267..eba2cec 100644
--- a/src/gallium/drivers/freedreno/a2xx/fd2_gmem.c
+++ b/src/gallium/drivers/freedreno/a2xx/fd2_gmem.c
@@ -336,6 +336,8 @@ fd2_emit_tile_init(struct fd_context *ctx)
 	enum pipe_format format = pipe_surface_format(pfb->cbufs[0]);
 	uint32_t reg;
 
+	fd2_emit_restore(ctx, ctx->ring);
+
 	OUT_PKT3(ring, CP_SET_CONSTANT, 4);
 	OUT_RING(ring, CP_REG(REG_A2XX_RB_SURFACE_INFO));
 	OUT_RING(ring, gmem->bin_w);                 /* RB_SURFACE_INFO */




More information about the mesa-commit mailing list