[Mesa-dev] [PATCH v13 10/36] st/dri: enable DRIimage modifier queries

Lucas Stach l.stach at pengutronix.de
Fri May 19 14:43:46 UTC 2017


Am Freitag, den 19.05.2017, 10:37 +0100 schrieb Daniel Stone:
> From: Varad Gautam <varad.gautam at collabora.com>
> 
> introduce modifier field in DRIimage and set it to
> DRM_FORMAT_MOD_INVALID for now. support DRIimage modifier
> queries.
> 
> Suggested-by: Daniel Stone <daniels at collabora.com>
> Signed-off-by: Varad Gautam <varad.gautam at collabora.com>
> Signed-off-by: Daniel Stone <daniels at collabora.com>

Reviewed-by: Lucas Stach <l.stach at pengutronix.de>

> ---
>  src/gallium/state_trackers/dri/dri2.c       | 15 +++++++++++++++
>  src/gallium/state_trackers/dri/dri_screen.h |  1 +
>  2 files changed, 16 insertions(+)
> 
> diff --git a/src/gallium/state_trackers/dri/dri2.c b/src/gallium/state_trackers/dri/dri2.c
> index 0c5783cbd3..7614474e4a 100644
> --- a/src/gallium/state_trackers/dri/dri2.c
> +++ b/src/gallium/state_trackers/dri/dri2.c
> @@ -52,6 +52,10 @@
>  #include "dri_query_renderer.h"
>  #include "dri2_buffer.h"
>  
> +#ifndef DRM_FORMAT_MOD_INVALID
> +#define DRM_FORMAT_MOD_INVALID ((1ULL<<56) - 1)
> +#endif
> +
>  /* format list taken from intel_screen.c */
>  static struct image_format image_formats[] = {
>     { __DRI_IMAGE_FOURCC_ARGB8888, __DRI_IMAGE_COMPONENTS_RGBA, 1,
> @@ -874,6 +878,7 @@ dri2_create_image_from_winsys(__DRIscreen *_screen,
>     img->layer = 0;
>     img->dri_format = format;
>     img->use = 0;
> +   img->modifier = DRM_FORMAT_MOD_INVALID;
>     img->loader_private = loaderPrivate;
>  
>     return img;
> @@ -1024,6 +1029,7 @@ dri2_create_image(__DRIscreen *_screen,
>     img->dri_format = format;
>     img->dri_components = 0;
>     img->use = use;
> +   img->modifier = DRM_FORMAT_MOD_INVALID;
>  
>     img->loader_private = loaderPrivate;
>     return img;
> @@ -1103,6 +1109,12 @@ dri2_query_image(__DRIimage *image, int attrib, int *value)
>     case __DRI_IMAGE_ATTRIB_NUM_PLANES:
>        *value = 1;
>        return GL_TRUE;
> +   case __DRI_IMAGE_ATTRIB_MODIFIER_UPPER:
> +      *value = ((image->modifier >> 32) & 0xffffffff);
> +      return GL_TRUE;
> +   case __DRI_IMAGE_ATTRIB_MODIFIER_LOWER:
> +      *value = image->modifier & 0xffffffff;
> +      return GL_TRUE;
>     default:
>        return GL_FALSE;
>     }
> @@ -1121,6 +1133,7 @@ dri2_dup_image(__DRIimage *image, void *loaderPrivate)
>     pipe_resource_reference(&img->texture, image->texture);
>     img->level = image->level;
>     img->layer = image->layer;
> +   img->modifier = image->modifier;
>     img->dri_format = image->dri_format;
>     /* This should be 0 for sub images, but dup is also used for base images. */
>     img->dri_components = image->dri_components;
> @@ -1250,6 +1263,8 @@ dri2_create_from_texture(__DRIcontext *context, int target, unsigned texture,
>     img->level = level;
>     img->layer = depth;
>     img->dri_format = driGLFormatToImageFormat(obj->Image[face][level]->TexFormat);
> +   /* XXX: no way to retrieve modifier from tex here, we lose the modifier. */
> +   img->modifier = DRM_FORMAT_MOD_INVALID;
>  
>     img->loader_private = loaderPrivate;
>  
> diff --git a/src/gallium/state_trackers/dri/dri_screen.h b/src/gallium/state_trackers/dri/dri_screen.h
> index de88cd26db..0fae51bfb5 100644
> --- a/src/gallium/state_trackers/dri/dri_screen.h
> +++ b/src/gallium/state_trackers/dri/dri_screen.h
> @@ -123,6 +123,7 @@ struct __DRIimageRec {
>     uint32_t dri_format;
>     uint32_t dri_components;
>     unsigned use;
> +   uint64_t modifier;
>  
>     void *loader_private;
>  




More information about the mesa-dev mailing list