[Mesa-stable] [PATCH 3/4] i965/bufmgr: Add a set_tiling helper
Jason Ekstrand
jason at jlekstrand.net
Fri Jan 12 01:40:52 UTC 2018
This helper should be used carefully as setting tiling is a racy
operation since it potentially interacts with other processes. Still,
it is a useful thing to be able to do.
Cc: mesa-stable at lists.freedesktop.org
---
src/mesa/drivers/dri/i965/brw_bufmgr.c | 27 +++++++++++++++++++++++++++
src/mesa/drivers/dri/i965/brw_bufmgr.h | 10 ++++++++++
2 files changed, 37 insertions(+)
diff --git a/src/mesa/drivers/dri/i965/brw_bufmgr.c b/src/mesa/drivers/dri/i965/brw_bufmgr.c
index 469895e..dbd13dd 100644
--- a/src/mesa/drivers/dri/i965/brw_bufmgr.c
+++ b/src/mesa/drivers/dri/i965/brw_bufmgr.c
@@ -1133,6 +1133,33 @@ brw_bo_get_tiling(struct brw_bo *bo, uint32_t *tiling_mode,
return 0;
}
+int
+brw_bo_set_tiling(struct brw_bo *bo, uint32_t tiling_mode,
+ uint32_t stride)
+{
+ struct brw_bufmgr *bufmgr = bo->bufmgr;
+
+ mtx_lock(&bufmgr->lock);
+
+ if (bo->tiling_mode != tiling_mode || bo->stride != stride) {
+ /* We can't have any GTT maps active if we're switching tiling modes */
+ assert(bo->map_gtt == NULL);
+
+ /* This function should only be called immediately after import. If
+ * the BO came from something that sets the tiling, they should agree.
+ * Otherwise, the tiling should be NONE.
+ */
+ assert(bo->tiling_mode == I915_TILING_NONE ||
+ bo->tiling_mode == tiling_mode);
+ }
+
+ int ret = bo_set_tiling_internal(bo, tiling_mode, stride);
+
+ mtx_unlock(&bufmgr->lock);
+
+ return ret;
+}
+
struct brw_bo *
brw_bo_gem_create_from_prime(struct brw_bufmgr *bufmgr, int prime_fd)
{
diff --git a/src/mesa/drivers/dri/i965/brw_bufmgr.h b/src/mesa/drivers/dri/i965/brw_bufmgr.h
index 8bfb0e4..66cb3e3 100644
--- a/src/mesa/drivers/dri/i965/brw_bufmgr.h
+++ b/src/mesa/drivers/dri/i965/brw_bufmgr.h
@@ -288,6 +288,16 @@ int brw_bo_get_tiling(struct brw_bo *bo, uint32_t *tiling_mode,
uint32_t *swizzle_mode);
/**
+ * Set the tiling mode and stride for the bo.
+ *
+ * \param bo Buffer to set tiling mode on
+ * \param tiling_mode tiling mode
+ * \param stride tiled buffer stride
+ */
+int brw_bo_set_tiling(struct brw_bo *bo, uint32_t tiling_mode,
+ uint32_t stride);
+
+/**
* Create a visible name for a buffer which can be used by other apps
*
* \param buf Buffer to create a name for
--
2.5.0.400.gff86faf
More information about the mesa-stable
mailing list