[Mesa-dev] [PATCH 1/2] gbm: Add a flag to enable creation of rotated scanout buffers
Vivek Kasireddy
vivek.kasireddy at intel.com
Fri Oct 23 18:25:55 PDT 2015
On Fri, 23 Oct 2015 15:29:08 +0300
Ville Syrjälä <ville.syrjala at linux.intel.com> wrote:
> On Fri, Oct 23, 2015 at 12:18:39PM +0900, Michel Dänzer wrote:
> > On 23.10.2015 10:44, Vivek Kasireddy wrote:
> > > For certain platforms that support rotated scanout buffers,
> > > currently, there is no way to create them with the GBM DRI
> > > interface. This flag will instruct the DRI driver to create the
> > > buffer by setting additional requirements.
> > >
> > > Cc: Kristian Hogsberg <krh at bitplanet.net>
> > > Signed-off-by: Vivek Kasireddy <vivek.kasireddy at intel.com>
> > > ---
> > > include/GL/internal/dri_interface.h | 1 +
> > > src/gbm/backends/dri/gbm_dri.c | 9 +++++++--
> > > src/gbm/main/gbm.h | 5 +++++
> > > 3 files changed, 13 insertions(+), 2 deletions(-)
> > >
> > > diff --git a/include/GL/internal/dri_interface.h
> > > b/include/GL/internal/dri_interface.h index a0f155a..2271217
> > > 100644 --- a/include/GL/internal/dri_interface.h
> > > +++ b/include/GL/internal/dri_interface.h
> > > @@ -1091,6 +1091,7 @@ struct __DRIdri2ExtensionRec {
> > > #define __DRI_IMAGE_USE_SCANOUT 0x0002
> > > #define __DRI_IMAGE_USE_CURSOR 0x0004 /*
> > > Depricated */ #define __DRI_IMAGE_USE_LINEAR 0x0008
> > > +#define __DRI_IMAGE_USE_SCANOUT_ROTATED_90_270
> > > 0x0010
> > >
> > > /**
> >
> > Thank you for splitting out the driver change. Sorry I didn't think
> > of this before, but it might be worth splitting out the
> > dri_interface.h change as well. I'm fine either way, though.
> >
> >
> > > diff --git a/src/gbm/backends/dri/gbm_dri.c
> > > b/src/gbm/backends/dri/gbm_dri.c index 57cdeac..cde63de 100644
> > > --- a/src/gbm/backends/dri/gbm_dri.c
> > > +++ b/src/gbm/backends/dri/gbm_dri.c
> > > @@ -539,7 +539,7 @@ gbm_dri_is_format_supported(struct gbm_device
> > > *gbm, break;
> > > case GBM_BO_FORMAT_ARGB8888:
> > > case GBM_FORMAT_ARGB8888:
> > > - if (usage & GBM_BO_USE_SCANOUT)
> > > + if (usage & (GBM_BO_USE_SCANOUT |
> > > GBM_BO_USE_SCANOUT_ROTATED_90_270)) return 0;
> > > break;
> > > default:
> > > @@ -748,6 +748,8 @@ gbm_dri_bo_import(struct gbm_device *gbm,
> > >
> > > if (usage & GBM_BO_USE_SCANOUT)
> > > dri_use |= __DRI_IMAGE_USE_SCANOUT;
> > > + if (usage & GBM_BO_USE_SCANOUT_ROTATED_90_270)
> > > + dri_use |= __DRI_IMAGE_USE_SCANOUT_ROTATED_90_270;
> > > if (usage & GBM_BO_USE_CURSOR)
> > > dri_use |= __DRI_IMAGE_USE_CURSOR;
> > > if (dri->image->base.version >= 2 &&
> > > @@ -786,7 +788,8 @@ create_dumb(struct gbm_device *gbm,
> > >
> > > is_cursor = (usage & GBM_BO_USE_CURSOR) != 0 &&
> > > format == GBM_FORMAT_ARGB8888;
> > > - is_scanout = (usage & GBM_BO_USE_SCANOUT) != 0 &&
> > > + is_scanout = (usage & (GBM_BO_USE_SCANOUT |
> > > + GBM_BO_USE_SCANOUT_ROTATED_90_270)) != 0 &&
> > > format == GBM_FORMAT_XRGB8888;
> > > if (!is_cursor && !is_scanout) {
> > > errno = EINVAL;
> > > @@ -880,6 +883,8 @@ gbm_dri_bo_create(struct gbm_device *gbm,
> > >
> > > if (usage & GBM_BO_USE_SCANOUT)
> > > dri_use |= __DRI_IMAGE_USE_SCANOUT;
> > > + if (usage & GBM_BO_USE_SCANOUT_ROTATED_90_270)
> > > + dri_use |= __DRI_IMAGE_USE_SCANOUT_ROTATED_90_270;
> > > if (usage & GBM_BO_USE_CURSOR)
> > > dri_use |= __DRI_IMAGE_USE_CURSOR;
> > > if (usage & GBM_BO_USE_LINEAR)
> > > diff --git a/src/gbm/main/gbm.h b/src/gbm/main/gbm.h
> > > index 2708e50..2ef7bd8 100644
> > > --- a/src/gbm/main/gbm.h
> > > +++ b/src/gbm/main/gbm.h
> > > @@ -213,6 +213,11 @@ enum gbm_bo_flags {
> > > * Buffer is linear, i.e. not tiled.
> > > */
> > > GBM_BO_USE_LINEAR = (1 << 4),
> > > + /**
> > > + * Buffer would be rotated and some platforms have additional
> > > tiling
> > > + * requirements for 90/270 rotated buffers.
> > > + */
> > > + GBM_BO_USE_SCANOUT_ROTATED_90_270 = (1 << 5),
> > > };
> > >
> > > int
> > >
> >
> > I asked internally, and apparently our display hardware requires a
> > rotation specific tiling mode for 180 degree rotation as well. In
> > order to avoid having to add *_SCANOUT_ROTATED_180 later, would
> > *_SCANOUT_ROTATED work for you as well? Or would using Y-tiling for
> > 180 degree rotation be an issue?
>
> What about a bit per angle? To avoid hardware specifics.
Hi Ville,
I am not sure what's the best way to move forward as you know our
(Intel) new hardware needs Y-tiling only for 90/270.
Thanks and Regards,
Vivek
>
More information about the mesa-dev
mailing list