From: Kenneth Graunke Date: Tue, 29 Oct 2013 03:10:40 +0000 (-0700) Subject: i965: Introduce a "render ring prelude" hook. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=bb9d2eab8934fe526e7128e5902fffc2f5a050d3;p=mesa.git i965: Introduce a "render ring prelude" hook. The new intel_batchbuffer_emit_render_ring_prelude() hook will be called when switching from BLT or UNKNOWN_RING to RENDER_RING. This provides a place to emit state that should go at the start of each render ring batch, with minimal overhead. Signed-off-by: Kenneth Graunke Reviewed-by: Eric Anholt --- diff --git a/src/mesa/drivers/dri/i965/intel_batchbuffer.c b/src/mesa/drivers/dri/i965/intel_batchbuffer.c index d8eb3fc8837..d054e444d9f 100644 --- a/src/mesa/drivers/dri/i965/intel_batchbuffer.c +++ b/src/mesa/drivers/dri/i965/intel_batchbuffer.c @@ -179,6 +179,11 @@ do_batch_dump(struct brw_context *brw) } } +void +intel_batchbuffer_emit_render_ring_prelude(struct brw_context *brw) +{ +} + /** * Called when starting a new batch buffer. */ diff --git a/src/mesa/drivers/dri/i965/intel_batchbuffer.h b/src/mesa/drivers/dri/i965/intel_batchbuffer.h index f7638bcb3d8..861aed418bf 100644 --- a/src/mesa/drivers/dri/i965/intel_batchbuffer.h +++ b/src/mesa/drivers/dri/i965/intel_batchbuffer.h @@ -24,6 +24,7 @@ extern "C" { struct intel_batchbuffer; +void intel_batchbuffer_emit_render_ring_prelude(struct brw_context *brw); void intel_batchbuffer_init(struct brw_context *brw); void intel_batchbuffer_free(struct brw_context *brw); void intel_batchbuffer_save_state(struct brw_context *brw); @@ -118,10 +119,14 @@ intel_batchbuffer_require_space(struct brw_context *brw, GLuint sz, if (intel_batchbuffer_space(brw) < sz) intel_batchbuffer_flush(brw); + enum brw_gpu_ring prev_ring = brw->batch.ring; /* The intel_batchbuffer_flush() calls above might have changed * brw->batch.ring to UNKNOWN_RING, so we need to set it here at the end. */ brw->batch.ring = ring; + + if (unlikely(prev_ring == UNKNOWN_RING && ring == RENDER_RING)) + intel_batchbuffer_emit_render_ring_prelude(brw); } static INLINE void