From eaa6fbe6d54dc99efac4ab8e800edef65ce8220d Mon Sep 17 00:00:00 2001 From: Kenneth Graunke Date: Fri, 17 May 2013 10:55:35 -0700 Subject: [PATCH] i965: Stop using the kernel SOL reset feature. We can just do it ourselves with MI_LOAD_REGISTER_IMM. Signed-off-by: Kenneth Graunke Reviewed-by: Eric Anholt Reviewed-by: Paul Berry --- src/mesa/drivers/dri/i965/gen6_sol.c | 13 ++++++++----- src/mesa/drivers/dri/intel/intel_batchbuffer.c | 4 ---- src/mesa/drivers/dri/intel/intel_context.h | 1 - 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/src/mesa/drivers/dri/i965/gen6_sol.c b/src/mesa/drivers/dri/i965/gen6_sol.c index 3cbf28e7dc4..bb2dd123930 100644 --- a/src/mesa/drivers/dri/i965/gen6_sol.c +++ b/src/mesa/drivers/dri/i965/gen6_sol.c @@ -184,11 +184,14 @@ brw_begin_transform_feedback(struct gl_context *ctx, GLenum mode, brw->sol.offset_0_batch_start = 0; if (intel->gen >= 7) { - /* Ask the kernel to reset the SO offsets for any previous transform - * feedback, so we start at the start of the user's buffer. (note: these - * are not the query counters) - */ - intel->batch.needs_sol_reset = true; + /* Reset the SOL buffer offset register. */ + for (int i = 0; i < 4; i++) { + BEGIN_BATCH(3); + OUT_BATCH(MI_LOAD_REGISTER_IMM | (3 - 2)); + OUT_BATCH(GEN7_SO_WRITE_OFFSET(i)); + OUT_BATCH(0); + ADVANCE_BATCH(); + } } } diff --git a/src/mesa/drivers/dri/intel/intel_batchbuffer.c b/src/mesa/drivers/dri/intel/intel_batchbuffer.c index 8c6524e71af..c7f6d56e559 100644 --- a/src/mesa/drivers/dri/intel/intel_batchbuffer.c +++ b/src/mesa/drivers/dri/intel/intel_batchbuffer.c @@ -96,7 +96,6 @@ intel_batchbuffer_reset(struct intel_context *intel) intel->batch.reserved_space = BATCH_RESERVED; intel->batch.state_batch_offset = intel->batch.bo->size; intel->batch.used = 0; - intel->batch.needs_sol_reset = false; } void @@ -199,9 +198,6 @@ do_flush_locked(struct intel_context *intel) flags = I915_EXEC_BLT; } - if (batch->needs_sol_reset) - flags |= I915_EXEC_GEN7_SOL_RESET; - if (ret == 0) { if (unlikely(INTEL_DEBUG & DEBUG_AUB) && intel->vtbl.annotate_aub) intel->vtbl.annotate_aub(intel); diff --git a/src/mesa/drivers/dri/intel/intel_context.h b/src/mesa/drivers/dri/intel/intel_context.h index c0f07ff1f3c..8c50e6e6121 100644 --- a/src/mesa/drivers/dri/intel/intel_context.h +++ b/src/mesa/drivers/dri/intel/intel_context.h @@ -135,7 +135,6 @@ struct intel_batchbuffer { uint32_t state_batch_offset; bool is_blit; - bool needs_sol_reset; struct { uint16_t used; -- 2.30.2