From: Varad Gautam <varad.gau...@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 <dani...@collabora.com> Signed-off-by: Varad Gautam <varad.gau...@collabora.com> Signed-off-by: Daniel Stone <dani...@collabora.com> --- 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; -- 2.13.0 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev