[PATCH] compositor-drm: consider the best mode of the mode_list as an option
Fabien DESSENNE
fabien.dessenne at st.com
Tue Jan 7 01:47:37 PST 2014
What is the next step to get this patch merged ?
I am asking because I am a new contributor and I am not really aware of the acceptance / merge process.
Fabien
> -----Original Message-----
> From: Fabien DESSENNE
> Sent: mardi 17 décembre 2013 10:01
> To: 'Bryce W. Harrington'
> Cc: wayland-devel at lists.freedesktop.org; Benjamin Gaignard
> Subject: RE: [PATCH] compositor-drm: consider the best mode of the
> mode_list as an option
>
> > From: Bryce W. Harrington [mailto:b.harrington at samsung.com]
> > Sent: mardi 17 décembre 2013 03:26
> > To: Fabien DESSENNE
> > Cc: wayland-devel at lists.freedesktop.org; Benjamin Gaignard
> > Subject: Re: [PATCH] compositor-drm: consider the best mode of the
> > mode_list as an option
> >
> > On Thu, Dec 12, 2013 at 05:13:56PM +0100, Fabien DESSENNE wrote:
> > > This patch fixes an issue where Weston using the DRM backend, cannot
> > > start the display. This happens in the following context:
> > > - no video mode is set before weston starts (eg no "/dev/fb" set up)
> > > - weston is not configured with any default video mode (nothing from
> > > weston.ini nor command line)
> > > - the DRM driver provides with a list of supported modes, but none
> > > of
> > them
> > > is marked as PREFERRED (which is not a usual case, but it happens)
> >
> > Good point, I've seen such hardware myself.
> >
> > > In that case, according to the current implementation, the DRM
> > > compositor fails to set a video mode.
> > > This fix lets the DRM compositor selects a video mode (the best one
> > > of the list, which is the first) from the ones provided by the driver.
> >
> > Is it always guaranteed to be the best, or is it just returning the
> > list in the order stored in EDID? Either way, picking the first in
> > the list is probably sensible, however in the latter case I don't know
> > that we can assume it's the 'best'. Maybe the variable should be called
> 'first'
> > rather than 'best'? But I'm just bikeshedding...
>
> Well, initially the variable was 'first', but I decided to change it to 'best'...
> Using 'first' may be confusing as the mode list is being parsed in the reverse
> order.
> The list provided by the DRM driver as implemented by the generic core part
> (drm_modes.c) is ordered according to the following rule:
> - first the preferred mode(s) as defined by the EDID
> - then from the highest to the lowest resolution So the first one is the best
> one.
>
> >
> > > Signed-off-by: Fabien Dessenne <fabien.dessenne at st.com>
> >
> > Reviewed-by: Bryce Harrington <b.harrington at samsung.com>
> >
> > > ---
> > > src/compositor-drm.c | 6 +++++-
> > > 1 file changed, 5 insertions(+), 1 deletion(-)
> > >
> > > diff --git a/src/compositor-drm.c b/src/compositor-drm.c index
> > > fbf6e49..54caaa9 100644
> > > --- a/src/compositor-drm.c
> > > +++ b/src/compositor-drm.c
> > > @@ -1858,7 +1858,7 @@ create_output_for_connector(struct
> > drm_compositor *ec,
> > > int x, int y, struct udev_device *drm_device) {
> > > struct drm_output *output;
> > > - struct drm_mode *drm_mode, *next, *preferred, *current,
> > *configured;
> > > + struct drm_mode *drm_mode, *next, *preferred, *current,
> > *configured,
> > > +*best;
> > > struct weston_mode *m;
> > > struct weston_config_section *section;
> > > drmModeEncoder *encoder;
> > > @@ -1961,6 +1961,7 @@ create_output_for_connector(struct
> > drm_compositor *ec,
> > > preferred = NULL;
> > > current = NULL;
> > > configured = NULL;
> > > + best = NULL;
> > >
> > > wl_list_for_each_reverse(drm_mode, &output->base.mode_list,
> > base.link) {
> > > if (config == OUTPUT_CONFIG_MODE && @@ -1971,6
> > +1972,7 @@
> > > create_output_for_connector(struct drm_compositor *ec,
> > > current = drm_mode;
> > > if (drm_mode->base.flags &
> > WL_OUTPUT_MODE_PREFERRED)
> > > preferred = drm_mode;
> > > + best = drm_mode;
> > > }
> > >
> > > if (config == OUTPUT_CONFIG_MODELINE) { @@ -1996,6 +1998,8
> > @@
> > > create_output_for_connector(struct drm_compositor *ec,
> > > output->base.current_mode = &preferred->base;
> > > else if (current)
> > > output->base.current_mode = ¤t->base;
> > > + else if (best)
> > > + output->base.current_mode = &best->base;
> > >
> > > if (output->base.current_mode == NULL) {
> > > weston_log("no available modes for %s\n", output-
> base.name);
> > > --
> > > 1.7.9.5
> > >
> > > _______________________________________________
> > > wayland-devel mailing list
> > > wayland-devel at lists.freedesktop.org
> > > http://lists.freedesktop.org/mailman/listinfo/wayland-devel
More information about the wayland-devel
mailing list