i965: Don't special case the batchbuffer when reference counting.
authorKenneth Graunke <kenneth@whitecape.org>
Sat, 2 Sep 2017 00:32:01 +0000 (17:32 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Fri, 8 Sep 2017 07:21:09 +0000 (00:21 -0700)
We don't need to special case the batch - when we add the batch to the
validation list, we can simply increase the refcount to 2, and when we
make a new batch, we'll drop it back down to 1 (when unreferencing all
buffers in the validation list).  The final reference is still held by
brw->batch.bo, as it was before.

This removes the special case from a bunch of loops.

Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
src/mesa/drivers/dri/i965/intel_batchbuffer.c

index 73cf2528272d57db49de35940161a91e3cdd63d5..08d35ace1357c1fce9796b52c223a6f61f8ab01b 100644 (file)
@@ -115,8 +115,7 @@ add_exec_bo(struct intel_batchbuffer *batch, struct brw_bo *bo)
          return index;
    }
 
-   if (bo != batch->bo)
-      brw_bo_reference(bo);
+   brw_bo_reference(bo);
 
    if (batch->exec_count == batch->exec_array_size) {
       batch->exec_array_size *= 2;
@@ -199,9 +198,7 @@ intel_batchbuffer_reset_to_saved(struct brw_context *brw)
 {
    for (int i = brw->batch.saved.exec_count;
         i < brw->batch.exec_count; i++) {
-      if (brw->batch.exec_bos[i] != brw->batch.bo) {
-         brw_bo_unreference(brw->batch.exec_bos[i]);
-      }
+      brw_bo_unreference(brw->batch.exec_bos[i]);
    }
    brw->batch.reloc_count = brw->batch.saved.reloc_count;
    brw->batch.exec_count = brw->batch.saved.exec_count;
@@ -217,9 +214,7 @@ intel_batchbuffer_free(struct intel_batchbuffer *batch)
    free(batch->cpu_map);
 
    for (int i = 0; i < batch->exec_count; i++) {
-      if (batch->exec_bos[i] != batch->bo) {
-         brw_bo_unreference(batch->exec_bos[i]);
-      }
+      brw_bo_unreference(batch->exec_bos[i]);
    }
    free(batch->relocs);
    free(batch->exec_bos);
@@ -449,9 +444,7 @@ brw_new_batch(struct brw_context *brw)
 {
    /* Unreference any BOs held by the previous batch, and reset counts. */
    for (int i = 0; i < brw->batch.exec_count; i++) {
-      if (brw->batch.exec_bos[i] != brw->batch.bo) {
-         brw_bo_unreference(brw->batch.exec_bos[i]);
-      }
+      brw_bo_unreference(brw->batch.exec_bos[i]);
       brw->batch.exec_bos[i] = NULL;
    }
    brw->batch.reloc_count = 0;