21.12.2016 10:05, Daniel Vetter wrote: > On Tue, Dec 20, 2016 at 11:38:52AM +0100, Michael Thayer wrote: >> The suggested X and Y connector properties are intended as a way for drivers >> for virtual machine GPUs to provide information about the layout of the >> host system windows (or whatever) corresponding to given guest connectors. >> The intention is for the guest system to lay out screens in the virtual >> desktop in a way which reflects the host layout. Sometimes though the guest >> system chooses not to follow those hints, usually due to user requests. In >> this case it is useful to be able to pass information back about the actual >> layout chosen. >> >> The immediate use case for this is host-to-guest pointer input mapping. >> Qemu, VirtualBox and VMWare currently handle this by providing an emulated >> graphics tablet device to the guest. libinput defaults, as did X.Org before >> it used libinput, to mapping the position information reported by the device >> to the smallest rectangle enclosing the screen layout. Knowing that layout >> lets the hypervisor send the right position information through the input >> device. >> >> Signed-off-by: Michael Thayer <michael.thayer at oracle.com> >> --- >> Follow-up to thread "Passing multi-screen layout to KMS driver". In that >> thread, Gerd suggested an alternative way of solving the use case, namely >> emulating one input device per virtual screen, touchscreen-style. My reasons >> for prefering this approach is that it is relatively uninvasive, and closer >> to the way things are done now without (in my opinion) being ugly; and that >> automatic touchscreen input to screen mapping is still not a solved problem. >> I think that both are valid though. >> >> Both approaches require changes to the hypervisor and virtual hardware, and >> to user-space consumers which would use the interface. I have checked the >> mutter source and believe that the change required to support the interface >> as implemented here would be minimal and intend to submit a patch if this >> change is accepted. I think that the virtual hardware changes are likely to >> be less invasive with this approach than with the other. This change will >> though also require small drm driver changes once the virtual hardware has >> been adjusted; currently to the qxl driver and to the out-of-tree vboxvideo >> driver. It would certainly be nice to have in virtio-gpu. > > Makes sense I think, but for merging we need: > - some driver to implement
This is where it starts getting tricky. vboxvideo is out of tree. In theory I could look at getting it merged, but that needs time I am rather short of (I am the only person maintaining that driver and it is just one of my responsibilities; and there are some bits there that are probably too ugly to merge as is). I don't think I am really the person to be doing this for qxl/virtio-gpu as that required adding the support to qemu too. I think that they really should have it, but I would rather not be the one adding it. So would our out-of-tree driver be good enough? > - some userspace to take advantage of it As I wrote, mutter would be the first candidate. > - and some proper kernel-doc, we're deprecating that horrible property > table that no one human can maintain. Latest upstream has lots of > examples of what I have in mind. I can take a look at that. > Also if we make this mutable would be good to switch the entire > scaffolding over to the atomic way of doing things, i.e. put the property > value as a decoded thing into drm_connector_state and wire up all the > handling. Means you need an atomic driver as demonstration vehicle, but > I'd say you want that anyway ;-) Currently vboxvideo is keeping close to ast as I have time to follow it. Switching to atomic as long as ast is not switched likely means more new bugs introduced than I would like to have time to fix, plus maintaining two versions of vboxvideo, one for pre-atomic kernels and one for post. At the moment we support 3.11 to 4.10 with a manageable minimum of conditional compilation. So does "would be good" mean what it says, or is it meant slightly more strongly? Thanks and regards, Michael > -Daniel > >> >> Regards >> Michael >> >> Documentation/gpu/kms-properties.csv | 4 ++-- >> drivers/gpu/drm/drm_connector.c | 4 ++-- >> 2 files changed, 4 insertions(+), 4 deletions(-) >> >> diff --git a/Documentation/gpu/kms-properties.csv >> b/Documentation/gpu/kms-properties.csv >> index 981873a..825238e 100644 >> --- a/Documentation/gpu/kms-properties.csv >> +++ b/Documentation/gpu/kms-properties.csv >> @@ -20,8 +20,8 @@ Owner Module/Drivers,Group,Property Name,Type,Property >> Values,Object attached,De >> ,,âoverscanâ,RANGE,"Min=0, Max=100",Connector,TBD >> ,,âsaturationâ,RANGE,"Min=0, Max=100",Connector,TBD >> ,,âhueâ,RANGE,"Min=0, Max=100",Connector,TBD >> -,Virtual GPU,âsuggested Xâ,RANGE,"Min=0, >> Max=0xffffffff",Connector,property to suggest an X offset for a connector >> -,,âsuggested Yâ,RANGE,"Min=0, Max=0xffffffff",Connector,property to >> suggest an Y offset for a connector >> +,Virtual GPU,âsuggested Xâ,RANGE,"Min=0, >> Max=0xffffffff",Connector,"property to suggest an X offset for a connector >> to help match positions of host windows and guest screens; can be set by the >> driver for the host or user-space for the guest" >> +,,âsuggested Yâ,RANGE,"Min=0, Max=0xffffffff",Connector,"property to >> suggest an Y offset for a connector to help match positions of host windows >> and guest screens; can be set by the driver for the host or user--space for >> the guest" >> ,Optional,"""aspect ratio""",ENUM,"{ ""None"", ""4:3"", ""16:9"" >> }",Connector,TDB >> i915,Generic,"""Broadcast RGB""",ENUM,"{ ""Automatic"", ""Full"", ""Limited >> 16:235"" }",Connector,"When this property is set to Limited 16:235 and CTM >> is set, the hardware will be programmed with the result of the >> multiplication of CTM by the limited range matrix to ensure the pixels >> normaly in the range 0..1.0 are remapped to the range 16/255..235/255." >> ,,âaudioâ,ENUM,"{ ""force-dvi"", ""off"", ""auto"", ""on"" >> }",Connector,TBD >> diff --git a/drivers/gpu/drm/drm_connector.c >> b/drivers/gpu/drm/drm_connector.c >> index 5a45262..ebb3cee 100644 >> --- a/drivers/gpu/drm/drm_connector.c >> +++ b/drivers/gpu/drm/drm_connector.c >> @@ -876,10 +876,10 @@ int drm_mode_create_suggested_offset_properties(struct >> drm_device *dev) >> return 0; >> >> dev->mode_config.suggested_x_property = >> - drm_property_create_range(dev, DRM_MODE_PROP_IMMUTABLE, >> "suggested X", 0, 0xffffffff); >> + drm_property_create_range(dev, 0, "suggested X", 0, 0xffffffff); >> >> dev->mode_config.suggested_y_property = >> - drm_property_create_range(dev, DRM_MODE_PROP_IMMUTABLE, >> "suggested Y", 0, 0xffffffff); >> + drm_property_create_range(dev, 0, "suggested Y", 0, 0xffffffff); >> >> if (dev->mode_config.suggested_x_property == NULL || >> dev->mode_config.suggested_y_property == NULL) >> -- >> 2.9.3 >> >> _______________________________________________ >> dri-devel mailing list >> dri-devel at lists.freedesktop.org >> https://lists.freedesktop.org/mailman/listinfo/dri-devel > -- Michael Thayer | VirtualBox engineer ORACLE Deutschland B.V. & Co. KG | Werkstr. 24 | D-71384 Weinstadt ORACLE Deutschland B.V. & Co. KG Hauptverwaltung: RiesstraÃe 25, D-80992 München Registergericht: Amtsgericht München, HRA 95603 Komplementärin: ORACLE Deutschland Verwaltung B.V. Hertogswetering 163/167, 3543 AS Utrecht, Niederlande Handelsregister der Handelskammer Midden-Nederland, Nr. 30143697 Geschäftsführer: Alexander van der Ven, Jan Schultheiss, Val Maher