From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH 01/11] drm: add plane support Date: Tue, 25 Oct 2011 21:41:17 +0200 Message-ID: <20111025194117.GG2894@phenom.ffwll.local> References: <1319536026-2877-1-git-send-email-jbarnes@virtuousgeek.org> <1319536026-2877-2-git-send-email-jbarnes@virtuousgeek.org> <20111025160945.5049568d@jbarnes-x220> Mime-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Return-path: Content-Disposition: inline In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: intel-gfx-bounces+gcfxdi-intel-gfx=m.gmane.org@lists.freedesktop.org Errors-To: intel-gfx-bounces+gcfxdi-intel-gfx=m.gmane.org@lists.freedesktop.org To: Rob Clark Cc: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org On Tue, Oct 25, 2011 at 11:43:09AM -0500, Rob Clark wrote: > On Tue, Oct 25, 2011 at 9:09 AM, Jesse Barnes = wrote: > > diff --git a/include/drm/drm_mode.h b/include/drm/drm_mode.h > > index 34a0d22..dafe8df 100644 > > --- a/include/drm/drm_mode.h > > +++ b/include/drm/drm_mode.h > > @@ -272,8 +272,9 @@ struct drm_mode_fb_cmd2 { > > =A0 =A0 =A0 =A0__u32 bpp; > > =A0 =A0 =A0 =A0__u32 depth; > > =A0 =A0 =A0 =A0__u32 pixel_format; /* fourcc code from videodev2.h */ > > - =A0 =A0 =A0 /* driver specific handle */ > > - =A0 =A0 =A0 __u32 handle; > > + =A0 =A0 =A0 __u32 handle_count; > > + =A0 =A0 =A0 /* driver specific buffer object handle array */ > > + =A0 =A0 =A0 __u64 handles; > > =A0}; > = > = > Ok, after a bit of discussion with Jakob on IRC, this is what we arrived = at: > = > 1) It would be nice to have the option for multi-planar formats to be > able to use one single buffer object, or one buffer object per plane. > In the case of one buffer per plane, the order is dictated by the > fourcc. > = > 2) We do need per-plane stride for some formats, in particular I420 > which is a bit ambiguous otherwise (ie. is the stride of the U and V > planes half the stride as the Y plane, or the same?) > = > 3) Maybe we need per-plane offsets, but I think this case could be > handled by just using one bo per plane, so left it out > = > 4) bpp/depth are redundant w/ the pixel_format. Just in case, as a > future placeholder, and inspired by 'struct v4l2_pix_format', add a > priv field. Although making the field big enough to hold a pointer if > absolutely really needed. > = > struct drm_mode_fb_cmd2 { > __u32 fb_id; > __u32 width, height; > __u32 pixel_format; /* fourcc code from videodev2.h */ > __u64 priv; /* private data, depends on pixelformat */ > = > /* in case of planar formats, either one buffer object, > * or one buffer object per plane, is allowed. In the > * case per-plane bo's, the order is dictated by the > * fourcc.. ie. NV12 (http://fourcc.org/yuv.php#NV12) > * is described as: > * > * YUV 4:2:0 image with a plane of 8 bit Y samples > * followed by an interleaved U/V plane containing > * 8 bit 2x2 subsampled colour difference samples. > * > * So it would consist of Y as first buffer and UV as > * second buffer. In the case that only a single bo > * is used then buffer[1].handle should be zero. (But > * a plane specific pitch could still be specified.) > */ > struct { > __u32 pitch; > /* driver specific handle */ > __u32 handle; Why not just add a __u32 offset; __u32 rsvd; and call it a day. This thing is pretty big already, so that bloat doesn't matter that much. Maybe spec that buffer[0].offset must be zero. With that you can also do I420 with the following layout +-------+ |YYYYYYY| |YYYYYYY| |YYYYYYY| |YYYYYYY| +---+---+ |UUU|VVV| |UUU|VVV| +---+---+ i.e. stride_U =3D=3D stride_V, with their lines meshed into one line. -Daniel > } buffer[16]; > }; > = > = > BR, > -R > _______________________________________________ > dri-devel mailing list > dri-devel@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/dri-devel -- = Daniel Vetter Mail: daniel@ffwll.ch Mobile: +41 (0)79 365 57 48