summaryrefslogtreecommitdiff
path: root/src/gallium/drivers/freedreno/freedreno_draw.c
diff options
context:
space:
mode:
authorRob Clark <robclark@freedesktop.org>2014-09-12 16:52:38 -0400
committerRob Clark <robclark@freedesktop.org>2014-09-12 18:35:39 -0400
commit9b6281a7da02759b0e7570d611e27fe541ffebd6 (patch)
tree8ba9f6e8aad8ec16da5837a8c7d227132a7bbb22 /src/gallium/drivers/freedreno/freedreno_draw.c
parentd13d2fd16132f351ec7c8184f165faeac3b31bb4 (diff)
freedreno: "fix" problems with excessive flushes
4f338c9b introduced logic to trigger a flush rather than overflowing cmdstream buffer. But the threshold was too low, triggering flushes where they were not needed. This caused problems with games like xonotic. Part of the problem is that we need to mark all state dirty between cmdstream submit ioctls, because we cannot rely on state being preserved across ioctls. But even with that, there are still some problems that are still being debugged. For now: 1) correctly mark all state dirty 2) introduce FD_MESA_DEBUG flush flag to force rendering to be flushed between each draw, to trigger problems (so that I can debug) 3) use a more reasonable threshold so for normal usecases we don't trigger the problems This at least corrects the regression, but there is still more debugging to do. Signed-off-by: Rob Clark <robclark@freedesktop.org>
Diffstat (limited to 'src/gallium/drivers/freedreno/freedreno_draw.c')
-rw-r--r--src/gallium/drivers/freedreno/freedreno_draw.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/gallium/drivers/freedreno/freedreno_draw.c b/src/gallium/drivers/freedreno/freedreno_draw.c
index e4634958ba9..eb4637db1a5 100644
--- a/src/gallium/drivers/freedreno/freedreno_draw.c
+++ b/src/gallium/drivers/freedreno/freedreno_draw.c
@@ -172,7 +172,9 @@ fd_draw_vbo(struct pipe_context *pctx, const struct pipe_draw_info *info)
* now we need to do this hack and trigger flush if we are running
* low on remaining space for cmds:
*/
- if ((ctx->ring->cur - ctx->ring->start) > ctx->ring->size/8)
+ if (((ctx->ring->cur - ctx->ring->start) >
+ (ctx->ring->size/4 - FD_TILING_COMMANDS_DWORDS)) ||
+ (fd_mesa_debug & FD_DBG_FLUSH))
fd_context_render(pctx);
}