diff options
author | Rob Clark <[email protected]> | 2016-07-19 13:22:01 -0400 |
---|---|---|
committer | Rob Clark <[email protected]> | 2016-07-30 09:23:42 -0400 |
commit | 9f0eb6952790bffe2670f26d399f15acec199cac (patch) | |
tree | 5f432f9e957c065bd9a27f615ac286583afd2e9b /src/gallium/drivers/freedreno/a4xx | |
parent | e6bfe1c7734cfbf41a763797527db6cb49fa1566 (diff) |
freedreno: drop needs_rb_fbd
We need to emit RB_FRAME_BUFFER_DIMENSION once per batch.. tracking this
in fd_context is wrong when the gmem code executes asynchronously from
the flush_queue worker. But in fact we don't really need to track it at
all. We cannot assume previous value at the beginning of the batch
(because of other processes potentially using the GPU), so just drop the
tracking and emit it in _tile_init().
Signed-off-by: Rob Clark <[email protected]>
Diffstat (limited to 'src/gallium/drivers/freedreno/a4xx')
-rw-r--r-- | src/gallium/drivers/freedreno/a4xx/fd4_emit.c | 2 | ||||
-rw-r--r-- | src/gallium/drivers/freedreno/a4xx/fd4_gmem.c | 14 |
2 files changed, 6 insertions, 10 deletions
diff --git a/src/gallium/drivers/freedreno/a4xx/fd4_emit.c b/src/gallium/drivers/freedreno/a4xx/fd4_emit.c index 7ddb38a588b..e0f413f41e6 100644 --- a/src/gallium/drivers/freedreno/a4xx/fd4_emit.c +++ b/src/gallium/drivers/freedreno/a4xx/fd4_emit.c @@ -887,8 +887,6 @@ fd4_emit_restore(struct fd_batch *batch, struct fd_ringbuffer *ring) OUT_RING(ring, 0x0); fd_hw_query_enable(batch, ring); - - ctx->needs_rb_fbd = true; } static void diff --git a/src/gallium/drivers/freedreno/a4xx/fd4_gmem.c b/src/gallium/drivers/freedreno/a4xx/fd4_gmem.c index d9b0631306d..32541fe06f0 100644 --- a/src/gallium/drivers/freedreno/a4xx/fd4_gmem.c +++ b/src/gallium/drivers/freedreno/a4xx/fd4_gmem.c @@ -664,6 +664,7 @@ static void fd4_emit_tile_init(struct fd_batch *batch) { struct fd_ringbuffer *ring = batch->gmem; + struct pipe_framebuffer_state *pfb = &batch->framebuffer; struct fd_gmem_stateobj *gmem = &batch->ctx->gmem; fd4_emit_restore(batch, ring); @@ -674,6 +675,11 @@ fd4_emit_tile_init(struct fd_batch *batch) update_vsc_pipe(batch); + fd_wfi(batch, ring); + OUT_PKT0(ring, REG_A4XX_RB_FRAME_BUFFER_DIMENSION, 1); + OUT_RING(ring, A4XX_RB_FRAME_BUFFER_DIMENSION_WIDTH(pfb->width) | + A4XX_RB_FRAME_BUFFER_DIMENSION_HEIGHT(pfb->height)); + if (use_hw_binning(batch)) { OUT_PKT0(ring, REG_A4XX_RB_MODE_CONTROL, 1); OUT_RING(ring, A4XX_RB_MODE_CONTROL_WIDTH(gmem->bin_w) | @@ -744,14 +750,6 @@ fd4_emit_tile_prep(struct fd_batch *batch, struct fd_tile *tile) } else { OUT_RING(ring, A4XX_GRAS_DEPTH_CONTROL_FORMAT(DEPTH4_NONE)); } - - if (ctx->needs_rb_fbd) { - fd_wfi(batch, ring); - OUT_PKT0(ring, REG_A4XX_RB_FRAME_BUFFER_DIMENSION, 1); - OUT_RING(ring, A4XX_RB_FRAME_BUFFER_DIMENSION_WIDTH(pfb->width) | - A4XX_RB_FRAME_BUFFER_DIMENSION_HEIGHT(pfb->height)); - ctx->needs_rb_fbd = false; - } } /* before IB to rendering cmds: */ |