From: Rob Clark Date: Sun, 20 Jul 2014 15:26:56 +0000 (-0400) Subject: freedreno/a3xx: add back a few stalls X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=3a7da7f5ecc476df64a84a2bdb19b0ba8f129cc6;p=mesa.git freedreno/a3xx: add back a few stalls Technically we should not need these. CP_LOAD_STATE can be pipelined. But removing them broke a few piglit tests, like fbo-depth- GL_DEPTH_COMPONENT24-readpixels. I expect these are just masking a problem elsewhere, or perhaps they are only needed under some more specific circumstances. But until that is understood properly, give back a bit of the perf boost we got from c63450e8. Signed-off-by: Rob Clark --- diff --git a/src/gallium/drivers/freedreno/a3xx/fd3_emit.c b/src/gallium/drivers/freedreno/a3xx/fd3_emit.c index f77c7226b5b..6bbd9bf6330 100644 --- a/src/gallium/drivers/freedreno/a3xx/fd3_emit.c +++ b/src/gallium/drivers/freedreno/a3xx/fd3_emit.c @@ -486,9 +486,15 @@ fd3_emit_state(struct fd_context *ctx, struct fd_ringbuffer *ring, fd3_program_emit(ring, prog, key); } + /* TODO we should not need this or fd_wfi() before emit_constants(): + */ + OUT_PKT3(ring, CP_EVENT_WRITE, 1); + OUT_RING(ring, HLSQ_FLUSH); + if ((dirty & (FD_DIRTY_PROG | FD_DIRTY_CONSTBUF)) && /* evil hack to deal sanely with clear path: */ (prog == &ctx->prog)) { + fd_wfi(ctx, ring); emit_constants(ring, SB_VERT_SHADER, &ctx->constbuf[PIPE_SHADER_VERTEX], (prog->dirty & FD_SHADER_DIRTY_VP) ? vp : NULL); @@ -525,6 +531,8 @@ fd3_emit_state(struct fd_context *ctx, struct fd_ringbuffer *ring, A3XX_RB_BLEND_ALPHA_FLOAT(bcolor->color[3])); } + if (dirty & (FD_DIRTY_VERTTEX | FD_DIRTY_FRAGTEX)) + fd_wfi(ctx, ring); if (dirty & FD_DIRTY_VERTTEX) { if (vp->has_samp)