This makes the code more uniform with the functions taking a weston_output* as argument, and reduces the churn of the following commits.
Signed-off-by: Emmanuel Gil Peyrot <emmanuel.pey...@collabora.com> --- src/compositor-drm.c | 130 ++++++++++++++++++++++++++------------------------- 1 file changed, 67 insertions(+), 63 deletions(-) diff --git a/src/compositor-drm.c b/src/compositor-drm.c index f9a997b..5938d53 100644 --- a/src/compositor-drm.c +++ b/src/compositor-drm.c @@ -474,19 +474,20 @@ static struct weston_plane * drm_output_prepare_scanout_view(struct drm_output *output, struct weston_view *ev) { + struct weston_output *output_base = &output->base; struct drm_backend *b = - (struct drm_backend *)output->base.compositor->backend; + (struct drm_backend *)output_base->compositor->backend; struct weston_buffer *buffer = ev->surface->buffer_ref.buffer; struct weston_buffer_viewport *viewport = &ev->surface->buffer_viewport; struct gbm_bo *bo; uint32_t format; - if (ev->geometry.x != output->base.x || - ev->geometry.y != output->base.y || + if (ev->geometry.x != output_base->x || + ev->geometry.y != output_base->y || buffer == NULL || b->gbm == NULL || - buffer->width != output->base.current_mode->width || - buffer->height != output->base.current_mode->height || - output->base.transform != viewport->buffer.transform || + buffer->width != output_base->current_mode->width || + buffer->height != output_base->current_mode->height || + output_base->transform != viewport->buffer.transform || ev->transform.enabled) return NULL; @@ -589,7 +590,7 @@ drm_output_set_gamma(struct weston_output *output_base, int rc; struct drm_output *output = (struct drm_output *) output_base; struct drm_backend *backend = - (struct drm_backend *) output->base.compositor->backend; + (struct drm_backend *) output_base->compositor->backend; /* check */ if (output_base->gamma_size != size) @@ -635,7 +636,7 @@ drm_output_repaint(struct weston_output *output_base, { struct drm_output *output = (struct drm_output *) output_base; struct drm_backend *backend = - (struct drm_backend *)output->base.compositor->backend; + (struct drm_backend *)output_base->compositor->backend; struct drm_sprite *s; struct drm_mode *mode; int ret = 0; @@ -648,7 +649,7 @@ drm_output_repaint(struct weston_output *output_base, if (!output->next) return -1; - mode = container_of(output->base.current_mode, struct drm_mode, base); + mode = container_of(output_base->current_mode, struct drm_mode, base); if (!output->current || output->current->stride != output->next->stride) { ret = drmModeSetCrtc(backend->drm.fd, output->crtc_id, @@ -772,7 +773,7 @@ drm_output_start_repaint_loop(struct weston_output *output_base) &tnow); timespec_sub(&vbl2now, &tnow, &ts); refresh_nsec = - millihz_to_nsec(output->base.current_mode->refresh); + millihz_to_nsec(output_base->current_mode->refresh); if (timespec_to_nsec(&vbl2now) < refresh_nsec) { drm_output_update_msc(output, vbl.reply.sequence); weston_output_finish_frame(output_base, &ts, @@ -916,7 +917,8 @@ static struct weston_plane * drm_output_prepare_overlay_view(struct drm_output *output, struct weston_view *ev) { - struct weston_compositor *ec = output->base.compositor; + struct weston_output *output_base = &output->base; + struct weston_compositor *ec = output_base->compositor; struct drm_backend *b = (struct drm_backend *)ec->backend; struct weston_buffer_viewport *viewport = &ev->surface->buffer_viewport; struct wl_resource *buffer_resource; @@ -932,16 +934,16 @@ drm_output_prepare_overlay_view(struct drm_output *output, if (b->gbm == NULL) return NULL; - if (viewport->buffer.transform != output->base.transform) + if (viewport->buffer.transform != output_base->transform) return NULL; - if (viewport->buffer.scale != output->base.current_scale) + if (viewport->buffer.scale != output_base->current_scale) return NULL; if (b->sprites_are_broken) return NULL; - if (ev->output_mask != (1u << output->base.id)) + if (ev->output_mask != (1u << output_base->id)) return NULL; if (ev->surface->buffer_ref.buffer == NULL) @@ -1028,13 +1030,13 @@ drm_output_prepare_overlay_view(struct drm_output *output, */ pixman_region32_init(&dest_rect); pixman_region32_intersect(&dest_rect, &ev->transform.boundingbox, - &output->base.region); - pixman_region32_translate(&dest_rect, -output->base.x, -output->base.y); + &output_base->region); + pixman_region32_translate(&dest_rect, -output_base->x, -output_base->y); box = pixman_region32_extents(&dest_rect); - tbox = weston_transformed_rect(output->base.width, - output->base.height, - output->base.transform, - output->base.current_scale, + tbox = weston_transformed_rect(output_base->width, + output_base->height, + output_base->transform, + output_base->current_scale, *box); s->dest_x = tbox.x1; s->dest_y = tbox.y1; @@ -1044,7 +1046,7 @@ drm_output_prepare_overlay_view(struct drm_output *output, pixman_region32_init(&src_rect); pixman_region32_intersect(&src_rect, &ev->transform.boundingbox, - &output->base.region); + &output_base->region); box = pixman_region32_extents(&src_rect); weston_view_from_global_fixed(ev, @@ -1312,7 +1314,7 @@ drm_output_destroy(struct weston_output *output_base) { struct drm_output *output = (struct drm_output *) output_base; struct drm_backend *b = - (struct drm_backend *)output->base.compositor->backend; + (struct drm_backend *)output_base->compositor->backend; drmModeCrtcPtr origcrtc = output->original_crtc; if (output->page_flip_pending) { @@ -1420,13 +1422,13 @@ drm_output_switch_mode(struct weston_output *output_base, struct weston_mode *mo return -1; } - if (&drm_mode->base == output->base.current_mode) + if (&drm_mode->base == output_base->current_mode) return 0; - output->base.current_mode->flags = 0; + output_base->current_mode->flags = 0; - output->base.current_mode = &drm_mode->base; - output->base.current_mode->flags = + output_base->current_mode = &drm_mode->base; + output_base->current_mode->flags = WL_OUTPUT_MODE_CURRENT | WL_OUTPUT_MODE_PREFERRED; /* reset rendering stuff. */ @@ -1754,7 +1756,7 @@ drm_set_dpms(struct weston_output *output_base, enum dpms_enum level) output->dpms_prop->prop_id, level); if (ret) { weston_log("DRM: DPMS: failed property set for %s\n", - output->base.name); + output_base->name); return; } @@ -2302,11 +2304,12 @@ create_output_for_connector(struct drm_backend *b, { struct drm_output *output; struct drm_mode *drm_mode, *next, *current; + struct weston_output *output_base; struct weston_mode *m; struct weston_config_section *section; drmModeModeInfo crtc_mode, modeline; int i, width, height, scale; - char *s; + char *s, *name; enum output_config config; uint32_t transform; @@ -2316,19 +2319,22 @@ create_output_for_connector(struct drm_backend *b, return -1; } + name = make_connector_name(connector); + output = zalloc(sizeof *output); if (output == NULL) return -1; - output->base.subpixel = drm_subpixel_to_wayland(connector->subpixel); - output->base.name = make_connector_name(connector); - output->base.make = "unknown"; - output->base.model = "unknown"; - output->base.serial_number = "unknown"; - wl_list_init(&output->base.mode_list); + output_base = &output->base; + output_base->subpixel = drm_subpixel_to_wayland(connector->subpixel); + output_base->name = name; + output_base->make = "unknown"; + output_base->model = "unknown"; + output_base->serial_number = "unknown"; + wl_list_init(&output_base->mode_list); section = weston_config_get_section(b->compositor->config, "output", "name", - output->base.name); + name); weston_config_section_get_string(section, "mode", &s, "preferred"); if (strcmp(s, "off") == 0) config = OUTPUT_CONFIG_OFF; @@ -2341,8 +2347,7 @@ create_output_for_connector(struct drm_backend *b, else if (parse_modeline(s, &modeline) == 0) config = OUTPUT_CONFIG_MODELINE; else { - weston_log("Invalid mode \"%s\" for output %s\n", - s, output->base.name); + weston_log("Invalid mode \"%s\" for output %s\n", s, name); config = OUTPUT_CONFIG_PREFERRED; } free(s); @@ -2350,8 +2355,7 @@ create_output_for_connector(struct drm_backend *b, weston_config_section_get_int(section, "scale", &scale, 1); weston_config_section_get_string(section, "transform", &s, "normal"); if (weston_parse_transform(s, &transform) < 0) - weston_log("Invalid transform \"%s\" for output %s\n", - s, output->base.name); + weston_log("Invalid transform \"%s\" for output %s\n", s, name); free(s); @@ -2361,7 +2365,7 @@ create_output_for_connector(struct drm_backend *b, output->gbm_format = b->gbm_format; weston_config_section_get_string(section, "seat", &s, ""); - setup_output_seat_constraint(b, &output->base, s); + setup_output_seat_constraint(b, output_base, s); free(s); output->crtc_id = resources->crtcs[i]; @@ -2383,7 +2387,7 @@ create_output_for_connector(struct drm_backend *b, } if (config == OUTPUT_CONFIG_OFF) { - weston_log("Disabling output %s\n", output->base.name); + weston_log("Disabling output %s\n", name); drmModeSetCrtc(b->drm.fd, output->crtc_id, 0, 0, 0, 0, 0, NULL); goto err_free; @@ -2394,10 +2398,10 @@ create_output_for_connector(struct drm_backend *b, &crtc_mode, &modeline); if (!current) goto err_free; - output->base.current_mode = ¤t->base; - output->base.current_mode->flags |= WL_OUTPUT_MODE_CURRENT; + output_base->current_mode = ¤t->base; + output_base->current_mode->flags |= WL_OUTPUT_MODE_CURRENT; - weston_output_init(&output->base, b->compositor, x, y, + weston_output_init(output_base, b->compositor, x, y, connector->mmWidth, connector->mmHeight, transform, scale); @@ -2416,27 +2420,27 @@ create_output_for_connector(struct drm_backend *b, if (output->backlight) { weston_log("Initialized backlight, device %s\n", output->backlight->path); - output->base.set_backlight = drm_set_backlight; - output->base.backlight_current = drm_get_backlight(output); + output_base->set_backlight = drm_set_backlight; + output_base->backlight_current = drm_get_backlight(output); } else { weston_log("Failed to initialize backlight\n"); } - weston_compositor_add_output(b->compositor, &output->base); + weston_compositor_add_output(b->compositor, output_base); find_and_parse_output_edid(b, output, connector); if (connector->connector_type == DRM_MODE_CONNECTOR_LVDS) - output->base.connection_internal = 1; + output_base->connection_internal = 1; - output->base.start_repaint_loop = drm_output_start_repaint_loop; - output->base.repaint = drm_output_repaint; - output->base.destroy = drm_output_destroy; - output->base.assign_planes = drm_assign_planes; - output->base.set_dpms = drm_set_dpms; - output->base.switch_mode = drm_output_switch_mode; + output_base->start_repaint_loop = drm_output_start_repaint_loop; + output_base->repaint = drm_output_repaint; + output_base->destroy = drm_output_destroy; + output_base->assign_planes = drm_assign_planes; + output_base->set_dpms = drm_set_dpms; + output_base->switch_mode = drm_output_switch_mode; - output->base.gamma_size = output->original_crtc->gamma_size; - output->base.set_gamma = drm_output_set_gamma; + output_base->gamma_size = output->original_crtc->gamma_size; + output_base->set_gamma = drm_output_set_gamma; weston_plane_init(&output->cursor_plane, b->compositor, INT32_MIN, INT32_MIN); @@ -2446,9 +2450,9 @@ create_output_for_connector(struct drm_backend *b, weston_compositor_stack_plane(b->compositor, &output->fb_plane, &b->compositor->primary_plane); - weston_log("Output %s, (connector %d, crtc %d)\n", - output->base.name, output->connector_id, output->crtc_id); - wl_list_for_each(m, &output->base.mode_list, link) + weston_log("Output %s, (connector %d, crtc %d)\n", name, + output->connector_id, output->crtc_id); + wl_list_for_each(m, &output_base->mode_list, link) weston_log_continue(STAMP_SPACE "mode %dx%d@%.1f%s%s%s\n", m->width, m->height, m->refresh / 1000.0, m->flags & WL_OUTPUT_MODE_PREFERRED ? @@ -2459,15 +2463,15 @@ create_output_for_connector(struct drm_backend *b, ", built-in" : ""); /* Set native_ fields, so weston_output_mode_switch_to_native() works */ - output->base.native_mode = output->base.current_mode; - output->base.native_scale = output->base.current_scale; + output_base->native_mode = output_base->current_mode; + output_base->native_scale = output_base->current_scale; return 0; err_output: - weston_output_destroy(&output->base); + weston_output_destroy(output_base); err_free: - wl_list_for_each_safe(drm_mode, next, &output->base.mode_list, + wl_list_for_each_safe(drm_mode, next, &output_base->mode_list, base.link) { wl_list_remove(&drm_mode->base.link); free(drm_mode); -- 2.8.2 _______________________________________________ wayland-devel mailing list wayland-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/wayland-devel