[Spice-devel] [PATCH] Update drm properties correctly
Marc-André Lureau
mlureau at redhat.com
Thu Nov 6 15:59:58 PST 2014
----- Original Message -----
> When connector properties got changed, those changes were not being
> propagated to user-space. This pushes those chagnes up so that e.g. new
> suggested_x|y properties can be used to help lay out multiple displays
> properly. This code is based on similar code from the nouveau driver.
> ---
> src/qxl_drmmode.c | 54
> +++++++++++++++++++++++++++++++++++++++++++++++++++++-
> 1 file changed, 53 insertions(+), 1 deletion(-)
>
> diff --git a/src/qxl_drmmode.c b/src/qxl_drmmode.c
> index b7ea7d1..899eefd 100644
> --- a/src/qxl_drmmode.c
> +++ b/src/qxl_drmmode.c
> @@ -640,7 +640,59 @@ drmmode_output_set_property(xf86OutputPtr output, Atom
> property,
> static Bool
> drmmode_output_get_property(xf86OutputPtr output, Atom property)
> {
> - return TRUE;
> + drmmode_output_private_ptr drmmode_output = output->driver_private;
> + drmmode_ptr drmmode = drmmode_output->drmmode;
> + uint32_t value;
> + int err, i;
> +
> + if (output->scrn->vtSema) {
> + drmModeFreeConnector(drmmode_output->mode_output);
> + drmmode_output->mode_output =
> + drmModeGetConnector(drmmode->fd, drmmode_output->output_id);
> + }
> +
> + if (!drmmode_output->mode_output)
> + return FALSE;
This line is different, is this a normal condition? If not, shouldn't be a warning?
> +
> + for (i = 0; i < drmmode_output->num_props; i++) {
> + int n;
> + drmmode_prop_ptr p = &drmmode_output->props[i];
> + if (p->atoms[0] != property)
> + continue;
> +
> + for (n = 0; n < drmmode_output->mode_output->count_props; n++) {
> + int id = drmmode_output->mode_output->props[n];
> + if (id == p->mode_prop->prop_id) {
> + value = drmmode_output->mode_output->prop_values[n];
and here, nouveau seems to use the p->index to access the value directly.
> + break;
> + }
> + }
> +
> + if (p->mode_prop->flags & DRM_MODE_PROP_RANGE) {
> + err = RRChangeOutputProperty(output->randr_output,
> + property, XA_INTEGER, 32,
> + PropModeReplace, 1, &value,
> + FALSE, FALSE);
> +
> + return !err;
> + } else if (p->mode_prop->flags & DRM_MODE_PROP_ENUM) {
> + int j;
> +
> + /* search for matching name string, then set its value down */
> + for (j = 0; j < p->mode_prop->count_enums; j++) {
> + if (p->mode_prop->enums[j].value == value)
> + break;
> + }
> +
> + err = RRChangeOutputProperty(output->randr_output, property,
> + XA_ATOM, 32, PropModeReplace, 1,
> + &p->atoms[j+1], FALSE, FALSE);
> +
> + return !err;
> + }
> + }
> +
> + return FALSE;
> }
looks ok otherwise
>
> static const xf86OutputFuncsRec drmmode_output_funcs = {
> --
> 1.9.3
>
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/spice-devel
>
More information about the xorg-devel
mailing list