[Mesa-dev] [PATCH 1/3] dri: Add an image creation with modifiers
Jason Ekstrand
jason at jlekstrand.net
Fri Mar 10 02:38:15 UTC 2017
On Thu, Mar 9, 2017 at 5:48 PM, Ben Widawsky <ben at bwidawsk.net> wrote:
> Modifiers will be obtains or guessed by the client and passed in during
>
"obtained"
> image creation/import.
>
> This requires bumping the DRIimage version.
>
> As of this patch, the modifiers aren't plumbed all the way down, this
> patch simply makes sure the interface level stuff is correct.
>
> v2: Don't allow usage + modifiers
>
> v3: Make NAND actually NAND. Bug introduced in v2. (Jason)
>
> Cc: Kristian Høgsberg <krh at bitplanet.net>
> Cc: Jason Ekstrand <jason at jlekstrand.net>
> Signed-off-by: Ben Widawsky <ben at bwidawsk.net>
> Reviewed-by: Eric Engestrom <eric.engestrom at imgtec.com> (v1)
> Acked-by: Daniel Stone <daniels at collabora.com>
> ---
> include/GL/internal/dri_interface.h | 27 ++++++++++++++++++++++++++-
> src/gallium/state_trackers/dri/dri2.c | 1 +
> src/mesa/drivers/dri/i965/intel_screen.c | 32
> +++++++++++++++++++++++++++++++-
> 3 files changed, 58 insertions(+), 2 deletions(-)
>
> diff --git a/include/GL/internal/dri_interface.h
> b/include/GL/internal/dri_interface.h
> index 598d111f33..53fac6fc3c 100644
> --- a/include/GL/internal/dri_interface.h
> +++ b/include/GL/internal/dri_interface.h
> @@ -1136,7 +1136,7 @@ struct __DRIdri2ExtensionRec {
> * extensions.
> */
> #define __DRI_IMAGE "DRI_IMAGE"
> -#define __DRI_IMAGE_VERSION 13
> +#define __DRI_IMAGE_VERSION 14
>
> /**
> * These formats correspond to the similarly named MESA_FORMAT_*
> @@ -1257,6 +1257,8 @@ struct __DRIdri2ExtensionRec {
> #define __DRI_IMAGE_ATTRIB_NUM_PLANES 0x2009 /* available in versions
> 11 */
>
> #define __DRI_IMAGE_ATTRIB_OFFSET 0x200A /* available in versions 13 */
> +#define __DRI_IMAGE_ATTRIB_MODIFIER_LOWER 0x200B /* available in
> versions 14 */
> +#define __DRI_IMAGE_ATTRIB_MODIFIER_UPPER 0x200C /* available in
> versions 14 */
>
> enum __DRIYUVColorSpace {
> __DRI_YUV_COLOR_SPACE_UNDEFINED = 0,
> @@ -1468,6 +1470,29 @@ struct __DRIimageExtensionRec {
> */
> void (*unmapImage)(__DRIcontext *context, __DRIimage *image, void
> *data);
>
> +
> + /**
> + * Creates an image with implementation's favorite modifiers.
> + *
> + * This acts like createImage except there is a list of modifiers
> passed in
> + * which the implementation may selectively use to create the
> DRIimage. The
> + * result should be the implementation selects one modifier (perhaps
> it would
> + * hold on to a few and later pick).
> + *
> + * The created image should be destroyed with destroyImage().
> + *
> + * Returns the new DRIimage. The chosen modifier can be obtained later
> on
> + * and passed back to things like the kernel's AddFB2 interface.
> + *
> + * \sa __DRIimageRec::createImage
> + *
> + * \since 14
> + */
> + __DRIimage *(*createImageWithModifiers)(__DRIscreen *screen,
> + int width, int height, int
> format,
> + const uint64_t *modifiers,
> + const unsigned int
> modifier_count,
> + void *loaderPrivate);
> };
>
>
> diff --git a/src/gallium/state_trackers/dri/dri2.c
> b/src/gallium/state_trackers/dri/dri2.c
> index b50e096443..12e466c6f1 100644
> --- a/src/gallium/state_trackers/dri/dri2.c
> +++ b/src/gallium/state_trackers/dri/dri2.c
> @@ -1413,6 +1413,7 @@ static __DRIimageExtension dri2ImageExtension = {
> .getCapabilities = dri2_get_capabilities,
> .mapImage = dri2_map_image,
> .unmapImage = dri2_unmap_image,
> + .createImageWithModifiers = NULL,
> };
>
>
> diff --git a/src/mesa/drivers/dri/i965/intel_screen.c
> b/src/mesa/drivers/dri/i965/intel_screen.c
> index 21786eb54a..3452572874 100644
> --- a/src/mesa/drivers/dri/i965/intel_screen.c
> +++ b/src/mesa/drivers/dri/i965/intel_screen.c
> @@ -510,9 +510,11 @@ intel_destroy_image(__DRIimage *image)
> }
>
> static __DRIimage *
> -intel_create_image(__DRIscreen *dri_screen,
> +__intel_create_image(__DRIscreen *dri_screen,
> int width, int height, int format,
> unsigned int use,
> + const uint64_t *modifiers,
> + unsigned count,
> void *loaderPrivate)
> {
> __DRIimage *image;
> @@ -521,6 +523,12 @@ intel_create_image(__DRIscreen *dri_screen,
> int cpp;
> unsigned long pitch;
>
> + /* Callers of this may specify a modifier, or a dri usage, but not
> both. The
> + * newer modifier interface deprecates the older usage flags newer
> modifier
> + * interface deprecates the older usage flags.
> + */
> + assert(!(use && count));
> +
> tiling = I915_TILING_X;
> if (use & __DRI_IMAGE_USE_CURSOR) {
> if (width != 64 || height != 64)
> @@ -550,6 +558,27 @@ intel_create_image(__DRIscreen *dri_screen,
> return image;
> }
>
> +static __DRIimage *
> +intel_create_image(__DRIscreen *dri_screen,
> + int width, int height, int format,
> + unsigned int use,
> + void *loaderPrivate)
> +{
> + return __intel_create_image(dri_screen, width, height, format, use,
> NULL, 0,
> + loaderPrivate);
> +}
> +
> +static __DRIimage *
> +intel_create_image_with_modifiers(__DRIscreen *dri_screen,
> + int width, int height, int format,
> + const uint64_t *modifiers,
> + const unsigned count,
> + void *loaderPrivate)
> +{
> + return __intel_create_image(dri_screen, width, height, format, 0,
> NULL, 0,
>
Did you want to pass the modifiers through? Maybe that's in another patch.
> + loaderPrivate);
> +}
> +
> static GLboolean
> intel_query_image(__DRIimage *image, int attrib, int *value)
> {
> @@ -840,6 +869,7 @@ static const __DRIimageExtension intelImageExtension =
> {
> .getCapabilities = NULL,
> .mapImage = NULL,
> .unmapImage = NULL,
> + .createImageWithModifiers = intel_create_image_with_
> modifiers,
> };
>
> static int
> --
> 2.12.0
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20170309/ee6adf5d/attachment-0001.html>
More information about the mesa-dev
mailing list