i965: Track when a bo is shared with an external client
authorChris Wilson <chris@chris-wilson.co.uk>
Mon, 19 Jun 2017 10:55:00 +0000 (11:55 +0100)
committerKenneth Graunke <kenneth@whitecape.org>
Mon, 10 Jul 2017 22:55:30 +0000 (15:55 -0700)
If the buffer is being shared with an external client, our own state
tracking may be stale and in some cases we may wish to double check with
the kernel/hw state. At the moment, this is synonymous with not being
reusable, but the semantics between reusable and external are quite
different and we will have more examples of non-reusable buffers in the
near future.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Matt Turner <mattst88@gmail.com>
src/mesa/drivers/dri/i965/brw_bufmgr.c
src/mesa/drivers/dri/i965/brw_bufmgr.h

index ee4a5cfa2c874e68a63015091cc519e7d4603846..ec6ab51c12ef1ac7d1c8e74d04a0bf0219dcf68d 100644 (file)
@@ -483,6 +483,7 @@ brw_bo_gem_create_from_name(struct brw_bufmgr *bufmgr,
    bo->name = name;
    bo->global_name = handle;
    bo->reusable = false;
+   bo->external = true;
 
    _mesa_hash_table_insert(bufmgr->handle_table, &bo->gem_handle, bo);
    _mesa_hash_table_insert(bufmgr->name_table, &bo->global_name, bo);
@@ -997,6 +998,7 @@ brw_bo_gem_create_from_prime(struct brw_bufmgr *bufmgr, int prime_fd)
 
    bo->name = "prime";
    bo->reusable = false;
+   bo->external = true;
 
    memclear(get_tiling);
    get_tiling.handle = bo->gem_handle;
@@ -1027,6 +1029,7 @@ brw_bo_gem_export_to_prime(struct brw_bo *bo, int *prime_fd)
       return -errno;
 
    bo->reusable = false;
+   bo->external = true;
 
    return 0;
 }
@@ -1048,6 +1051,7 @@ brw_bo_flink(struct brw_bo *bo, uint32_t *name)
       if (!bo->global_name) {
          bo->global_name = flink.name;
          bo->reusable = false;
+         bo->external = true;
 
          _mesa_hash_table_insert(bufmgr->name_table, &bo->global_name, bo);
       }
index 80c71825e80dd989bc9d2db62e7ee567761271f7..d388e5ad15097834942f48771b39380902e12e3e 100644 (file)
@@ -123,6 +123,11 @@ struct brw_bo {
     */
    bool reusable;
 
+   /**
+    * Boolean of whether this buffer has been shared with an external client.
+    */
+   bool external;
+
    /**
     * Boolean of whether this buffer is cache coherent
     */