summaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers/freedreno/a5xx
diff options
context:
space:
mode:
authorRob Clark <[email protected]>2018-06-18 18:22:29 -0400
committerRob Clark <[email protected]>2018-06-19 13:02:28 -0400
commit39b4fdc45f85703daa7fe3804b52b555ebf9f080 (patch)
tree2ef24fac7cc674aa2d5f6aa0034e67bd5a3553fe /src/gallium/drivers/freedreno/a5xx
parent0c8d9e923aa9239e20f9bc969faf9caa0b85237f (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.h1
-rw-r--r--src/gallium/drivers/freedreno/a5xx/fd5_emit.c9
-rw-r--r--src/gallium/drivers/freedreno/a5xx/fd5_emit.h1
-rw-r--r--src/gallium/drivers/freedreno/a5xx/fd5_screen.h13
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_ */