Rather than split the render batch setup between two hooks, coalesce it into a single callback. To simplify this, move some of the state dirtying from the start to the finish hook hook.
Signed-off-by: Chris Wilson <ch...@chris-wilson.co.uk> --- src/mesa/drivers/dri/i965/brw_context.c | 15 ++++++++++----- src/mesa/drivers/dri/i965/intel_batchbuffer.c | 16 ++++------------ src/mesa/drivers/dri/i965/intel_batchbuffer.h | 1 - 3 files changed, 14 insertions(+), 18 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_context.c b/src/mesa/drivers/dri/i965/brw_context.c index 4ee766e94f..99190f06cd 100644 --- a/src/mesa/drivers/dri/i965/brw_context.c +++ b/src/mesa/drivers/dri/i965/brw_context.c @@ -1755,6 +1755,9 @@ void brw_batch_start_hook(brw_batch *batch) { struct brw_context *brw = container_of(batch, brw, batch); + if (batch->ring != RENDER_RING) + return; + /* If the kernel supports hardware contexts, then most hardware state is * preserved between batches; we only need to re-emit state that is required * to be in every batch. Otherwise we need to re-emit all the state that @@ -1763,13 +1766,8 @@ void brw_batch_start_hook(brw_batch *batch) */ if (!batch->hw_ctx) brw->ctx.NewDriverState |= BRW_NEW_CONTEXT; - brw->ctx.NewDriverState |= BRW_NEW_BATCH; - brw->state_batch_count = 0; - - brw->ib.type = -1; - /* We need to periodically reap the shader time results, because rollover * happens every few seconds. We also want to see results every once in a * while, because many programs won't cleanly destroy our context, so the @@ -1829,6 +1827,13 @@ void brw_batch_finish_hook(brw_batch *batch) brw_emit_query_end(brw); brw->cache.bo_used_by_gpu = true; + + brw->state_batch_count = 0; + + brw->ib.type = -1; + + if (brw->use_resource_streamer) + gen7_reset_hw_bt_pool_offsets(brw); } void brw_batch_report_flush_hook(struct brw_batch *batch, diff --git a/src/mesa/drivers/dri/i965/intel_batchbuffer.c b/src/mesa/drivers/dri/i965/intel_batchbuffer.c index 4c5a640aff..7b2919f685 100644 --- a/src/mesa/drivers/dri/i965/intel_batchbuffer.c +++ b/src/mesa/drivers/dri/i965/intel_batchbuffer.c @@ -152,7 +152,7 @@ intel_batchbuffer_require_space(struct brw_batch *batch, GLuint sz, batch->ring = ring; if (unlikely(prev_ring == UNKNOWN_RING && ring == RENDER_RING)) - intel_batchbuffer_emit_render_ring_prelude(batch); + brw_batch_start_hook(batch); } static void @@ -195,12 +195,6 @@ do_batch_dump(struct brw_context *brw) } } -void -intel_batchbuffer_emit_render_ring_prelude(struct brw_batch *batch) -{ - /* Un-used currently */ -} - /** * Called when starting a new batch buffer. */ @@ -210,8 +204,6 @@ brw_new_batch(struct brw_context *brw) /* Create a new batchbuffer and reset the associated state: */ drm_intel_gem_bo_clear_relocs(brw->batch.bo, 0); intel_batchbuffer_reset(&brw->batch, brw->has_llc); - - brw_batch_start_hook(&brw->batch); } static void @@ -371,9 +363,6 @@ brw_batch_flush(struct brw_batch *batch, struct perf_debug *info) drm_intel_bo_wait_rendering(brw->batch.bo); } - if (brw->use_resource_streamer) - gen7_reset_hw_bt_pool_offsets(brw); - /* Start a new batch buffer. */ brw_new_batch(brw); @@ -470,6 +459,9 @@ void brw_batch_end(struct brw_batch *batch) batch->no_batch_wrap = true; batch->ring = ring; + if (ring == RENDER_RING) + brw_batch_start_hook(batch); + batch->repeat = true; longjmp(batch->jmpbuf, 1); } diff --git a/src/mesa/drivers/dri/i965/intel_batchbuffer.h b/src/mesa/drivers/dri/i965/intel_batchbuffer.h index b7c90df475..fb03c474a6 100644 --- a/src/mesa/drivers/dri/i965/intel_batchbuffer.h +++ b/src/mesa/drivers/dri/i965/intel_batchbuffer.h @@ -18,7 +18,6 @@ struct brw_batch; struct brw_context; enum brw_gpu_ring; -void intel_batchbuffer_emit_render_ring_prelude(struct brw_batch *batch); int intel_batchbuffer_init(struct brw_batch *batch, dri_bufmgr *bufmgr, int gen, bool has_llc); void intel_batchbuffer_free(struct brw_batch *brw); -- 2.11.0 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev