diff options
-rw-r--r-- | src/gallium/drivers/freedreno/a3xx/fd3_emit.c | 2 | ||||
-rw-r--r-- | src/gallium/drivers/freedreno/a3xx/fd3_gmem.c | 15 | ||||
-rw-r--r-- | src/gallium/drivers/freedreno/a4xx/fd4_emit.c | 2 | ||||
-rw-r--r-- | src/gallium/drivers/freedreno/a4xx/fd4_gmem.c | 14 | ||||
-rw-r--r-- | src/gallium/drivers/freedreno/freedreno_context.h | 6 | ||||
-rw-r--r-- | src/gallium/drivers/freedreno/freedreno_state.c | 4 |
6 files changed, 12 insertions, 31 deletions
diff --git a/src/gallium/drivers/freedreno/a3xx/fd3_emit.c b/src/gallium/drivers/freedreno/a3xx/fd3_emit.c index 0aef89f4054..0fb2ee1181f 100644 --- a/src/gallium/drivers/freedreno/a3xx/fd3_emit.c +++ b/src/gallium/drivers/freedreno/a3xx/fd3_emit.c @@ -896,8 +896,6 @@ fd3_emit_restore(struct fd_batch *batch, struct fd_ringbuffer *ring) fd_wfi(batch, ring); fd_hw_query_enable(batch, ring); - - ctx->needs_rb_fbd = true; } static void diff --git a/src/gallium/drivers/freedreno/a3xx/fd3_gmem.c b/src/gallium/drivers/freedreno/a3xx/fd3_gmem.c index 34e0e39aad7..ec0a77b4140 100644 --- a/src/gallium/drivers/freedreno/a3xx/fd3_gmem.c +++ b/src/gallium/drivers/freedreno/a3xx/fd3_gmem.c @@ -924,6 +924,7 @@ static void fd3_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; uint32_t rb_render_control; @@ -938,6 +939,11 @@ fd3_emit_tile_init(struct fd_batch *batch) update_vsc_pipe(batch); + fd_wfi(batch, ring); + OUT_PKT0(ring, REG_A3XX_RB_FRAME_BUFFER_DIMENSION, 1); + OUT_RING(ring, A3XX_RB_FRAME_BUFFER_DIMENSION_WIDTH(pfb->width) | + A3XX_RB_FRAME_BUFFER_DIMENSION_HEIGHT(pfb->height)); + if (use_hw_binning(batch)) { /* emit hw binning pass: */ emit_binning_pass(batch); @@ -957,18 +963,9 @@ fd3_emit_tile_init(struct fd_batch *batch) static void fd3_emit_tile_prep(struct fd_batch *batch, struct fd_tile *tile) { - struct fd_context *ctx = batch->ctx; struct fd_ringbuffer *ring = batch->gmem; struct pipe_framebuffer_state *pfb = &batch->framebuffer; - if (ctx->needs_rb_fbd) { - fd_wfi(batch, ring); - OUT_PKT0(ring, REG_A3XX_RB_FRAME_BUFFER_DIMENSION, 1); - OUT_RING(ring, A3XX_RB_FRAME_BUFFER_DIMENSION_WIDTH(pfb->width) | - A3XX_RB_FRAME_BUFFER_DIMENSION_HEIGHT(pfb->height)); - ctx->needs_rb_fbd = false; - } - OUT_PKT0(ring, REG_A3XX_RB_MODE_CONTROL, 1); OUT_RING(ring, A3XX_RB_MODE_CONTROL_RENDER_MODE(RB_RENDERING_PASS) | A3XX_RB_MODE_CONTROL_MARB_CACHE_SPLIT_MODE | 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: */ diff --git a/src/gallium/drivers/freedreno/freedreno_context.h b/src/gallium/drivers/freedreno/freedreno_context.h index 557e3715b3b..7b84ea99cbd 100644 --- a/src/gallium/drivers/freedreno/freedreno_context.h +++ b/src/gallium/drivers/freedreno/freedreno_context.h @@ -176,12 +176,6 @@ struct fd_context { */ bool in_blit : 1; - /* Do we need to re-emit RB_FRAME_BUFFER_DIMENSION? At least on a3xx - * it is not a banked context register, so it needs a WFI to update. - * Keep track if it has actually changed, to avoid unneeded WFI. - * */ - bool needs_rb_fbd : 1; - struct pipe_scissor_state scissor; /* we don't have a disable/enable bit for scissor, so instead we keep diff --git a/src/gallium/drivers/freedreno/freedreno_state.c b/src/gallium/drivers/freedreno/freedreno_state.c index 6dad07515a1..8c9040545c2 100644 --- a/src/gallium/drivers/freedreno/freedreno_state.c +++ b/src/gallium/drivers/freedreno/freedreno_state.c @@ -150,10 +150,6 @@ fd_set_framebuffer_state(struct pipe_context *pctx, cso = &ctx->batch->framebuffer; - if ((cso->width != framebuffer->width) || - (cso->height != framebuffer->height)) - ctx->needs_rb_fbd = true; - util_copy_framebuffer_state(cso, framebuffer); ctx->dirty |= FD_DIRTY_FRAMEBUFFER; |