[Mesa-dev] [PATCH 1/2] i965/bufmgr: Add a create_from_prime_tiled function
Kristian Høgsberg
hoegsberg at gmail.com
Mon Jan 22 18:22:28 UTC 2018
On Sun, Jan 21, 2018 at 8:05 PM, Jason Ekstrand <jason at jlekstrand.net> wrote:
> 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);
> + }
Since most of this logic is specific to the tiling == -1 case, maybe
move the get_tiling path to brw_bo_gem_create_from_prime(). Either
move bo_set_tiling() to brw_bo_gem_create_from_prime_tiled() or call
it from here when stride > 0.
Either way,
Reviewed-by: Kristian H. Kristensen <hoegsberg at google.com>
>
> 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
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list