-/**
- * called from intel_batchbuffer_flush and children before sending a
- * batchbuffer off.
- */
-static void brw_finish_batch(struct intel_context *intel)
-{
- struct brw_context *brw = brw_context(&intel->ctx);
- brw_emit_query_end(brw);
-}
+#include "brw_context.h"
+#include "brw_batchbuffer.h"
+
+#include "util/u_upload_mgr.h"
+
-/**
- * called from intelFlushBatchLocked
+
+/* All batchbuffer flushes must go through this function.
*/
-static void brw_new_batch( struct brw_context *brw )
+void brw_context_flush( struct brw_context *brw )
{
- /* Check that we didn't just wrap our batchbuffer at a bad time. */
- assert(!brw->no_batch_wrap);
+ /*
+ *
+ */
+ brw_emit_query_end(brw);
- brw->curbe.need_new_bo = GL_TRUE;
+ /* Move to the end of the current upload buffer so that we'll force choosing
+ * a new buffer next time.
+ */
+ u_upload_flush( brw->vb.upload_vertex );
+ u_upload_flush( brw->vb.upload_index );
+
+ _brw_batchbuffer_flush( brw->batch, __FILE__, __LINE__ );
/* Mark all context state as needing to be re-emitted.
* This is probably not as severe as on 915, since almost all of our state
* is just in referenced buffers.
*/
brw->state.dirty.brw |= BRW_NEW_CONTEXT;
-
brw->state.dirty.mesa |= ~0;
brw->state.dirty.brw |= ~0;
brw->state.dirty.cache |= ~0;
- /* Move to the end of the current upload buffer so that we'll force choosing
- * a new buffer next time.
- */
- if (brw->vb.upload.bo != NULL) {
- brw->sws->bo_unreference(brw->vb.upload.bo);
- brw->vb.upload.bo = NULL;
- brw->vb.upload.offset = 0;
- }
+ brw->curbe.need_new_bo = GL_TRUE;
}
-
-static void brw_note_fence( struct brw_context *brw, GLuint fence )
+static void
+brw_flush( struct pipe_context *pipe,
+ unsigned flags,
+ struct pipe_fence_handle **fence )
{
- brw_context(&intel->ctx)->state.dirty.brw |= BRW_NEW_FENCE;
+ brw_context_flush( brw_context( pipe ) );
+ if (fence)
+ *fence = NULL;
}
-/* called from intelWaitForIdle() and intelFlush()
- *
- * For now, just flush everything. Could be smarter later.
- */
-static GLuint brw_flush_cmd( void )
+void brw_pipe_flush_init( struct brw_context *brw )
{
- struct brw_mi_flush flush;
- flush.opcode = CMD_MI_FLUSH;
- flush.pad = 0;
- flush.flags = BRW_FLUSH_STATE_CACHE;
- return *(GLuint *)&flush;
+ brw->base.flush = brw_flush;
}
+void brw_pipe_flush_cleanup( struct brw_context *brw )
+{
+}