[Mesa-dev] [PATCH 1/2] i965/bufmgr: Add a create_from_prime_tiled function
Jason Ekstrand
jason at jlekstrand.net
Mon Jan 22 04:05:55 UTC 2018
This new function is an import and a set tiling in one go.
---
src/mesa/drivers/dri/i965/brw_bufmgr.c | 41 ++++++++++++++++++++++++++--------
src/mesa/drivers/dri/i965/brw_bufmgr.h | 4 ++++
2 files changed, 36 insertions(+), 9 deletions(-)
diff --git a/src/mesa/drivers/dri/i965/brw_bufmgr.c b/src/mesa/drivers/dri/i965/brw_bufmgr.c
index 469895e..889350c 100644
--- a/src/mesa/drivers/dri/i965/brw_bufmgr.c
+++ b/src/mesa/drivers/dri/i965/brw_bufmgr.c
@@ -1133,8 +1133,9 @@ brw_bo_get_tiling(struct brw_bo *bo, uint32_t *tiling_mode,
return 0;
}
-struct brw_bo *
-brw_bo_gem_create_from_prime(struct brw_bufmgr *bufmgr, int prime_fd)
+static struct brw_bo *
+brw_bo_gem_create_from_prime_internal(struct brw_bufmgr *bufmgr, int prime_fd,
+ int tiling_mode, uint32_t stride)
{
int ret;
uint32_t handle;
@@ -1185,14 +1186,18 @@ brw_bo_gem_create_from_prime(struct brw_bufmgr *bufmgr, int prime_fd)
bo->reusable = false;
bo->external = true;
- memclear(get_tiling);
- get_tiling.handle = bo->gem_handle;
- if (drmIoctl(bufmgr->fd, DRM_IOCTL_I915_GEM_GET_TILING, &get_tiling))
- goto err;
+ if (tiling_mode < 0) {
+ memclear(get_tiling);
+ get_tiling.handle = bo->gem_handle;
+ if (drmIoctl(bufmgr->fd, DRM_IOCTL_I915_GEM_GET_TILING, &get_tiling))
+ goto err;
- bo->tiling_mode = get_tiling.tiling_mode;
- bo->swizzle_mode = get_tiling.swizzle_mode;
- /* XXX stride is unknown */
+ bo->tiling_mode = get_tiling.tiling_mode;
+ bo->swizzle_mode = get_tiling.swizzle_mode;
+ /* XXX stride is unknown */
+ } else {
+ bo_set_tiling_internal(bo, tiling_mode, stride);
+ }
out:
mtx_unlock(&bufmgr->lock);
@@ -1204,6 +1209,24 @@ err:
return NULL;
}
+struct brw_bo *
+brw_bo_gem_create_from_prime(struct brw_bufmgr *bufmgr, int prime_fd)
+{
+ return brw_bo_gem_create_from_prime_internal(bufmgr, prime_fd, -1, 0);
+}
+
+struct brw_bo *
+brw_bo_gem_create_from_prime_tiled(struct brw_bufmgr *bufmgr, int prime_fd,
+ uint32_t tiling_mode, uint32_t stride)
+{
+ assert(tiling_mode == I915_TILING_NONE ||
+ tiling_mode == I915_TILING_X ||
+ tiling_mode == I915_TILING_Y);
+
+ return brw_bo_gem_create_from_prime_internal(bufmgr, prime_fd,
+ tiling_mode, stride);
+}
+
static void
brw_bo_make_external(struct brw_bo *bo)
{
diff --git a/src/mesa/drivers/dri/i965/brw_bufmgr.h b/src/mesa/drivers/dri/i965/brw_bufmgr.h
index 8bfb0e4..6811e78 100644
--- a/src/mesa/drivers/dri/i965/brw_bufmgr.h
+++ b/src/mesa/drivers/dri/i965/brw_bufmgr.h
@@ -339,6 +339,10 @@ void brw_destroy_hw_context(struct brw_bufmgr *bufmgr, uint32_t ctx_id);
int brw_bo_gem_export_to_prime(struct brw_bo *bo, int *prime_fd);
struct brw_bo *brw_bo_gem_create_from_prime(struct brw_bufmgr *bufmgr,
int prime_fd);
+struct brw_bo *brw_bo_gem_create_from_prime_tiled(struct brw_bufmgr *bufmgr,
+ int prime_fd,
+ uint32_t tiling_mode,
+ uint32_t stride);
uint32_t brw_bo_export_gem_handle(struct brw_bo *bo);
--
2.5.0.400.gff86faf
More information about the mesa-dev
mailing list