ilo: flush before setting SOL_RESET
authorChia-I Wu <olvaffe@gmail.com>
Mon, 22 Sep 2014 02:35:59 +0000 (10:35 +0800)
committerChia-I Wu <olvaffe@gmail.com>
Mon, 22 Sep 2014 02:41:13 +0000 (10:41 +0800)
SOL_RESET happens before bo execution.  It should not be observed by the
commands that are already in the bo.

Move the code out of the pipeline now that it submits.

src/gallium/drivers/ilo/ilo_3d.c
src/gallium/drivers/ilo/ilo_3d_pipeline.c

index 066a4df62821144580b2defc632a537bc8422ccd..4bc70c67d8733dc386e3781714ac9ea061480d58 100644 (file)
@@ -360,6 +360,14 @@ draw_vbo(struct ilo_3d *hw3d, const struct ilo_state_vector *vec)
    bool success;
    int max_len, before_space;
 
+   /* on GEN7+, we need SOL_RESET to reset the SO write offsets */
+   if (ilo_dev_gen(hw3d->pipeline->dev) >= ILO_GEN(7) &&
+       (vec->dirty & ILO_DIRTY_SO) && vec->so.enabled &&
+       !vec->so.append_bitmask) {
+      ilo_cp_submit(hw3d->cp, "SOL_RESET");
+      ilo_cp_set_one_off_flags(hw3d->cp, INTEL_EXEC_GEN7_SOL_RESET);
+   }
+
    ilo_3d_own_render_ring(hw3d);
 
    if (!hw3d->new_batch) {
index cfe3c5d797770a166917c1ba255d26538598dcc4..298c2ec65b6d67dfba7bfa5132016aaf466026a9 100644 (file)
@@ -154,11 +154,6 @@ ilo_3d_pipeline_emit_draw(struct ilo_3d_pipeline *p,
 {
    bool success;
 
-   /* on GEN7+, we need SOL_RESET to reset the SO write offsets */
-   if (ilo_dev_gen(p->dev) >= ILO_GEN(7) && (vec->dirty & ILO_DIRTY_SO) &&
-       vec->so.enabled && !vec->so.append_bitmask)
-      ilo_cp_set_one_off_flags(p->cp, INTEL_EXEC_GEN7_SOL_RESET);
-
    while (true) {
       struct ilo_builder_snapshot snapshot;