summaryrefslogtreecommitdiffstats
path: root/src/mesa/drivers/dri/i965/intel_batchbuffer.c
diff options
context:
space:
mode:
authorKenneth Graunke <kenneth@whitecape.org>2013-10-15 19:32:53 -0700
committerKenneth Graunke <kenneth@whitecape.org>2013-11-21 15:01:13 -0800
commita4bf7f6b6e612626c4e4fc21507ac213a7ba4b00 (patch)
tree40afa9ca9e17152f8c7339d06a543ee78edc6dfb /src/mesa/drivers/dri/i965/intel_batchbuffer.c
parentbb9d2eab8934fe526e7128e5902fffc2f5a050d3 (diff)
downloadexternal_mesa3d-a4bf7f6b6e612626c4e4fc21507ac213a7ba4b00.zip
external_mesa3d-a4bf7f6b6e612626c4e4fc21507ac213a7ba4b00.tar.gz
external_mesa3d-a4bf7f6b6e612626c4e4fc21507ac213a7ba4b00.tar.bz2
i965: Move brw_emit_query_begin() to the render ring prelude.
Without hardware contexts, the pipeline statistics registers are free-running and include data from every 3D application running. In order to find out the contributions of one particular context, we need to take a snapshot at the start and end of each batch. Previously, we emitted the PIPE_CONTROL necessary to capture PS_DEPTH_COUNT when drawing primitives. Special tracking ensured it happened only on the first draw of the batch, rather than on every draw. Moving this to brw_new_batch increases symmetry, since the final snapshot has always been in brw_finish_batch, which is just a few lines below. It should be basically equivalent. Signed-off-by: Kenneth Graunke <kenneth@whitecape.org> Reviewed-by: Eric Anholt <eric@anholt.net>
Diffstat (limited to 'src/mesa/drivers/dri/i965/intel_batchbuffer.c')
-rw-r--r--src/mesa/drivers/dri/i965/intel_batchbuffer.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/mesa/drivers/dri/i965/intel_batchbuffer.c b/src/mesa/drivers/dri/i965/intel_batchbuffer.c
index d054e44..20c924e 100644
--- a/src/mesa/drivers/dri/i965/intel_batchbuffer.c
+++ b/src/mesa/drivers/dri/i965/intel_batchbuffer.c
@@ -182,6 +182,11 @@ do_batch_dump(struct brw_context *brw)
void
intel_batchbuffer_emit_render_ring_prelude(struct brw_context *brw)
{
+ /* Without hardware contexts, we need to capture the pipeline statistics
+ * registers at the start and end of each render ring batch, so we can see
+ * what that batch contributed. Emit state packets to write them to a BO.
+ */
+ brw_emit_query_begin(brw);
}
/**
@@ -234,6 +239,9 @@ brw_new_batch(struct brw_context *brw)
static void
brw_finish_batch(struct brw_context *brw)
{
+ /* Capture the closing pipeline statistics register values necessary to
+ * support query objects (in the non-hardware context world).
+ */
brw_emit_query_end(brw);
if (brw->curbe.curbe_bo) {