Hi, I don't understand this one at all, you're moving configuration back into the backend, partially reverting patch 5.
2016-04-16 6:28 GMT+03:00 Bryce Harrington <[email protected]>: > Signed-off-by: Bryce Harrington <[email protected]> > --- > src/compositor-drm.c | 93 > ++++++++++++++++++++++++++++++++++++++++++++-------- > src/compositor-drm.h | 41 ----------------------- > src/main.c | 43 ------------------------ > 3 files changed, 80 insertions(+), 97 deletions(-) > > diff --git a/src/compositor-drm.c b/src/compositor-drm.c > index 6ef706a..d129adc 100644 > --- a/src/compositor-drm.c > +++ b/src/compositor-drm.c > @@ -75,6 +75,41 @@ > #define GBM_BO_USE_CURSOR GBM_BO_USE_CURSOR_64X64 > #endif > > +enum weston_drm_backend_output_mode { > + /** The output is disabled */ > + WESTON_DRM_BACKEND_OUTPUT_OFF, > + > + /** The output will use the current active mode */ > + WESTON_DRM_BACKEND_OUTPUT_CURRENT, > + > + /** The output will use the preferred mode. A modeline can be provided > + * by setting weston_backend_output_config::modeline in the form of > + * "WIDTHxHEIGHT" or in the form of an explicit modeline calculated > + * using e.g. the cvt tool. If a valid modeline is supplied it will be > + * used, if invalid or NULL the preferred available mode will be > used. */ > + WESTON_DRM_BACKEND_OUTPUT_PREFERRED, > +}; > + > +struct weston_drm_backend_output_config { > + struct weston_backend_output_config base; > + > + /** The pixel format to be used by the output. Valid values are: > + * - NULL - The format set at backend creation time will be used > + * - "xrgb8888" > + * - "rgb565" > + * - "xrgb2101010" > + */ > + char *gbm_format; > + > + /** The seat to be used by the output. Set to NULL to use the > + * default seat. */ > + char *seat; > + > + /** The modeline to be used by the output. Refer to the documentation > + * of WESTON_DRM_BACKEND_OUTPUT_PREFERRED for details. */ > + char *modeline; > +}; > + > struct drm_backend { > struct weston_backend base; > struct weston_compositor *compositor; > @@ -121,16 +156,6 @@ struct drm_backend { > int32_t cursor_width; > int32_t cursor_height; > > - /** Callback used to configure the outputs. > - * > - * This function will be called by the backend when a new DRM > - * output needs to be configured. > - */ > - enum weston_drm_backend_output_mode > - (*configure_output)(struct weston_compositor *compositor, > - bool use_current_mode, > - const char *name, > - struct weston_drm_backend_output_config > *output_config); > bool use_current_mode; > }; > > @@ -2275,6 +2300,49 @@ connector_get_current_mode(drmModeConnector > *connector, int drm_fd, > return 0; > } > > +static enum weston_drm_backend_output_mode > +drm_configure_output(struct weston_compositor *c, > + bool use_current_mode, > + const char *name, > + struct weston_drm_backend_output_config *config) > +{ > + struct weston_config *wc = weston_compositor_get_user_data(c); This is wrong, you're assuming the user data is a weston_config, which won't be true for non-weston compositors. Sorry, but NAK from me. Giulio > + struct weston_config_section *section; > + char *s; > + int scale; > + enum weston_drm_backend_output_mode mode = > + WESTON_DRM_BACKEND_OUTPUT_PREFERRED; > + > + section = weston_config_get_section(wc, "output", "name", name); > + weston_config_section_get_string(section, "mode", &s, "preferred"); > + if (strcmp(s, "off") == 0) { > + free(s); > + return WESTON_DRM_BACKEND_OUTPUT_OFF; > + } > + > + if (use_current_mode || strcmp(s, "current") == 0) { > + mode = WESTON_DRM_BACKEND_OUTPUT_CURRENT; > + } else if (strcmp(s, "preferred") != 0) { > + config->modeline = s; > + s = NULL; > + } > + free(s); > + > + weston_config_section_get_int(section, "scale", &scale, 1); > + config->base.scale = scale >= 1 ? scale : 1; > + weston_config_section_get_string(section, "transform", &s, "normal"); > + if (weston_parse_transform(s, &config->base.transform) < 0) > + weston_log("Invalid transform \"%s\" for output %s\n", > + s, name); > + free(s); > + > + weston_config_section_get_string(section, > + "gbm-format", &config->gbm_format, > NULL); > + weston_config_section_get_string(section, "seat", &config->seat, ""); > + return mode; > +} > + > + > /** > * Create and configure a Weston output structure > * > @@ -2321,8 +2389,8 @@ create_output_for_connector(struct drm_backend *b, > output->base.serial_number = "unknown"; > wl_list_init(&output->base.mode_list); > > - mode = b->configure_output(b->compositor, b->use_current_mode, > - output->base.name, &config); > + mode = drm_configure_output(b->compositor, b->use_current_mode, > + output->base.name, &config); > if (parse_gbm_format(config.gbm_format, b->gbm_format, > &output->gbm_format) == -1) > output->gbm_format = b->gbm_format; > > @@ -3059,7 +3127,6 @@ drm_backend_create(struct weston_compositor *compositor, > b->sprites_are_broken = 1; > b->compositor = compositor; > b->use_pixman = config->use_pixman; > - b->configure_output = config->configure_output; > b->use_current_mode = config->use_current_mode; > > if (parse_gbm_format(config->gbm_format, GBM_FORMAT_XRGB8888, > &b->gbm_format) < 0) > diff --git a/src/compositor-drm.h b/src/compositor-drm.h > index 3b2dc17..e57b742 100644 > --- a/src/compositor-drm.h > +++ b/src/compositor-drm.h > @@ -36,37 +36,6 @@ extern "C" { > > #define WESTON_DRM_BACKEND_CONFIG_VERSION 1 > > -enum weston_drm_backend_output_mode { > - /** The output is disabled */ > - WESTON_DRM_BACKEND_OUTPUT_OFF, > - /** The output will use the current active mode */ > - WESTON_DRM_BACKEND_OUTPUT_CURRENT, > - /** The output will use the preferred mode. A modeline can be provided > - * by setting weston_backend_output_config::modeline in the form of > - * "WIDTHxHEIGHT" or in the form of an explicit modeline calculated > - * using e.g. the cvt tool. If a valid modeline is supplied it will be > - * used, if invalid or NULL the preferred available mode will be > used. */ > - WESTON_DRM_BACKEND_OUTPUT_PREFERRED, > -}; > - > -struct weston_drm_backend_output_config { > - struct weston_backend_output_config base; > - > - /** The pixel format to be used by the output. Valid values are: > - * - NULL - The format set at backend creation time will be used; > - * - "xrgb8888"; > - * - "rgb565" > - * - "xrgb2101010" > - */ > - char *gbm_format; > - /** The seat to be used by the output. Set to NULL to use the > - * default seat. */ > - char *seat; > - /** The modeline to be used by the output. Refer to the documentation > - * of WESTON_DRM_BACKEND_OUTPUT_PREFERRED for details. */ > - char *modeline; > -}; > - > /** The backend configuration struct. > * > * weston_drm_backend_config contains the configuration used by a DRM > @@ -107,16 +76,6 @@ struct weston_drm_backend_config { > */ > char *gbm_format; > > - /** Callback used to configure the outputs. > - * > - * This function will be called by the backend when a new DRM > - * output needs to be configured. > - */ > - enum weston_drm_backend_output_mode > - (*configure_output)(struct weston_compositor *compositor, > - bool use_current_mode, > - const char *name, > - struct weston_drm_backend_output_config > *output_config); > bool use_current_mode; > }; > > diff --git a/src/main.c b/src/main.c > index 21b7f5c..dcd5ee6 100644 > --- a/src/main.c > +++ b/src/main.c > @@ -674,48 +674,6 @@ load_backend_new(struct weston_compositor *compositor, > const char *backend, > return backend_init(compositor, NULL, NULL, NULL, config_base); > } > > -static enum weston_drm_backend_output_mode > -drm_configure_output(struct weston_compositor *c, > - bool use_current_mode, > - const char *name, > - struct weston_drm_backend_output_config *config) > -{ > - struct weston_config *wc = weston_compositor_get_user_data(c); > - struct weston_config_section *section; > - char *s; > - int scale; > - enum weston_drm_backend_output_mode mode = > - WESTON_DRM_BACKEND_OUTPUT_PREFERRED; > - > - section = weston_config_get_section(wc, "output", "name", name); > - weston_config_section_get_string(section, "mode", &s, "preferred"); > - if (strcmp(s, "off") == 0) { > - free(s); > - return WESTON_DRM_BACKEND_OUTPUT_OFF; > - } > - > - if (use_current_mode || strcmp(s, "current") == 0) { > - mode = WESTON_DRM_BACKEND_OUTPUT_CURRENT; > - } else if (strcmp(s, "preferred") != 0) { > - config->modeline = s; > - s = NULL; > - } > - free(s); > - > - weston_config_section_get_int(section, "scale", &scale, 1); > - config->base.scale = scale >= 1 ? scale : 1; > - weston_config_section_get_string(section, "transform", &s, "normal"); > - if (weston_parse_transform(s, &config->base.transform) < 0) > - weston_log("Invalid transform \"%s\" for output %s\n", > - s, name); > - free(s); > - > - weston_config_section_get_string(section, > - "gbm-format", &config->gbm_format, > NULL); > - weston_config_section_get_string(section, "seat", &config->seat, ""); > - return mode; > -} > - > static int > load_drm_backend(struct weston_compositor *c, const char *backend, > int *argc, char **argv, struct weston_config *wc) > @@ -745,7 +703,6 @@ load_drm_backend(struct weston_compositor *c, const char > *backend, > > config->base.struct_version = WESTON_DRM_BACKEND_CONFIG_VERSION; > config->base.struct_size = sizeof(struct weston_drm_backend_config); > - config->configure_output = drm_configure_output; > > ret = load_backend_new(c, backend, > (struct weston_backend_config *)config); > -- > 1.9.1 > > _______________________________________________ > wayland-devel mailing list > [email protected] > https://lists.freedesktop.org/mailman/listinfo/wayland-devel _______________________________________________ wayland-devel mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/wayland-devel
