LibDRM Cloned Monitor Support

Rian Quinn rianquinn at gmail.com
Tue Nov 11 17:40:05 PST 2014


Right now I need to support Intel and AMD, and nVidia would be a great plus with VMWare being my sudo dev/test environment on travel. I have control of the kernel so it’s whatever I need. 

Can you point me to the “atomic-helpers” stuff. I have never heard of that. Is that exposed via LibDRM?

Thanks,
- Rian

> On Nov 11, 2014, at 8:35 PM, Rob Clark <robdclark at gmail.com> wrote:
> 
> On Tue, Nov 11, 2014 at 8:25 PM, Rian Quinn <rianquinn at gmail.com> wrote:
>> Yeah, I had issues trying to get the first method to work across the board on all of the hardware that we need to support. One example that I saw was to use the second method, and then to use planes when you had to scale. So basically, if you could not find a match, you would select the lowest of the resolutions, and then setup planes for the ones that need to be scaled. From what I can see, this will end up consuming an extra frame buffer, but it takes care of the issue.
>> 
>> Do you see any issues with that approach?
>> 
> 
> This is basically a recent approach (meaning not necessarily supported
> by all drivers, etc).. with the primary-plane feature you could even
> configure the primary scanout layer via the plane API (but, keep in
> mind, scaling is not something all hw supports).  The new
> 'atomic-helpers' stuff should help with exposing support for hw that
> can do scaling on primary layer.
> 
> So in the end, it depends on what hw, and what kernel versions, you
> need to support.  You may need to fallback to cropping without scaling
> if you need to support everything.  But one of the goals with the
> 'atomic' work is to make it easier to expose scaling support on hw
> that can do it.
> 
>> Thanks,
>> - Rian
>> 
>>> On Nov 11, 2014, at 8:10 PM, Rob Clark <robdclark at gmail.com> wrote:
>>> 
>>> On Tue, Nov 11, 2014 at 12:19 PM, Rian Quinn <rianquinn at gmail.com> wrote:
>>>> What exactly is the correct way to support cloned monitors using LibDRM. As
>>>> I see it, there are two methods:
>>>> 
>>>> - Use the connector array in drmModeSetCrtc
>>>> - Use one crtc per connector, but share the same framebuffer.
>>>> 
>>>> Right now I am using option #2 as it seems to be the most flexible, but my
>>>> current issue is that on laptops, the connector for the laptop's main screen
>>>> is only retuning 1 mode (tested on a Lenovo, and an HP folio), which means
>>>> that your unlikely to find a common mode between the laptop monitor, and an
>>>> external screen (monitor or projector).
>>> 
>>> #2 is the method that will work on all hw..  usually DE's will pick
>>> the closest matching modes between the two connectors/outputs, and
>>> truncate edges on the smaller display (via non-zero x/y offset).  Some
>>> hw may support upscaling to fit, although that isn't really exposed in
>>> a completely standard way at the moment.
>>> 
>>> BR,
>>> -R
>>> 
>>>> So with the above problem, right now the only thing that I know to do would
>>>> be to set the resolution of the laptop monitor and external monitor to be
>>>> their "preferred" resolution, and then copy and scale for "cloned mode"
>>>> which seems like a terrible idea considering the laptop monitor should be
>>>> able to set itself to some more basic resolutions (like 800x600).
>>>> 
>>>> - Rian
>>>> 
>>>> _______________________________________________
>>>> dri-devel mailing list
>>>> dri-devel at lists.freedesktop.org
>>>> http://lists.freedesktop.org/mailman/listinfo/dri-devel
>>>> 
>> 



More information about the dri-devel mailing list