summaryrefslogtreecommitdiffstats
path: root/src/mesa/drivers
diff options
context:
space:
mode:
authorKenneth Graunke <[email protected]>2013-05-17 10:55:35 -0700
committerKenneth Graunke <[email protected]>2013-05-21 13:29:22 -0700
commiteaa6fbe6d54dc99efac4ab8e800edef65ce8220d (patch)
tree7a3595add87347728c3c7430a6dfb3a5a9e08206 /src/mesa/drivers
parent6837ebd00f182b5a73b60a57d47d79f72b6945a3 (diff)
i965: Stop using the kernel SOL reset feature.
We can just do it ourselves with MI_LOAD_REGISTER_IMM. Signed-off-by: Kenneth Graunke <[email protected]> Reviewed-by: Eric Anholt <[email protected]> Reviewed-by: Paul Berry <[email protected]>
Diffstat (limited to 'src/mesa/drivers')
-rw-r--r--src/mesa/drivers/dri/i965/gen6_sol.c13
-rw-r--r--src/mesa/drivers/dri/intel/intel_batchbuffer.c4
-rw-r--r--src/mesa/drivers/dri/intel/intel_context.h1
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;