Mesa (master): i965/gen4-5: Emit MI_FLUSH as required prior to switching pipelines.

Francisco Jerez currojerez at kemper.freedesktop.org
Fri Jan 15 04:42:52 UTC 2016


Module: Mesa
Branch: master
Commit: 635be1402c485b154ab1bf23e5448827364e70a5
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=635be1402c485b154ab1bf23e5448827364e70a5

Author: Francisco Jerez <currojerez at riseup.net>
Date:   Sat Jan  2 19:05:48 2016 -0800

i965/gen4-5: Emit MI_FLUSH as required prior to switching pipelines.

AFAIK brw_emit_select_pipeline() is only called once during context
init on Gen4-5, at which point the pipeline is likely to be already
idle so it may just happen to work by luck regardless of the MI_FLUSH.

Reviewed-by: Matt Turner <mattst88 at gmail.com>
Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>

---

 src/mesa/drivers/dri/i965/brw_misc_state.c |   13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/src/mesa/drivers/dri/i965/brw_misc_state.c b/src/mesa/drivers/dri/i965/brw_misc_state.c
index 95edbc9e..8335865 100644
--- a/src/mesa/drivers/dri/i965/brw_misc_state.c
+++ b/src/mesa/drivers/dri/i965/brw_misc_state.c
@@ -923,6 +923,19 @@ brw_emit_select_pipeline(struct brw_context *brw, enum brw_pipeline pipeline)
                                   PIPE_CONTROL_STATE_CACHE_INVALIDATE |
                                   PIPE_CONTROL_INSTRUCTION_INVALIDATE |
                                   PIPE_CONTROL_NO_WRITE);
+
+   } else {
+      /* From "BXML » GT » MI » vol1a GPU Overview » [Instruction]
+       * PIPELINE_SELECT [DevBWR+]":
+       *
+       *   Project: PRE-DEVSNB
+       *
+       *   Software must ensure the current pipeline is flushed via an
+       *   MI_FLUSH or PIPE_CONTROL prior to the execution of PIPELINE_SELECT.
+       */
+      BEGIN_BATCH(1);
+      OUT_BATCH(MI_FLUSH);
+      ADVANCE_BATCH();
    }
 
    /* Select the pipeline */




More information about the mesa-commit mailing list