On Thu, Mar 9, 2017 at 5:48 PM, Ben Widawsky <b...@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 <k...@bitplanet.net> > Cc: Jason Ekstrand <ja...@jlekstrand.net> > Signed-off-by: Ben Widawsky <b...@bwidawsk.net> > Reviewed-by: Eric Engestrom <eric.engest...@imgtec.com> (v1) > Acked-by: Daniel Stone <dani...@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 > >
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev