diff options
author | Rob Clark <[email protected]> | 2018-06-18 18:22:29 -0400 |
---|---|---|
committer | Rob Clark <[email protected]> | 2018-06-19 13:02:28 -0400 |
commit | 39b4fdc45f85703daa7fe3804b52b555ebf9f080 (patch) | |
tree | 2ef24fac7cc674aa2d5f6aa0034e67bd5a3553fe /src/gallium/drivers/freedreno/a5xx | |
parent | 0c8d9e923aa9239e20f9bc969faf9caa0b85237f (diff) |
freedreno/a5xx: move emit_marker5() into a5xx backend
The scratch registers move again in a6xx.. so for post-a4xx let's just
move this into the backend, and move the one place it used to be needed
in core into fd5_emit_ib(). For a6xx we will do similar, calling
emit_marker6() from fd6_emit_ib().
Signed-off-by: Rob Clark <[email protected]>
Diffstat (limited to 'src/gallium/drivers/freedreno/a5xx')
-rw-r--r-- | src/gallium/drivers/freedreno/a5xx/fd5_draw.h | 1 | ||||
-rw-r--r-- | src/gallium/drivers/freedreno/a5xx/fd5_emit.c | 9 | ||||
-rw-r--r-- | src/gallium/drivers/freedreno/a5xx/fd5_emit.h | 1 | ||||
-rw-r--r-- | src/gallium/drivers/freedreno/a5xx/fd5_screen.h | 13 |
4 files changed, 24 insertions, 0 deletions
diff --git a/src/gallium/drivers/freedreno/a5xx/fd5_draw.h b/src/gallium/drivers/freedreno/a5xx/fd5_draw.h index 3edfc391fdf..c0d50b29cfd 100644 --- a/src/gallium/drivers/freedreno/a5xx/fd5_draw.h +++ b/src/gallium/drivers/freedreno/a5xx/fd5_draw.h @@ -32,6 +32,7 @@ #include "freedreno_draw.h" #include "fd5_context.h" +#include "fd5_screen.h" /* some bits in common w/ a4xx: */ #include "a4xx/fd4_draw.h" diff --git a/src/gallium/drivers/freedreno/a5xx/fd5_emit.c b/src/gallium/drivers/freedreno/a5xx/fd5_emit.c index 944c62e29c3..9d17bda476c 100644 --- a/src/gallium/drivers/freedreno/a5xx/fd5_emit.c +++ b/src/gallium/drivers/freedreno/a5xx/fd5_emit.c @@ -42,6 +42,7 @@ #include "fd5_program.h" #include "fd5_rasterizer.h" #include "fd5_texture.h" +#include "fd5_screen.h" #include "fd5_format.h" #include "fd5_zsa.h" @@ -1101,7 +1102,15 @@ t7 opcode: CP_WAIT_FOR_IDLE (26) (1 dwords) static void fd5_emit_ib(struct fd_ringbuffer *ring, struct fd_ringbuffer *target) { + /* for debug after a lock up, write a unique counter value + * to scratch6 for each IB, to make it easier to match up + * register dumps to cmdstream. The combination of IB and + * DRAW (scratch7) is enough to "triangulate" the particular + * draw that caused lockup. + */ + emit_marker5(ring, 6); __OUT_IB5(ring, target); + emit_marker5(ring, 6); } static void diff --git a/src/gallium/drivers/freedreno/a5xx/fd5_emit.h b/src/gallium/drivers/freedreno/a5xx/fd5_emit.h index 809ae475cee..bed52d4e87f 100644 --- a/src/gallium/drivers/freedreno/a5xx/fd5_emit.h +++ b/src/gallium/drivers/freedreno/a5xx/fd5_emit.h @@ -33,6 +33,7 @@ #include "fd5_context.h" #include "fd5_format.h" #include "fd5_program.h" +#include "fd5_screen.h" #include "ir3_shader.h" struct fd_ringbuffer; diff --git a/src/gallium/drivers/freedreno/a5xx/fd5_screen.h b/src/gallium/drivers/freedreno/a5xx/fd5_screen.h index ba0c7f15ff9..0a65b3b0737 100644 --- a/src/gallium/drivers/freedreno/a5xx/fd5_screen.h +++ b/src/gallium/drivers/freedreno/a5xx/fd5_screen.h @@ -29,6 +29,19 @@ #include "pipe/p_screen.h" +#include "freedreno_util.h" + +#include "a5xx.xml.h" + void fd5_screen_init(struct pipe_screen *pscreen); +static inline void +emit_marker5(struct fd_ringbuffer *ring, int scratch_idx) +{ + extern unsigned marker_cnt; + unsigned reg = REG_A5XX_CP_SCRATCH_REG(scratch_idx); + OUT_PKT4(ring, reg, 1); + OUT_RING(ring, ++marker_cnt); +} + #endif /* FD5_SCREEN_H_ */ |