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 <k...@bitplanet.net> > > Signed-off-by: Vivek Kasireddy <vivek.kasire...@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. -- Ville Syrjälä Intel OTC _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev