libweston: move headless_backend::renderer_type to weston_renderer::type

Move the renderer type from struct headless_backend into struct
weston_renderer to store the chosen renderer type in a unified manner.
This will later allow secondary backends to determine the renderer type
chosen by the primary backend.

Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
This commit is contained in:
Philipp Zabel 2022-11-30 10:34:52 +01:00 committed by Daniel Stone
parent a8e93ed90f
commit 51c8882991
5 changed files with 21 additions and 32 deletions

View File

@ -49,18 +49,11 @@
#include "presentation-time-server-protocol.h"
#include <libweston/windowed-output-api.h>
enum headless_renderer_type {
HEADLESS_NOOP,
HEADLESS_PIXMAN,
HEADLESS_GL,
};
struct headless_backend {
struct weston_backend base;
struct weston_compositor *compositor;
struct weston_seat fake_seat;
enum headless_renderer_type renderer_type;
struct gl_renderer_interface *glri;
bool decorate;
@ -285,14 +278,14 @@ headless_output_disable(struct weston_output *base)
wl_event_source_remove(output->finish_frame_timer);
switch (b->renderer_type) {
case HEADLESS_GL:
switch (b->compositor->renderer->type) {
case WESTON_RENDERER_GL:
headless_output_disable_gl(output);
break;
case HEADLESS_PIXMAN:
case WESTON_RENDERER_PIXMAN:
headless_output_disable_pixman(output);
break;
case HEADLESS_NOOP:
case WESTON_RENDERER_NOOP:
break;
}
@ -418,14 +411,14 @@ headless_output_enable(struct weston_output *base)
return -1;
}
switch (b->renderer_type) {
case HEADLESS_GL:
switch (b->compositor->renderer->type) {
case WESTON_RENDERER_GL:
ret = headless_output_enable_gl(output);
break;
case HEADLESS_PIXMAN:
case WESTON_RENDERER_PIXMAN:
ret = headless_output_enable_pixman(output);
break;
case HEADLESS_NOOP:
case WESTON_RENDERER_NOOP:
break;
}
@ -633,26 +626,11 @@ headless_backend_create(struct weston_compositor *compositor,
}
if (config->use_gl)
b->renderer_type = HEADLESS_GL;
else if (config->use_pixman)
b->renderer_type = HEADLESS_PIXMAN;
else
b->renderer_type = HEADLESS_NOOP;
switch (b->renderer_type) {
case HEADLESS_GL:
ret = headless_gl_renderer_init(b);
break;
case HEADLESS_PIXMAN:
else if (config->use_pixman)
ret = pixman_renderer_init(compositor);
break;
case HEADLESS_NOOP:
else
ret = noop_renderer_init(compositor);
break;
default:
assert(0 && "invalid renderer type");
ret = -1;
}
if (ret < 0)
goto err_input;

View File

@ -46,6 +46,12 @@
/* compositor <-> renderer interface */
enum weston_renderer_type {
WESTON_RENDERER_NOOP,
WESTON_RENDERER_PIXMAN,
WESTON_RENDERER_GL,
};
struct weston_renderer {
int (*read_pixels)(struct weston_output *output,
const struct pixel_format_info *format, void *pixels,
@ -82,6 +88,8 @@ struct weston_renderer {
bool (*fill_buffer_info)(struct weston_compositor *ec,
struct weston_buffer *buffer);
enum weston_renderer_type type;
};
void

View File

@ -137,6 +137,7 @@ noop_renderer_init(struct weston_compositor *ec)
renderer->base.flush_damage = noop_renderer_flush_damage;
renderer->base.attach = noop_renderer_attach;
renderer->base.destroy = noop_renderer_destroy;
renderer->base.type = WESTON_RENDERER_NOOP;
ec->renderer = &renderer->base;
return 0;

View File

@ -1006,6 +1006,7 @@ pixman_renderer_init(struct weston_compositor *ec)
renderer->base.destroy = pixman_renderer_destroy;
renderer->base.surface_copy_content =
pixman_renderer_surface_copy_content;
renderer->base.type = WESTON_RENDERER_PIXMAN;
ec->renderer = &renderer->base;
ec->capabilities |= WESTON_CAP_ROTATION_ANY;
ec->capabilities |= WESTON_CAP_VIEW_CLIP_MASK;

View File

@ -3805,6 +3805,7 @@ gl_renderer_display_create(struct weston_compositor *ec,
gr->base.destroy = gl_renderer_destroy;
gr->base.surface_copy_content = gl_renderer_surface_copy_content;
gr->base.fill_buffer_info = gl_renderer_fill_buffer_info;
gr->base.type = WESTON_RENDERER_GL;
if (gl_renderer_setup_egl_display(gr, options->egl_native_display) < 0)
goto fail;