summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKenneth Graunke <kenneth@whitecape.org>2013-10-28 20:10:40 -0700
committerKenneth Graunke <kenneth@whitecape.org>2013-11-21 15:01:13 -0800
commitbb9d2eab8934fe526e7128e5902fffc2f5a050d3 (patch)
tree30e536fd686f2d885621d3fc40b8d39d184f2587
parent395a32717df494353703f3581edcd3ba380f16d6 (diff)
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 <kenneth@whitecape.org> Reviewed-by: Eric Anholt <eric@anholt.net>
-rw-r--r--src/mesa/drivers/dri/i965/intel_batchbuffer.c5
-rw-r--r--src/mesa/drivers/dri/i965/intel_batchbuffer.h5
2 files changed, 10 insertions, 0 deletions
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