Re: [RFC] drm: add overlays as first class KMS objects

2011-05-17 Thread Laurent Pinchart
Hi Daniel,

On Friday 13 May 2011 18:16:30 Daniel Vetter wrote:
 Hi Jesse,
 
 Discussion here in Budapest with v4l and embedded graphics folks was
 extremely fruitful. A few quick things to take away - I'll try to dig
 through all
 the stuff I've learned more in-depth later (probably in a blog post or
 two):
 
 - embedded graphics is insane. The output routing/blending/whatever
   currently shipping hw can do is crazy and kms as-is is nowhere near up
   to snuff to support this. We've discussed omap4 and a ti chip targeted at
   video surveillance as use cases. I'll post block diagrams and
 explanations some when later.
 - we should immediately stop to call anything an overlay. It's a confusing
   concept that has a different meaning in every subsystem and for every hw
   manufacturer. More sensible names are dma fifo engines for things that
 slurp in planes and make them available to the display subsystem. Blend
 engines for blocks that take multiple input pipes and overlay/underlay/blend
 them together. Display subsytem/controller for the aggregate thing including
 encoders/resizers/outputs and especially the crazy routing network that
 connects everything.
 
 Most of the discussion centered around clearing up the confusion and
 reaching a mutual understanding between desktop graphics, embedded
 graphics and v4l people. Two rough ideas emerged though:
 
 1) Splitting the crtc object into two objects: crtc with associated output
 mode (pixel clock, encoders/connectors) and dma engines (possibly
 multiple) that feed it. omap 4 has essentially just 4 dma engines that can
 be freely assigned to the available outputs, so a distinction between
 normal crtcs and overlay engines just does not make sense. There's the
 major open question of where to put the various attributes to set up the
 output pipeline. Also some of these attributes might need to be changed
 atomicly together with pageflips on a bunch of dma engines all associated
 with the same crtc on the next vsync, e.g. output position of an overlaid
 video buffer.

I like that idea. Setting attributes atomically will likely be one of the 
biggest challenge. V4L2 shares the same need, but we haven't had time to 
address it yet.

 2) The above should be good enough to support halfway sane chips like
 omap4. But hw with more insane routing capabilities that can also use v4l
 devices as sources (even video input connectors) media controller might be
 a good fit. Media controller is designed to expose multimedia pipe routing
 across different subsystem. But the first version, still marked
 experimental, only got merged in .39. We discussed a few ideas as how to
 splice media controller into kms but nothing clear emerged. So a possible
 kms integration with media controller is rather far away.

You're probably right, but far away doesn't mean never. Especially when one of 
the media controller developers is interested in the project and could spend 
time on it :-)

I've started working on a prototype implementation that would use the media 
controller API to report the CRTCs, encoders and connectors topology to 
userspace. The learning curve is pretty steep as I'm not familiar with the DRM 
and KMS code, but the code base turned out to be much easier to dive in than 
it seemed a couple of years ago.

-- 
Regards,

Laurent Pinchart
___
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel


Re: [RFC] drm: add overlays as first class KMS objects

2011-05-15 Thread Clark, Rob
On Fri, May 13, 2011 at 8:02 PM, Jesse Barnes jbar...@virtuousgeek.org wrote:
 On Fri, 13 May 2011 18:16:30 +0200
 Daniel Vetter daniel.vet...@ffwll.ch wrote:

 Hi Jesse,

 Discussion here in Budapest with v4l and embedded graphics folks was
 extremely fruitful. A few quick things to take away - I'll try to dig
 through all
 the stuff I've learned more in-depth later (probably in a blog post or two):

Hi Daniel, thanks for writing this up

 - embedded graphics is insane. The output routing/blending/whatever
   currently shipping hw can do is crazy and kms as-is is nowhere near up
   to snuff to support this. We've discussed omap4 and a ti chip targeted at
   video surveillance as use cases. I'll post block diagrams and explanations
   some when later.

 Yeah I expected that; even just TVs can have really funky restrictions
 about z order and blend capability.

 - we should immediately stop to call anything an overlay. It's a confusing
   concept that has a different meaning in every subsystem and for every hw
   manufacturer. More sensible names are dma fifo engines for things that 
 slurp
   in planes and make them available to the display subsystem. Blend engines
   for blocks that take multiple input pipes and overlay/underlay/blend them
   together. Display subsytem/controller for the aggregate thing including
   encoders/resizers/outputs and especially the crazy routing network that
   connects everything.

 How about just display plane then?  Specifically in the context of
 display output hardware...

display plane could be a good name.. actually in omap4 case it is a
single dma engine that is multiplexing fetches for however many
attached video pipes.. that is perhaps an implementation detail, but
it makes display plane sound nicer as a name



 1) Splitting the crtc object into two objects: crtc with associated output 
 mode
 (pixel clock, encoders/connectors) and dma engines (possibly multiple) that
 feed it. omap 4 has essentially just 4 dma engines that can be freely 
 assigned
 to the available outputs, so a distinction between normal crtcs and overlay
 engines just does not make sense. There's the major open question of where
 to put the various attributes to set up the output pipeline. Also some of 
 these
 attributes might need to be changed atomicly together with pageflips on
 a bunch of dma engines all associated with the same crtc on the next vsync,
 e.g. output position of an overlaid video buffer.

 Yeah, that's a good goal, and pretty much what I had in mind here.
 However, breaking the existing interface is a non-starter, so either we
 need a new CRTC object altogether, or we preserve the idea of a
 primary plane (whatever that means for a given platform) that's tied
 to each CRTC, which each additional plane described in a separate
 structure.  Z order and blend restrictions will have to be communicated
 separately I think...

In the cases I can think of, you'll always have a primary plane, so
userspace need not explicitly specify it.  But I think you want the
driver to pick which display plane to be automatically hooked between
the primary fb and crtc, or at least this should be the case if some
new bit is set in driver_features to indicate the driver supports
multiple display planes per crtc.

BR,
-R

 Thanks,
 --
 Jesse Barnes, Intel Open Source Technology Center

___
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel


Re: [RFC] drm: add overlays as first class KMS objects

2011-05-13 Thread Jesse Barnes
On Fri, 13 May 2011 18:16:30 +0200
Daniel Vetter daniel.vet...@ffwll.ch wrote:

 Hi Jesse,
 
 Discussion here in Budapest with v4l and embedded graphics folks was
 extremely fruitful. A few quick things to take away - I'll try to dig
 through all
 the stuff I've learned more in-depth later (probably in a blog post or two):
 
 - embedded graphics is insane. The output routing/blending/whatever
   currently shipping hw can do is crazy and kms as-is is nowhere near up
   to snuff to support this. We've discussed omap4 and a ti chip targeted at
   video surveillance as use cases. I'll post block diagrams and explanations
   some when later.

Yeah I expected that; even just TVs can have really funky restrictions
about z order and blend capability.

 - we should immediately stop to call anything an overlay. It's a confusing
   concept that has a different meaning in every subsystem and for every hw
   manufacturer. More sensible names are dma fifo engines for things that slurp
   in planes and make them available to the display subsystem. Blend engines
   for blocks that take multiple input pipes and overlay/underlay/blend them
   together. Display subsytem/controller for the aggregate thing including
   encoders/resizers/outputs and especially the crazy routing network that
   connects everything.

How about just display plane then?  Specifically in the context of
display output hardware...

 1) Splitting the crtc object into two objects: crtc with associated output 
 mode
 (pixel clock, encoders/connectors) and dma engines (possibly multiple) that
 feed it. omap 4 has essentially just 4 dma engines that can be freely assigned
 to the available outputs, so a distinction between normal crtcs and overlay
 engines just does not make sense. There's the major open question of where
 to put the various attributes to set up the output pipeline. Also some of 
 these
 attributes might need to be changed atomicly together with pageflips on
 a bunch of dma engines all associated with the same crtc on the next vsync,
 e.g. output position of an overlaid video buffer.

Yeah, that's a good goal, and pretty much what I had in mind here.
However, breaking the existing interface is a non-starter, so either we
need a new CRTC object altogether, or we preserve the idea of a
primary plane (whatever that means for a given platform) that's tied
to each CRTC, which each additional plane described in a separate
structure.  Z order and blend restrictions will have to be communicated
separately I think...

Thanks,
-- 
Jesse Barnes, Intel Open Source Technology Center
___
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel


Re: [RFC] drm: add overlays as first class KMS objects

2011-04-28 Thread Rob Clark
2011/4/25 Stéphane Marchesin stephane.marche...@gmail.com:
 On Mon, Apr 25, 2011 at 16:22, Jesse Barnes jbar...@virtuousgeek.org wrote:
 On Mon, 25 Apr 2011 16:16:18 -0700
 Keith Packard kei...@keithp.com wrote:

 On Mon, 25 Apr 2011 15:12:20 -0700, Jesse Barnes jbar...@virtuousgeek.org 
 wrote:

  Overlays are a bit like half-CRTCs.  They have a location and fb, but
  don't drive outputs directly.  Add support for handling them to the core
  KMS code.

 Are overlays/underlays not associated with a specific CRTC? To my mind,
 overlays are another scanout buffer associated with a specific CRTC, so
 you'd create a scanout buffer and attach that to a specific scanout slot
 in a crtc, with the 'default' slot being the usual graphics plane.

 Yes, that matches my understanding as well.  I've deliberately made the
 implementation flexible there though, under the assumption that some
 hardware allows a plane to be directed at more than one CRTC (though
 probably not simultaneously).

 Arguably, this is something we should have done when the
 connector/encoder split was done (making planes in general first class
 objects).  But with today's code, treating a CRTC as a pixel pump and a
 primary plane seems fine, with overlays tacked onto the side as
 secondary pixel sources but tied to a specific CRTC.


 What is the plan for supporting multiple formats? When I looked at
 this for nouveau it ended up growing out of control when adding
 support for all the YUV (planar, packed, 12 or 16 bpp formats) and RGB
 format combinations.

maybe a dumb idea, but since all the GEM buffer allocation is already
done thru driver specific ioctl, couldn't the color format (and the
one or more plane pointers) be something that the DRM overlay
infrastructure doesn't have to care about.  I mean, I guess it is
somehow analogous to various tiled formats that you might have.

If the layout of the bytes is a property of the actual buffer object,
then wouldn't it be ok for DRM overlay infrastructure to ignore it and
the individual driver implementations just do the right thing based on
some private driver properties of the bo?

Maybe I'm over-simplifying or overlooking something, though..

BR,
-R

 Stéphane
 ___
 dri-devel mailing list
 dri-devel@lists.freedesktop.org
 http://lists.freedesktop.org/mailman/listinfo/dri-devel

___
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel


Re: [RFC] drm: add overlays as first class KMS objects

2011-04-28 Thread Rob Clark
On Tue, Apr 26, 2011 at 5:01 AM, Alan Cox a...@lxorguk.ukuu.org.uk wrote:
 A lot of older hardware had one overlay that could be sourced to any
 crtc, just not simultaneously.  The tricky part is the formats and
 capabilities: alpha blending, color/chromakey, gamma correction, etc.
 Even the current crtc gamma stuff is somewhat lacking in in terms of
 what hardware is capable of (PWL vs. LUT, user defined conversion
 matrices, gamut remapping, etc.).

 Rather than re-inventing enough wheels to run a large truck would it not
 make sense to make hardware sourced overlays Video4Linux objects in their
 entirity so you can just say attach V4L object A as overlay B


One thing I'd like to be able to do is use a CRTC as either an overlay
or an primary framebuffer..

For example on omap4, if we have one display plugged in, then we have
3 pipes that can be used for overlay.  If a second display is plugged
in, one of those overlay pipes gets used as the primary gfx layer on
the 2nd display.

The ideal situation would let us share buffers w/ x11 with dri2
(although we need more than just front/back buffer.. you might have 
16 buffers for video playback).  And then in the xorg driver decide
whether to use an overlay or GPU blit depending on what hw resources
are not already in use.

So I'm not completely sure about the v4l2/drm coexistance for
overlays.  (Although for capture devices, it makes 100% sense to have
a way of sharing GEM buffers w/ v4l2.)  On the other hand, flipping
video buffers is kind of (if you squint slightly) just like flipping
buffers in a 3d gl app.

BR,
-R

 That would provide format definitions, provide control interfaces for
 the surface (eg for overlays of cameras such as on some of the Intel
 embedded and non PC devices), give you an existing well understood API.

 For some hardware you are going to need this integration anyway so that
 you can do things like move a GEM object which is currently a DMA target
 of a capture device (as well as to fence it).

 For a software surface you could either expose it as a V4L object that
 is GEM or fb memory backed or at least use the same descriptions so that
 the kernel has a consistent set of descriptions for formats and we don't
 have user libraries doing adhoc format translation crap.

 A lot of capture hardware would map very nicely onto GEM objects I
 suspect and if you want to merge live video into Wayland it seems a
 logical path ?

 Alan
 ___
 dri-devel mailing list
 dri-devel@lists.freedesktop.org
 http://lists.freedesktop.org/mailman/listinfo/dri-devel

___
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel


Re: [RFC] drm: add overlays as first class KMS objects

2011-04-28 Thread Rob Clark
On Mon, Apr 25, 2011 at 5:12 PM, Jesse Barnes jbar...@virtuousgeek.org wrote:
 Looking for comments on this.  Obviously if we're going to add a new type
 of KMS object, we'd better get the ioctl more or less right to begin with,
 which means having all the attributes we'd like to track, plus some
 padding, available from the outset.

 So I'd like comments on this; the whole approach may be broken for things
 like OMAP; if so I'd like to hear about it now.  Overall, overlays are
 treated a little like CRTCs, but without associated modes our encoder
 trees hanging off of them.  That is, they can be enabled with a specific
 fb attached at a specific location, but they don't have to worry about
 mode setting, per se (though they do need to have an associated CRTC to
 actually pump their pixels out, post-blend).

 Flipping could be done either with the existing ioctl by updating the fb
 base pointer, or through a new flip ioctl similar to what we have already,
 but taking an overlay object instead of a CRTC.

One thing I am wondering about is how to synchronize overlay position
w/ flipping in the primary gfx layer?  Assuming you actually are
flipping in primary layer you'd want a new set of overlay
position/size to take effect on the same vblank that the flip in the
gfx layer happens, because you are probably relying on some
transparent pixels (or colorkey, if anyone still uses that) to be
drawn in the UI layer.

BR,
-R


 Overlays are a bit like half-CRTCs.  They have a location and fb, but
 don't drive outputs directly.  Add support for handling them to the core
 KMS code.

 Signed-off-by: Jesse Barnes jbar...@virtuousgeek.org
 ---
  drivers/gpu/drm/drm_crtc.c |  219 
 
  include/drm/drm.h          |    3 +
  include/drm/drm_crtc.h     |   61 
  include/drm/drm_mode.h     |   39 
  4 files changed, 322 insertions(+), 0 deletions(-)

 diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
 index 799e149..77ff9e0 100644
 --- a/drivers/gpu/drm/drm_crtc.c
 +++ b/drivers/gpu/drm/drm_crtc.c
 @@ -533,6 +533,34 @@ void drm_encoder_cleanup(struct drm_encoder *encoder)
  }
  EXPORT_SYMBOL(drm_encoder_cleanup);

 +void drm_overlay_init(struct drm_device *dev, struct drm_overlay *overlay,
 +                     const struct drm_overlay_funcs *funcs)
 +{
 +       mutex_lock(dev-mode_config.mutex);
 +
 +       overlay-dev = dev;
 +       drm_mode_object_get(dev, overlay-base, DRM_MODE_OBJECT_OVERLAY);
 +       overlay-funcs = funcs;
 +
 +       list_add_tail(overlay-head, dev-mode_config.overlay_list);
 +       dev-mode_config.num_overlay++;
 +
 +       mutex_unlock(dev-mode_config.mutex);
 +}
 +EXPORT_SYMBOL(drm_overlay_init);
 +
 +void drm_overlay_cleanup(struct drm_overlay *overlay)
 +{
 +       struct drm_device *dev = overlay-dev;
 +
 +       mutex_lock(dev-mode_config.mutex);
 +       drm_mode_object_put(dev, overlay-base);
 +       list_del(overlay-head);
 +       dev-mode_config.num_overlay--;
 +       mutex_unlock(dev-mode_config.mutex);
 +}
 +EXPORT_SYMBOL(drm_overlay_cleanup);
 +
  /**
  * drm_mode_create - create a new display mode
  * @dev: DRM device
 @@ -864,6 +892,7 @@ void drm_mode_config_init(struct drm_device *dev)
        INIT_LIST_HEAD(dev-mode_config.encoder_list);
        INIT_LIST_HEAD(dev-mode_config.property_list);
        INIT_LIST_HEAD(dev-mode_config.property_blob_list);
 +       INIT_LIST_HEAD(dev-mode_config.overlay_list);
        idr_init(dev-mode_config.crtc_idr);

        mutex_lock(dev-mode_config.mutex);
 @@ -1467,6 +1496,196 @@ out:
  }

  /**
 + * drm_mode_getoverlay_res - get overlay info
 + * @dev: DRM device
 + * @data: ioctl data
 + * @file_priv: DRM file info
 + *
 + * Return an overlay count and set of IDs.
 + */
 +int drm_mode_getoverlay_res(struct drm_device *dev, void *data,
 +                           struct drm_file *file_priv)
 +{
 +       struct drm_mode_get_overlay_res *overlay_resp = data;
 +       struct drm_mode_config *config;
 +       struct drm_overlay *overlay;
 +       uint32_t __user *overlay_ptr;
 +       int copied = 0, ret = 0;
 +
 +       if (!drm_core_check_feature(dev, DRIVER_MODESET))
 +               return -EINVAL;
 +
 +       mutex_lock(dev-mode_config.mutex);
 +       config = dev-mode_config;
 +
 +       /*
 +        * This ioctl is called twice, once to determine how much space is
 +        * needed, and the 2nd time to fill it.
 +        */
 +       if (config-num_overlay 
 +           (overlay_resp-count_overlays = config-num_overlay)) {
 +               overlay_ptr = (uint32_t *)(unsigned 
 long)overlay_resp-overlay_id_ptr;
 +
 +               list_for_each_entry(overlay, config-overlay_list, head) {
 +                       if (put_user(overlay-base.id, overlay_ptr + copied)) 
 {
 +                               ret = -EFAULT;
 +                               goto out;
 +                       }
 +                       copied++;
 +               }
 +       }
 +       

Re: [RFC] drm: add overlays as first class KMS objects

2011-04-28 Thread Jakob Bornecrantz
On Wed, Apr 27, 2011 at 11:12 PM, Jesse Barnes jbar...@virtuousgeek.org wrote:
 On Wed, 27 Apr 2011 14:19:05 +0200
 Daniel Vetter dan...@ffwll.ch wrote:

 Hi Jesse,

 I like it. It's a bit of a chicken-egg api design problem, but if a
 proof-of-concept
 implementation exists for an embedded chip plus something to check whether
 it's good enough to implement Xv on ancient hw (intel overlay or for the qemu
 kms driver, if that could do this), that should be good enough.

 A few comments on the ioctl interface.

 Thanks for checking it out.

  +/* Overlays blend with or override other bits on the CRTC */
  +struct drm_mode_set_overlay {
  +       __u32 overlay_id;
  +       __u32 crtc_id;
  +       __u32 fb_id; /* contains surface format type */
  +
  +       __u32 crtc_x, crtc_y;
  +       __u32 x, y;
  +
  +       /* FIXME: color key/mask, scaling, z-order, other? */
  +};

 I think scaling is required, you can't implement Xv without that. The
 problem is some arbitraray
 hw range restrictions, but returning -EINVAL if they're violated looks okay. 
 So

 float scale_x, scale_y;

 Ok, I'll collect more fields based on this thread and make this
 structure bigger.  Still not sure how to handle arbitrary blend and
 z-order restrictions without passing a tree around though...

What we send over the ioctl interface (in vmwgfx) to control the
overlays is this:

/**
 * struct drm_vmw_control_stream_arg
 *
 * @stream_id: Stearm to control
 * @enabled: If false all following arguments are ignored.
 * @handle: Handle to buffer for getting data from.
 * @format: Format of the overlay as understood by the host.
 * @width: Width of the overlay.
 * @height: Height of the overlay.
 * @size: Size of the overlay in bytes.
 * @pitch: Array of pitches, the two last are only used for YUV12 formats.
 * @offset: Offset from start of dma buffer to overlay.
 * @src: Source rect, must be within the defined area above.
 * @dst: Destination rect, x and y may be negative.
 *
 * Argument to the DRM_VMW_CONTROL_STREAM Ioctl.
 */

struct drm_vmw_control_stream_arg {
uint32_t stream_id;
uint32_t enabled;

uint32_t flags;
uint32_t color_key;

uint32_t handle;
uint32_t offset;
int32_t format;
uint32_t size;
uint32_t width;
uint32_t height;
uint32_t pitch[3];

uint32_t pad64;
struct drm_vmw_rect src;
struct drm_vmw_rect dst;
};

The command contains information describing the source framebuffer
as well as the data for controlling the overlay. The args are by a
amazing coincidence is almost 1:1 what we also send down to the host.
The biggest change here from what you proposed is that we send two
rects describing from where within the buffer we get the data and to
where it should go. My vote is to do that as well (makes my life
easier at least).

Tho I guess that color_key and flags could be made into a property.

Cheers Jakob.



 should be good enough. For the remaining things (color conversion,
 blending, ...) I don't think
 there's any generic way to map hw capabilities (without going insane).
 I think a bunch of
 properties (with standard stuff for gamma, color key, ...) would be
 perfect for that. If we
 set the defaults such that it Just Works for Xv (after setting the
 color key, if present), that
 would be great!

 Yeah, properties for those is probably the way to go.


  +struct drm_mode_get_overlay {
  +       __u64 format_type_ptr;
  +       __u32 overlay_id;
  +
  +       __u32 crtc_id;
  +       __u32 fb_id;
  +
  +       __u32 crtc_x, crtc_y;
  +       __u32 x, y;
  +
  +       __u32 possible_crtcs;
  +       __u32 gamma_size;
  +
  +       __u32 count_format_types;
  +};

 Imo the real problem with formats is stride restrictions and other hw
 restrictions (tiling, ...).
 ARM/v4l people seem to want that to be in the kernel so that they can
 e.g. dma decoded
 video streams directly to the gpu (also for other stuff). Perhaps we
 want to extend the
 create_dumb_gem_object ioctl for that use case, but I'm not too
 convinced that this belongs
 into the kernel.

 I think it's a bit like handling tiling formats; for the most part the
 kernel doesn't care because it's not reading or writing the data, but
 it does need to know the format when programming certain regs.  So I
 don't think we can avoid having surface format information passed in
 when creating an fb for an overlay.  And if we do that we may as well
 enumerate the types we support when overlay info is fetched to make
 portability for app code a little easier.

 Jesse
___
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel


Re: [RFC] drm: add overlays as first class KMS objects

2011-04-28 Thread Ville Syrjälä
On Thu, Apr 28, 2011 at 12:03:32PM -0500, Rob Clark wrote:
 On Mon, Apr 25, 2011 at 5:12 PM, Jesse Barnes jbar...@virtuousgeek.org 
 wrote:
  Looking for comments on this.  Obviously if we're going to add a new type
  of KMS object, we'd better get the ioctl more or less right to begin with,
  which means having all the attributes we'd like to track, plus some
  padding, available from the outset.
 
  So I'd like comments on this; the whole approach may be broken for things
  like OMAP; if so I'd like to hear about it now.  Overall, overlays are
  treated a little like CRTCs, but without associated modes our encoder
  trees hanging off of them.  That is, they can be enabled with a specific
  fb attached at a specific location, but they don't have to worry about
  mode setting, per se (though they do need to have an associated CRTC to
  actually pump their pixels out, post-blend).
 
  Flipping could be done either with the existing ioctl by updating the fb
  base pointer, or through a new flip ioctl similar to what we have already,
  but taking an overlay object instead of a CRTC.
 
 One thing I am wondering about is how to synchronize overlay position
 w/ flipping in the primary gfx layer?  Assuming you actually are
 flipping in primary layer you'd want a new set of overlay
 position/size to take effect on the same vblank that the flip in the
 gfx layer happens, because you are probably relying on some
 transparent pixels (or colorkey, if anyone still uses that) to be
 drawn in the UI layer.

That's a good reason to aim for an OpenWF Display type of API where you
can commit the whole device state atomically.

-- 
Ville Syrjälä
syrj...@sci.fi
http://www.sci.fi/~syrjala/
___
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel


Re: [RFC] drm: add overlays as first class KMS objects

2011-04-27 Thread Daniel Vetter
Hi Jesse,

I like it. It's a bit of a chicken-egg api design problem, but if a
proof-of-concept
implementation exists for an embedded chip plus something to check whether
it's good enough to implement Xv on ancient hw (intel overlay or for the qemu
kms driver, if that could do this), that should be good enough.

A few comments on the ioctl interface.

 +/* Overlays blend with or override other bits on the CRTC */
 +struct drm_mode_set_overlay {
 +       __u32 overlay_id;
 +       __u32 crtc_id;
 +       __u32 fb_id; /* contains surface format type */
 +
 +       __u32 crtc_x, crtc_y;
 +       __u32 x, y;
 +
 +       /* FIXME: color key/mask, scaling, z-order, other? */
 +};

I think scaling is required, you can't implement Xv without that. The
problem is some arbitraray
hw range restrictions, but returning -EINVAL if they're violated looks okay. So

float scale_x, scale_y;

should be good enough. For the remaining things (color conversion,
blending, ...) I don't think
there's any generic way to map hw capabilities (without going insane).
I think a bunch of
properties (with standard stuff for gamma, color key, ...) would be
perfect for that. If we
set the defaults such that it Just Works for Xv (after setting the
color key, if present), that
would be great!

 +struct drm_mode_get_overlay {
 +       __u64 format_type_ptr;
 +       __u32 overlay_id;
 +
 +       __u32 crtc_id;
 +       __u32 fb_id;
 +
 +       __u32 crtc_x, crtc_y;
 +       __u32 x, y;
 +
 +       __u32 possible_crtcs;
 +       __u32 gamma_size;
 +
 +       __u32 count_format_types;
 +};

Imo the real problem with formats is stride restrictions and other hw
restrictions (tiling, ...).
ARM/v4l people seem to want that to be in the kernel so that they can
e.g. dma decoded
video streams directly to the gpu (also for other stuff). Perhaps we
want to extend the
create_dumb_gem_object ioctl for that use case, but I'm not too
convinced that this belongs
into the kernel.

Cheers, Daniel
-- 
Daniel Vetter
daniel.vet...@ffwll.ch - +41 (0) 79 364 57 48 - http://blog.ffwll.ch
___
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel


Re: [RFC] drm: add overlays as first class KMS objects

2011-04-27 Thread Jerome Glisse
On Wed, Apr 27, 2011 at 8:19 AM, Daniel Vetter dan...@ffwll.ch wrote:
 Hi Jesse,

 I like it. It's a bit of a chicken-egg api design problem, but if a
 proof-of-concept
 implementation exists for an embedded chip plus something to check whether
 it's good enough to implement Xv on ancient hw (intel overlay or for the qemu
 kms driver, if that could do this), that should be good enough.

 A few comments on the ioctl interface.

 +/* Overlays blend with or override other bits on the CRTC */
 +struct drm_mode_set_overlay {
 +       __u32 overlay_id;
 +       __u32 crtc_id;
 +       __u32 fb_id; /* contains surface format type */
 +
 +       __u32 crtc_x, crtc_y;
 +       __u32 x, y;
 +
 +       /* FIXME: color key/mask, scaling, z-order, other? */
 +};

 I think scaling is required, you can't implement Xv without that. The
 problem is some arbitraray
 hw range restrictions, but returning -EINVAL if they're violated looks okay. 
 So

 float scale_x, scale_y;

No float in kernel. Would have to use fixed point.

 should be good enough. For the remaining things (color conversion,
 blending, ...) I don't think
 there's any generic way to map hw capabilities (without going insane).
 I think a bunch of
 properties (with standard stuff for gamma, color key, ...) would be
 perfect for that. If we
 set the defaults such that it Just Works for Xv (after setting the
 color key, if present), that
 would be great!

 +struct drm_mode_get_overlay {
 +       __u64 format_type_ptr;
 +       __u32 overlay_id;
 +
 +       __u32 crtc_id;
 +       __u32 fb_id;
 +
 +       __u32 crtc_x, crtc_y;
 +       __u32 x, y;
 +
 +       __u32 possible_crtcs;
 +       __u32 gamma_size;
 +
 +       __u32 count_format_types;
 +};

 Imo the real problem with formats is stride restrictions and other hw
 restrictions (tiling, ...).
 ARM/v4l people seem to want that to be in the kernel so that they can
 e.g. dma decoded
 video streams directly to the gpu (also for other stuff). Perhaps we
 want to extend the
 create_dumb_gem_object ioctl for that use case, but I'm not too
 convinced that this belongs
 into the kernel.

 Cheers, Daniel
 --
 Daniel Vetter
 daniel.vet...@ffwll.ch - +41 (0) 79 364 57 48 - http://blog.ffwll.ch

One thing i wonder is if there is hw that doesn't support non tiled
surface at all.

Cheers,
Jerome
___
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel


Re: [RFC] drm: add overlays as first class KMS objects

2011-04-27 Thread Daniel Vetter
On Wed, Apr 27, 2011 at 3:32 PM, Jerome Glisse j.gli...@gmail.com wrote:
 On Wed, Apr 27, 2011 at 8:19 AM, Daniel Vetter dan...@ffwll.ch wrote:
 float scale_x, scale_y;

 No float in kernel. Would have to use fixed point.

Bleh, of course ;-) 32bit with a 16 bit shift should be good enough
for all scaling needs
-Daniel
-- 
Daniel Vetter
daniel.vet...@ffwll.ch - +41 (0) 79 364 57 48 - http://blog.ffwll.ch
___
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel


Re: [RFC] drm: add overlays as first class KMS objects

2011-04-27 Thread Chris Wilson
On Wed, 27 Apr 2011 16:27:55 +0200, Daniel Vetter dan...@ffwll.ch wrote:
 On Wed, Apr 27, 2011 at 3:32 PM, Jerome Glisse j.gli...@gmail.com wrote:
  On Wed, Apr 27, 2011 at 8:19 AM, Daniel Vetter dan...@ffwll.ch wrote:
  float scale_x, scale_y;
 
  No float in kernel. Would have to use fixed point.
 
 Bleh, of course ;-) 32bit with a 16 bit shift should be good enough
 for all scaling needs

Or just specify the source size. You already know the output size...
-Chris

-- 
Chris Wilson, Intel Open Source Technology Centre
___
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel


Re: [RFC] drm: add overlays as first class KMS objects

2011-04-27 Thread Daniel Vetter
On Wed, Apr 27, 2011 at 4:34 PM, Chris Wilson ch...@chris-wilson.co.uk wrote:
 Or just specify the source size. You already know the output size...

Hm, I've thought that x, y are fb offsets, not width/height of the
target ... Maybe we need that,
too?
-Daniel
-- 
Daniel Vetter
daniel.vet...@ffwll.ch - +41 (0) 79 364 57 48 - http://blog.ffwll.ch
___
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel


Re: [RFC] drm: add overlays as first class KMS objects

2011-04-27 Thread Jesse Barnes
On Wed, 27 Apr 2011 14:19:05 +0200
Daniel Vetter dan...@ffwll.ch wrote:

 Hi Jesse,
 
 I like it. It's a bit of a chicken-egg api design problem, but if a
 proof-of-concept
 implementation exists for an embedded chip plus something to check whether
 it's good enough to implement Xv on ancient hw (intel overlay or for the qemu
 kms driver, if that could do this), that should be good enough.
 
 A few comments on the ioctl interface.

Thanks for checking it out.

  +/* Overlays blend with or override other bits on the CRTC */
  +struct drm_mode_set_overlay {
  +       __u32 overlay_id;
  +       __u32 crtc_id;
  +       __u32 fb_id; /* contains surface format type */
  +
  +       __u32 crtc_x, crtc_y;
  +       __u32 x, y;
  +
  +       /* FIXME: color key/mask, scaling, z-order, other? */
  +};
 
 I think scaling is required, you can't implement Xv without that. The
 problem is some arbitraray
 hw range restrictions, but returning -EINVAL if they're violated looks okay. 
 So
 
 float scale_x, scale_y;

Ok, I'll collect more fields based on this thread and make this
structure bigger.  Still not sure how to handle arbitrary blend and
z-order restrictions without passing a tree around though...

 
 should be good enough. For the remaining things (color conversion,
 blending, ...) I don't think
 there's any generic way to map hw capabilities (without going insane).
 I think a bunch of
 properties (with standard stuff for gamma, color key, ...) would be
 perfect for that. If we
 set the defaults such that it Just Works for Xv (after setting the
 color key, if present), that
 would be great!

Yeah, properties for those is probably the way to go.

 
  +struct drm_mode_get_overlay {
  +       __u64 format_type_ptr;
  +       __u32 overlay_id;
  +
  +       __u32 crtc_id;
  +       __u32 fb_id;
  +
  +       __u32 crtc_x, crtc_y;
  +       __u32 x, y;
  +
  +       __u32 possible_crtcs;
  +       __u32 gamma_size;
  +
  +       __u32 count_format_types;
  +};
 
 Imo the real problem with formats is stride restrictions and other hw
 restrictions (tiling, ...).
 ARM/v4l people seem to want that to be in the kernel so that they can
 e.g. dma decoded
 video streams directly to the gpu (also for other stuff). Perhaps we
 want to extend the
 create_dumb_gem_object ioctl for that use case, but I'm not too
 convinced that this belongs
 into the kernel.

I think it's a bit like handling tiling formats; for the most part the
kernel doesn't care because it's not reading or writing the data, but
it does need to know the format when programming certain regs.  So I
don't think we can avoid having surface format information passed in
when creating an fb for an overlay.  And if we do that we may as well
enumerate the types we support when overlay info is fetched to make
portability for app code a little easier.

Jesse
___
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel


Re: [RFC] drm: add overlays as first class KMS objects

2011-04-26 Thread Alan Cox
 I was planning on adding a new fb ioctl to allow us to create fbs with
 specific surface format types.  We could either enumerate all of the
 ones we support (a list which will grow as drivers and devices are
 added) or try to factor out commit bits into a separate surface struct:
 
 struct drm_mode_surface {
   enum components; /* YUV, VUY, RGB, BGR, ARGB, ... */
   int depth;
   enum packing; /* some list of packing types? */
   ...
 };


Any reason for not just using the Video4Linux 2 formats here, they've
been enumerating video formats for some time already.

___
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel


Re: [RFC] drm: add overlays as first class KMS objects

2011-04-26 Thread Alan Cox
 A lot of older hardware had one overlay that could be sourced to any
 crtc, just not simultaneously.  The tricky part is the formats and
 capabilities: alpha blending, color/chromakey, gamma correction, etc.
 Even the current crtc gamma stuff is somewhat lacking in in terms of
 what hardware is capable of (PWL vs. LUT, user defined conversion
 matrices, gamut remapping, etc.).

Rather than re-inventing enough wheels to run a large truck would it not
make sense to make hardware sourced overlays Video4Linux objects in their
entirity so you can just say attach V4L object A as overlay B

That would provide format definitions, provide control interfaces for
the surface (eg for overlays of cameras such as on some of the Intel
embedded and non PC devices), give you an existing well understood API.

For some hardware you are going to need this integration anyway so that
you can do things like move a GEM object which is currently a DMA target
of a capture device (as well as to fence it).

For a software surface you could either expose it as a V4L object that
is GEM or fb memory backed or at least use the same descriptions so that
the kernel has a consistent set of descriptions for formats and we don't
have user libraries doing adhoc format translation crap.

A lot of capture hardware would map very nicely onto GEM objects I
suspect and if you want to merge live video into Wayland it seems a
logical path ?

Alan
___
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel


Re: [RFC] drm: add overlays as first class KMS objects

2011-04-26 Thread Jerome Glisse
On Mon, Apr 25, 2011 at 8:33 PM, Jesse Barnes jbar...@virtuousgeek.org wrote:
 On Mon, 25 Apr 2011 20:28:20 -0400
 Alex Deucher alexdeuc...@gmail.com wrote:

 On Mon, Apr 25, 2011 at 7:22 PM, Jesse Barnes jbar...@virtuousgeek.org 
 wrote:
  On Mon, 25 Apr 2011 16:16:18 -0700
  Keith Packard kei...@keithp.com wrote:
 
  On Mon, 25 Apr 2011 15:12:20 -0700, Jesse Barnes 
  jbar...@virtuousgeek.org wrote:
 
   Overlays are a bit like half-CRTCs.  They have a location and fb, but
   don't drive outputs directly.  Add support for handling them to the core
   KMS code.
 
  Are overlays/underlays not associated with a specific CRTC? To my mind,
  overlays are another scanout buffer associated with a specific CRTC, so
  you'd create a scanout buffer and attach that to a specific scanout slot
  in a crtc, with the 'default' slot being the usual graphics plane.
 
  Yes, that matches my understanding as well.  I've deliberately made the
  implementation flexible there though, under the assumption that some
  hardware allows a plane to be directed at more than one CRTC (though
  probably not simultaneously).

 A lot of older hardware had one overlay that could be sourced to any
 crtc, just not simultaneously.  The tricky part is the formats and
 capabilities: alpha blending, color/chromakey, gamma correction, etc.
 Even the current crtc gamma stuff is somewhat lacking in in terms of
 what hardware is capable of (PWL vs. LUT, user defined conversion
 matrices, gamut remapping, etc.).

 Right, this implementation allows an overlay to be tied to any crtc
 listed in the possible_crtcs mask (matching the other possible_*
 fields), but only one at a time.  I think that's fairly common.

 Agree about formats and capabilities.  I think enumerating available
 formats is best, perhaps making that a driver specific array if we
 can't agree on a common set.

I would rather have format be common to all hardware, rather than
having a list per hardware. uint32_t would give enough room to add all
formats even if one format is only supported by one hardware only (at
one point in time). Also this would allow to have second dumb way to
allocate scanout buffer in non driver specific way. Maybe we need
another ioctl to query support format somethings like :

struct drm_format_supported {
uint32_t   nformats;
uint32_t __user  *formats;
};

Userspace supply an array of format and driver overwritte entry that
are not supported with 0, 0 would be a special INVALID format.

 Dealing with color correction could also be driver specific; once
 the client has an overlay id it can use driver specific ioctls to
 get/set specifics.

 --
 Jesse Barnes, Intel Open Source Technology Center

Is there that many different way to do color corrections ?

Cheers,
Jerome
___
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel


Re: [RFC] drm: add overlays as first class KMS objects

2011-04-26 Thread Alan Cox
 having a list per hardware. uint32_t would give enough room to add all
 formats even if one format is only supported by one hardware only (at

It would indeed. A point realised by the Amiga designers in 1985 and
turned into a standard of sorts with a registry and process and adopted
by folks like Apple and Microsoft.

See www.fourcc.org. 4CC is already used by the kernel for Video4Linux.




___
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel


Re: [RFC] drm: add overlays as first class KMS objects

2011-04-26 Thread Jerome Glisse
On Tue, Apr 26, 2011 at 10:16 AM, Alan Cox a...@lxorguk.ukuu.org.uk wrote:
 having a list per hardware. uint32_t would give enough room to add all
 formats even if one format is only supported by one hardware only (at

 It would indeed. A point realised by the Amiga designers in 1985 and
 turned into a standard of sorts with a registry and process and adopted
 by folks like Apple and Microsoft.

 See www.fourcc.org. 4CC is already used by the kernel for Video4Linux.


I think 4cc it bit useless with RGB stuff (or maybe i just don't
understand 4cc). For instance i think we want uniq different id for
RGB555, RGB565,RGBX, RGBA, BGRA ... it seems 4cc just says
rgb and than rely on additional informations for color order or
components size.

Cheers,
Jerome
___
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel


Re: [RFC] drm: add overlays as first class KMS objects

2011-04-26 Thread Jesse Barnes
On Tue, 26 Apr 2011 11:01:30 +0100
Alan Cox a...@lxorguk.ukuu.org.uk wrote:

  A lot of older hardware had one overlay that could be sourced to any
  crtc, just not simultaneously.  The tricky part is the formats and
  capabilities: alpha blending, color/chromakey, gamma correction, etc.
  Even the current crtc gamma stuff is somewhat lacking in in terms of
  what hardware is capable of (PWL vs. LUT, user defined conversion
  matrices, gamut remapping, etc.).
 
 Rather than re-inventing enough wheels to run a large truck would it not
 make sense to make hardware sourced overlays Video4Linux objects in their
 entirity so you can just say attach V4L object A as overlay B
 
 That would provide format definitions, provide control interfaces for
 the surface (eg for overlays of cameras such as on some of the Intel
 embedded and non PC devices), give you an existing well understood API.
 
 For some hardware you are going to need this integration anyway so that
 you can do things like move a GEM object which is currently a DMA target
 of a capture device (as well as to fence it).
 
 For a software surface you could either expose it as a V4L object that
 is GEM or fb memory backed or at least use the same descriptions so that
 the kernel has a consistent set of descriptions for formats and we don't
 have user libraries doing adhoc format translation crap.
 
 A lot of capture hardware would map very nicely onto GEM objects I
 suspect and if you want to merge live video into Wayland it seems a
 logical path ?

Thanks Alan, of course that's a good idea, I'll see about integrating
the two.

-- 
Jesse Barnes, Intel Open Source Technology Center
___
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel


Re: [RFC] drm: add overlays as first class KMS objects

2011-04-26 Thread Alan Cox
 I think 4cc it bit useless with RGB stuff (or maybe i just don't
 understand 4cc). For instance i think we want uniq different id for
 RGB555, RGB565,RGBX, RGBA, BGRA ... it seems 4cc just says
 rgb and than rely on additional informations for color order or
 components size.

Yes - grep fourcc include/linux/videodev2.h

plus see the docs - I think its sufficient for pretty much all of it we
would end up needing except maybe a few texture formats like S3TC (which
are of course 4CC codes too)

Alan
___
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel


Re: [RFC] drm: add overlays as first class KMS objects

2011-04-26 Thread Ville Syrjälä
On Mon, Apr 25, 2011 at 04:16:18PM -0700, Keith Packard wrote:
 On Mon, 25 Apr 2011 15:12:20 -0700, Jesse Barnes jbar...@virtuousgeek.org 
 wrote:
 
  Overlays are a bit like half-CRTCs.  They have a location and fb, but
  don't drive outputs directly.  Add support for handling them to the core
  KMS code.
 
 Are overlays/underlays not associated with a specific CRTC? To my mind,
 overlays are another scanout buffer associated with a specific CRTC, so
 you'd create a scanout buffer and attach that to a specific scanout slot
 in a crtc, with the 'default' slot being the usual graphics plane.

And what if you don't have a default plane as such. For example, OMAP3 
has one graphics plane and two video planes, and two output paths. Each
of the planes can be assigned to zero or one outputs. To accomodate this,
the design should allow for CRTCs without any scanout buffers.

Also a glance at DirectFB and OpenWF Display APIs might be helpful.

-- 
Ville Syrjälä
syrj...@sci.fi
http://www.sci.fi/~syrjala/
___
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel


Re: [RFC] drm: add overlays as first class KMS objects

2011-04-26 Thread Jesse Barnes
On Tue, 26 Apr 2011 18:20:03 +0300
Ville Syrjälä syrj...@sci.fi wrote:

 On Mon, Apr 25, 2011 at 04:16:18PM -0700, Keith Packard wrote:
  On Mon, 25 Apr 2011 15:12:20 -0700, Jesse Barnes jbar...@virtuousgeek.org 
  wrote:
  
   Overlays are a bit like half-CRTCs.  They have a location and fb, but
   don't drive outputs directly.  Add support for handling them to the core
   KMS code.
  
  Are overlays/underlays not associated with a specific CRTC? To my mind,
  overlays are another scanout buffer associated with a specific CRTC, so
  you'd create a scanout buffer and attach that to a specific scanout slot
  in a crtc, with the 'default' slot being the usual graphics plane.
 
 And what if you don't have a default plane as such. For example, OMAP3 
 has one graphics plane and two video planes, and two output paths. Each
 of the planes can be assigned to zero or one outputs. To accomodate this,
 the design should allow for CRTCs without any scanout buffers.
 
 Also a glance at DirectFB and OpenWF Display APIs might be helpful.

The current drm crtc code ties together a crtc and fb, but it wouldn't
be too hard to split it out a little (such that passing a null fb on a
mode set wouldn't disable the crtc, or attaching a new scanout surface
to a crtc would enable it) to support something like that.

-- 
Jesse Barnes, Intel Open Source Technology Center
___
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel


Re: [RFC] drm: add overlays as first class KMS objects

2011-04-26 Thread Alan Cox
 And what if you don't have a default plane as such. For example, OMAP3 
 has one graphics plane and two video planes, and two output paths. Each
 of the planes can be assigned to zero or one outputs. To accomodate this,
 the design should allow for CRTCs without any scanout buffers.

Some TV type stuff is a bit like that - well there may be a scanout buffer
but its on a protected hardware path and no part of the system except
certain bits of hardware can touch it from decrypt to output connector.

Clearly a scanout buffer isn't the only way to describe what a crtc is
outputting and you need a somewhat more flexible handle including one you
can acquire somehow to represent other objects like capture buffers,
protected planes and live video merges.

Alan
___
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel


Re: [RFC] drm: add overlays as first class KMS objects

2011-04-25 Thread Keith Packard
On Mon, 25 Apr 2011 15:12:20 -0700, Jesse Barnes jbar...@virtuousgeek.org 
wrote:

 Overlays are a bit like half-CRTCs.  They have a location and fb, but
 don't drive outputs directly.  Add support for handling them to the core
 KMS code.

Are overlays/underlays not associated with a specific CRTC? To my mind,
overlays are another scanout buffer associated with a specific CRTC, so
you'd create a scanout buffer and attach that to a specific scanout slot
in a crtc, with the 'default' slot being the usual graphics plane.

-- 
keith.pack...@intel.com


pgpcUvbCMVbXh.pgp
Description: PGP signature
___
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel


Re: [RFC] drm: add overlays as first class KMS objects

2011-04-25 Thread Jesse Barnes
On Mon, 25 Apr 2011 16:16:18 -0700
Keith Packard kei...@keithp.com wrote:

 On Mon, 25 Apr 2011 15:12:20 -0700, Jesse Barnes jbar...@virtuousgeek.org 
 wrote:
 
  Overlays are a bit like half-CRTCs.  They have a location and fb, but
  don't drive outputs directly.  Add support for handling them to the core
  KMS code.
 
 Are overlays/underlays not associated with a specific CRTC? To my mind,
 overlays are another scanout buffer associated with a specific CRTC, so
 you'd create a scanout buffer and attach that to a specific scanout slot
 in a crtc, with the 'default' slot being the usual graphics plane.

Yes, that matches my understanding as well.  I've deliberately made the
implementation flexible there though, under the assumption that some
hardware allows a plane to be directed at more than one CRTC (though
probably not simultaneously).

Arguably, this is something we should have done when the
connector/encoder split was done (making planes in general first class
objects).  But with today's code, treating a CRTC as a pixel pump and a
primary plane seems fine, with overlays tacked onto the side as
secondary pixel sources but tied to a specific CRTC.

-- 
Jesse Barnes, Intel Open Source Technology Center
___
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel


Re: [RFC] drm: add overlays as first class KMS objects

2011-04-25 Thread Keith Packard
On Mon, 25 Apr 2011 16:22:16 -0700, Jesse Barnes jbar...@virtuousgeek.org 
wrote:

 Yes, that matches my understanding as well.  I've deliberately made the
 implementation flexible there though, under the assumption that some
 hardware allows a plane to be directed at more than one CRTC (though
 probably not simultaneously).

So you create a scanout buffer and assign it to the appropriate slot in
the CRTC. Describing *how* the CRTC mixes pixels would be a good idea,
so the ordering of the slots might be relevant, and they might have a
blend mode (per-pixel alpha values, color key, separate alpha plane, etc).

 Arguably, this is something we should have done when the
 connector/encoder split was done (making planes in general first class
 objects).  But with today's code, treating a CRTC as a pixel pump and a
 primary plane seems fine, with overlays tacked onto the side as
 secondary pixel sources but tied to a specific CRTC.

I know of hardware that needs a lot more than one overlay...

-- 
keith.pack...@intel.com


pgpD8Zgxr6lZK.pgp
Description: PGP signature
___
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel


Re: [RFC] drm: add overlays as first class KMS objects

2011-04-25 Thread Jesse Barnes
On Mon, 25 Apr 2011 16:35:20 -0700
Stéphane Marchesin stephane.marche...@gmail.com wrote:

 On Mon, Apr 25, 2011 at 16:22, Jesse Barnes jbar...@virtuousgeek.org wrote:
  On Mon, 25 Apr 2011 16:16:18 -0700
  Keith Packard kei...@keithp.com wrote:
 
  On Mon, 25 Apr 2011 15:12:20 -0700, Jesse Barnes 
  jbar...@virtuousgeek.org wrote:
 
   Overlays are a bit like half-CRTCs.  They have a location and fb, but
   don't drive outputs directly.  Add support for handling them to the core
   KMS code.
 
  Are overlays/underlays not associated with a specific CRTC? To my mind,
  overlays are another scanout buffer associated with a specific CRTC, so
  you'd create a scanout buffer and attach that to a specific scanout slot
  in a crtc, with the 'default' slot being the usual graphics plane.
 
  Yes, that matches my understanding as well.  I've deliberately made the
  implementation flexible there though, under the assumption that some
  hardware allows a plane to be directed at more than one CRTC (though
  probably not simultaneously).
 
  Arguably, this is something we should have done when the
  connector/encoder split was done (making planes in general first class
  objects).  But with today's code, treating a CRTC as a pixel pump and a
  primary plane seems fine, with overlays tacked onto the side as
  secondary pixel sources but tied to a specific CRTC.
 
 
 What is the plan for supporting multiple formats? When I looked at
 this for nouveau it ended up growing out of control when adding
 support for all the YUV (planar, packed, 12 or 16 bpp formats) and RGB
 format combinations.

I know there are a ton of surface formats, but I don't want to restrict
what drivers can export as supported.

I was planning on adding a new fb ioctl to allow us to create fbs with
specific surface format types.  We could either enumerate all of the
ones we support (a list which will grow as drivers and devices are
added) or try to factor out commit bits into a separate surface struct:

struct drm_mode_surface {
enum components; /* YUV, VUY, RGB, BGR, ARGB, ... */
int depth;
enum packing; /* some list of packing types? */
...
};

Even if we did that we may end up needing special surface formats not
covered by the general description.  I think pixman just ends up
enumerating them all; it's a little messy, but we know it would be
extensible at least. :)

-- 
Jesse Barnes, Intel Open Source Technology Center
___
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel


Re: [RFC] drm: add overlays as first class KMS objects

2011-04-25 Thread Jesse Barnes
On Mon, 25 Apr 2011 16:37:46 -0700
Keith Packard kei...@keithp.com wrote:

 On Mon, 25 Apr 2011 16:22:16 -0700, Jesse Barnes jbar...@virtuousgeek.org 
 wrote:
 
  Yes, that matches my understanding as well.  I've deliberately made the
  implementation flexible there though, under the assumption that some
  hardware allows a plane to be directed at more than one CRTC (though
  probably not simultaneously).
 
 So you create a scanout buffer and assign it to the appropriate slot in
 the CRTC. Describing *how* the CRTC mixes pixels would be a good idea,
 so the ordering of the slots might be relevant, and they might have a
 blend mode (per-pixel alpha values, color key, separate alpha plane, etc).

Yeah, pixel blending and z order should be exposed.  I think that means
returning more info in the get_overlay_res ioctl.  Hm.. not sure of the
best way of representing that...

  Arguably, this is something we should have done when the
  connector/encoder split was done (making planes in general first class
  objects).  But with today's code, treating a CRTC as a pixel pump and a
  primary plane seems fine, with overlays tacked onto the side as
  secondary pixel sources but tied to a specific CRTC.
 
 I know of hardware that needs a lot more than one overlay...

Yeah I don't want to preclude that (and I don't think this
implementation does; it allows a many to one relationship between
overlays and CRTCs). TVs in particular can get messy since the z order
may be semi-fixed between certain planes, and blending may be limited to
different types at different layers.

-- 
Jesse Barnes, Intel Open Source Technology Center
___
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel


Re: [RFC] drm: add overlays as first class KMS objects

2011-04-25 Thread Stéphane Marchesin
On Mon, Apr 25, 2011 at 16:22, Jesse Barnes jbar...@virtuousgeek.org wrote:
 On Mon, 25 Apr 2011 16:16:18 -0700
 Keith Packard kei...@keithp.com wrote:

 On Mon, 25 Apr 2011 15:12:20 -0700, Jesse Barnes jbar...@virtuousgeek.org 
 wrote:

  Overlays are a bit like half-CRTCs.  They have a location and fb, but
  don't drive outputs directly.  Add support for handling them to the core
  KMS code.

 Are overlays/underlays not associated with a specific CRTC? To my mind,
 overlays are another scanout buffer associated with a specific CRTC, so
 you'd create a scanout buffer and attach that to a specific scanout slot
 in a crtc, with the 'default' slot being the usual graphics plane.

 Yes, that matches my understanding as well.  I've deliberately made the
 implementation flexible there though, under the assumption that some
 hardware allows a plane to be directed at more than one CRTC (though
 probably not simultaneously).

 Arguably, this is something we should have done when the
 connector/encoder split was done (making planes in general first class
 objects).  But with today's code, treating a CRTC as a pixel pump and a
 primary plane seems fine, with overlays tacked onto the side as
 secondary pixel sources but tied to a specific CRTC.


What is the plan for supporting multiple formats? When I looked at
this for nouveau it ended up growing out of control when adding
support for all the YUV (planar, packed, 12 or 16 bpp formats) and RGB
format combinations.

Stéphane
___
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel


Re: [RFC] drm: add overlays as first class KMS objects

2011-04-25 Thread Alex Deucher
On Mon, Apr 25, 2011 at 7:22 PM, Jesse Barnes jbar...@virtuousgeek.org wrote:
 On Mon, 25 Apr 2011 16:16:18 -0700
 Keith Packard kei...@keithp.com wrote:

 On Mon, 25 Apr 2011 15:12:20 -0700, Jesse Barnes jbar...@virtuousgeek.org 
 wrote:

  Overlays are a bit like half-CRTCs.  They have a location and fb, but
  don't drive outputs directly.  Add support for handling them to the core
  KMS code.

 Are overlays/underlays not associated with a specific CRTC? To my mind,
 overlays are another scanout buffer associated with a specific CRTC, so
 you'd create a scanout buffer and attach that to a specific scanout slot
 in a crtc, with the 'default' slot being the usual graphics plane.

 Yes, that matches my understanding as well.  I've deliberately made the
 implementation flexible there though, under the assumption that some
 hardware allows a plane to be directed at more than one CRTC (though
 probably not simultaneously).

A lot of older hardware had one overlay that could be sourced to any
crtc, just not simultaneously.  The tricky part is the formats and
capabilities: alpha blending, color/chromakey, gamma correction, etc.
Even the current crtc gamma stuff is somewhat lacking in in terms of
what hardware is capable of (PWL vs. LUT, user defined conversion
matrices, gamut remapping, etc.).

Alex
___
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel


Re: [RFC] drm: add overlays as first class KMS objects

2011-04-25 Thread Jesse Barnes
On Mon, 25 Apr 2011 20:28:20 -0400
Alex Deucher alexdeuc...@gmail.com wrote:

 On Mon, Apr 25, 2011 at 7:22 PM, Jesse Barnes jbar...@virtuousgeek.org 
 wrote:
  On Mon, 25 Apr 2011 16:16:18 -0700
  Keith Packard kei...@keithp.com wrote:
 
  On Mon, 25 Apr 2011 15:12:20 -0700, Jesse Barnes 
  jbar...@virtuousgeek.org wrote:
 
   Overlays are a bit like half-CRTCs.  They have a location and fb, but
   don't drive outputs directly.  Add support for handling them to the core
   KMS code.
 
  Are overlays/underlays not associated with a specific CRTC? To my mind,
  overlays are another scanout buffer associated with a specific CRTC, so
  you'd create a scanout buffer and attach that to a specific scanout slot
  in a crtc, with the 'default' slot being the usual graphics plane.
 
  Yes, that matches my understanding as well.  I've deliberately made the
  implementation flexible there though, under the assumption that some
  hardware allows a plane to be directed at more than one CRTC (though
  probably not simultaneously).
 
 A lot of older hardware had one overlay that could be sourced to any
 crtc, just not simultaneously.  The tricky part is the formats and
 capabilities: alpha blending, color/chromakey, gamma correction, etc.
 Even the current crtc gamma stuff is somewhat lacking in in terms of
 what hardware is capable of (PWL vs. LUT, user defined conversion
 matrices, gamut remapping, etc.).

Right, this implementation allows an overlay to be tied to any crtc
listed in the possible_crtcs mask (matching the other possible_*
fields), but only one at a time.  I think that's fairly common.

Agree about formats and capabilities.  I think enumerating available
formats is best, perhaps making that a driver specific array if we
can't agree on a common set.

Dealing with color correction could also be driver specific; once
the client has an overlay id it can use driver specific ioctls to
get/set specifics.

-- 
Jesse Barnes, Intel Open Source Technology Center
___
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel


Re: [RFC] drm: add overlays as first class KMS objects

2011-04-25 Thread Keith Packard
On Mon, 25 Apr 2011 16:52:58 -0700, Jesse Barnes jbar...@virtuousgeek.org 
wrote:

 struct drm_mode_surface {
   enum components; /* YUV, VUY, RGB, BGR, ARGB, ... */
   int depth;
   enum packing; /* some list of packing types? */
   ...
 };

Might just make a uint32_t 'type', predefine some obvious types and
allow drivers to provide more, perhaps with a magic 'vendor' bit so it's
easy to add more standard types. And, these are scanout buffers, I think
it would be nice to use that in the name rather than the
all-too-overused 'surface'.

-- 
keith.pack...@intel.com


pgp9zVOOREOGc.pgp
Description: PGP signature
___
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel