i965: Track when a bo is shared with an external client
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>
This commit is contained in:

committed by
Kenneth Graunke

parent
c2c37f5185
commit
b532e3b4a2
@@ -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);
|
||||
}
|
||||
|
@@ -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
|
||||
*/
|
||||
|
Reference in New Issue
Block a user