int line)
{
struct intel_context *intel = batch->intel;
- GLuint used = batch->ptr - batch->map;
+ GLuint used;
GLboolean was_locked = intel->locked;
if (used == 0)
if (INTEL_DEBUG & DEBUG_BATCH)
fprintf(stderr, "%s:%d: Batchbuffer flush with %db used\n", file, line,
used);
- /* Add the MI_BATCH_BUFFER_END. Always add an MI_FLUSH - this is a
- * performance drain that we would like to avoid.
- */
- if (used & 4) {
- ((int *) batch->ptr)[0] = intel->vtbl.flush_cmd();
- ((int *) batch->ptr)[1] = 0;
- ((int *) batch->ptr)[2] = MI_BATCH_BUFFER_END;
- used += 12;
- }
- else {
- ((int *) batch->ptr)[0] = intel->vtbl.flush_cmd();
- ((int *) batch->ptr)[1] = MI_BATCH_BUFFER_END;
- used += 8;
- }
+
+ /* Emit a flush if the bufmgr doesn't do it for us. */
+ if (!intel->ttm)
+ intel_batchbuffer_emit_dword(intel->batch, intel->vtbl.flush_cmd());
+
+ /* Round batchbuffer usage to 2 DWORDs. */
+ used = batch->ptr - batch->map;
+ if ((used & 4) == 0)
+ intel_batchbuffer_emit_dword(intel->batch, 0); /* noop */
+
+ /* Mark the end of the buffer. */
+ intel_batchbuffer_emit_dword(intel->batch, MI_BATCH_BUFFER_END);
+
+ used = batch->ptr - batch->map;
/* Workaround for recursive batchbuffer flushing: If the window is
* moved, we can get into a case where we try to flush during a