[Mesa-dev] [PATCH 16/34] i965: Separate image allocation with modifiers

Jason Ekstrand jason at jlekstrand.net
Tue Jan 31 21:01:11 UTC 2017


On Mon, Jan 23, 2017 at 10:21 PM, Ben Widawsky <ben at bwidawsk.net> wrote:

> Since the code doesn't support modifiers yet, this patch should do
> nothing other than prepare for more patches.
>
> Signed-off-by: Ben Widawsky <ben at bwidawsk.net>
> Acked-by: Daniel Stone <daniels at collabora.com>
> ---
>  src/mesa/drivers/dri/i965/intel_screen.c | 64
> ++++++++++++++++++++++++--------
>  1 file changed, 49 insertions(+), 15 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/i965/intel_screen.c
> b/src/mesa/drivers/dri/i965/intel_screen.c
> index b7c0a55231..e3fe2a468f 100644
> --- a/src/mesa/drivers/dri/i965/intel_screen.c
> +++ b/src/mesa/drivers/dri/i965/intel_screen.c
> @@ -599,6 +599,48 @@ select_best_modifier(struct gen_device_info *devinfo,
>  #undef YTILE
>  }
>
> +static int
> +create_image_with_modifier(struct intel_screen *screen,
> +                             __DRIimage *image, uint64_t modifier,
> +                             int width, int height, int cpp)
> +{
> +   uint32_t tiling = I915_TILING_X;
> +   unsigned long pitch;
> +
> +   switch (modifier) {
> +   case I915_FORMAT_MOD_Y_TILED:
> +      tiling = I915_TILING_Y;
> +      break;
> +   case I915_FORMAT_MOD_X_TILED:
> +      assert(tiling == I915_TILING_X);
> +      break;
> +   case DRM_FORMAT_MOD_LINEAR:
> +      tiling = I915_TILING_NONE;
> +      break;
> +   case DRM_FORMAT_MOD_INVALID:
> +   default:
> +      break;
> +   }
> +
> +   image->bo = drm_intel_bo_alloc_tiled(screen->bufmgr, "image+mod",
> +                                        width, height, cpp, &tiling,
> +                                        &pitch, 0);
> +   if (image->bo == NULL)
> +      return false;
> +
> +   if (tiling != I915_TILING_Y) {
> +      drm_intel_bo_unreference(image->bo);
> +      return false;
>

Why only Y-tiled?


> +   }
> +
> +   image->width = width;
> +   image->height = height;
> +   image->pitch = pitch;
> +   image->modifier = modifier;
> +
> +   return true;
> +}
> +
>  static __DRIimage *
>  __intel_create_image(__DRIscreen *dri_screen,
>                    int width, int height, int format,
> @@ -623,20 +665,6 @@ __intel_create_image(__DRIscreen *dri_screen,
>     assert(!(use && count));
>
>     uint64_t modifier = select_best_modifier(&screen->devinfo, modifiers,
> count);
> -   switch (modifier) {
> -   case I915_FORMAT_MOD_X_TILED:
> -      assert(tiling == I915_TILING_X);
> -      break;
> -   case DRM_FORMAT_MOD_LINEAR:
> -      tiling = I915_TILING_NONE;
> -      break;
> -   case I915_FORMAT_MOD_Y_TILED:
> -      tiling = I915_TILING_Y;
> -      break;
> -   case DRM_FORMAT_MOD_INVALID:
> -   default:
> -         break;
> -   }
>
>     if (use & __DRI_IMAGE_USE_CURSOR) {
>        if (width != 64 || height != 64)
> @@ -652,6 +680,13 @@ __intel_create_image(__DRIscreen *dri_screen,
>        return NULL;
>
>     cpp = _mesa_get_format_bytes(image->format);
> +   if (modifier != DRM_FORMAT_MOD_INVALID) {
> +      if (create_image_with_modifier(screen, image, modifier, width,
> +                                     height, cpp)) {
> +         return image;
>

Yeah, this is a good way to do it.


> +      }
> +   }
> +
>     image->bo = drm_intel_bo_alloc_tiled(screen->bufmgr, "image",
>                                          width, height, cpp, &tiling,
>                                          &pitch, 0);
> @@ -662,7 +697,6 @@ __intel_create_image(__DRIscreen *dri_screen,
>     image->width = width;
>     image->height = height;
>     image->pitch = pitch;
> -   image->modifier = modifier;
>
>     return image;
>  }
> --
> 2.11.0
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20170131/306ca945/attachment.html>


More information about the mesa-dev mailing list