freedreno/a5xx: split out helper for pipeline stalls
authorRob Clark <robdclark@gmail.com>
Tue, 14 Nov 2017 19:15:27 +0000 (14:15 -0500)
committerRob Clark <robdclark@gmail.com>
Tue, 14 Nov 2017 23:10:51 +0000 (18:10 -0500)
We need a similar thing for indirect draws.

Signed-off-by: Rob Clark <robdclark@gmail.com>
src/gallium/drivers/freedreno/a5xx/fd5_compute.c
src/gallium/drivers/freedreno/a5xx/fd5_context.h

index 362ab1dc544ccb1025a061ebc5575ccfebf5f811..55cddadf600b232bd8a3e2dc38923ead0ecf3949 100644 (file)
@@ -160,12 +160,7 @@ fd5_launch_grid(struct fd_context *ctx, const struct pipe_grid_info *info)
        if (info->indirect) {
                struct fd_resource *rsc = fd_resource(info->indirect);
 
-               OUT_PKT7(ring, CP_EVENT_WRITE, 4);
-               OUT_RING(ring, CACHE_FLUSH_TS);
-               OUT_RELOCW(ring, fd5_context(ctx)->blit_mem, 0, 0, 0);  /* ADDR_LO/HI */
-               OUT_RING(ring, 0x00000000);
-
-               OUT_WFI5(ring);
+               fd5_emit_flush(ctx, ring);
 
                OUT_PKT7(ring, CP_EXEC_CS_INDIRECT, 4);
                OUT_RING(ring, 0x00000000);
index f4d885b40f7fd0b9428877c31cd9025929275eba..37573460c2128a1902facbfdcac038c6ab9e49c9 100644 (file)
@@ -93,4 +93,16 @@ fd5_context(struct fd_context *ctx)
 struct pipe_context *
 fd5_context_create(struct pipe_screen *pscreen, void *priv, unsigned flags);
 
+/* helper for places where we need to stall CP to wait for previous draws: */
+static inline void
+fd5_emit_flush(struct fd_context *ctx, struct fd_ringbuffer *ring)
+{
+       OUT_PKT7(ring, CP_EVENT_WRITE, 4);
+       OUT_RING(ring, CACHE_FLUSH_TS);
+       OUT_RELOCW(ring, fd5_context(ctx)->blit_mem, 0, 0, 0);  /* ADDR_LO/HI */
+       OUT_RING(ring, 0x00000000);
+
+       OUT_WFI5(ring);
+}
+
 #endif /* FD5_CONTEXT_H_ */