iris: move binder pinning outside the dirty == 0 check
authorKenneth Graunke <kenneth@whitecape.org>
Sat, 15 Sep 2018 21:35:47 +0000 (14:35 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Thu, 21 Feb 2019 18:26:08 +0000 (10:26 -0800)
This might be a new batch with back to back non-dirty calls, if so we
need to inherit the old binder...

src/gallium/drivers/iris/iris_state.c

index d1d7123bcc66c1570098ed3e035f340865bc9d85..9aea7a8f0b385d653aa964960f57fc1f266e4a37 100644 (file)
@@ -3489,13 +3489,6 @@ iris_upload_dirty_render_state(struct iris_context *ice,
       }
    }
 
-   /* Always pin the binder.  If we're emitting new binding table pointers,
-    * we need it.  If not, we're probably inheriting old tables via the
-    * context, and need it anyway.  Since true zero-bindings cases are
-    * practically non-existent, just pin it and avoid last_res tracking.
-    */
-   iris_use_pinned_bo(batch, binder->bo, false);
-
    for (int stage = 0; stage <= MESA_SHADER_FRAGMENT; stage++) {
       if (dirty & (IRIS_DIRTY_BINDINGS_VS << stage)) {
          iris_emit_cmd(batch, GENX(3DSTATE_BINDING_TABLE_POINTERS_VS), ptr) {
@@ -3790,6 +3783,13 @@ iris_upload_render_state(struct iris_context *ice,
                          struct iris_batch *batch,
                          const struct pipe_draw_info *draw)
 {
+   /* Always pin the binder.  If we're emitting new binding table pointers,
+    * we need it.  If not, we're probably inheriting old tables via the
+    * context, and need it anyway.  Since true zero-bindings cases are
+    * practically non-existent, just pin it and avoid last_res tracking.
+    */
+   iris_use_pinned_bo(batch, ice->state.binder.bo, false);
+
    iris_upload_dirty_render_state(ice, batch, draw);
 
    if (draw->index_size > 0) {