uint32_t format = output->gbm_format;
uint32_t pixman_format;
unsigned int i;
- uint32_t flags = 0;
+ const struct pixman_renderer_output_options options = {
+ .use_shadow = b->use_pixman_shadow,
+ };
switch (format) {
case DRM_FORMAT_XRGB8888:
goto err;
}
- if (b->use_pixman_shadow)
- flags |= PIXMAN_RENDERER_OUTPUT_USE_SHADOW;
-
- if (pixman_renderer_output_create(&output->base, flags) < 0)
+ if (pixman_renderer_output_create(&output->base, &options) < 0)
goto err;
weston_log("DRM: output %s %s shadow framebuffer.\n", output->base.name,
struct fbdev_head *head;
int fb_fd;
struct wl_event_loop *loop;
+ const struct pixman_renderer_output_options options = {
+ .use_shadow = true,
+ };
head = fbdev_output_get_head(output);
output->base.start_repaint_loop = fbdev_output_start_repaint_loop;
output->base.repaint = fbdev_output_repaint;
- if (pixman_renderer_output_create(&output->base,
- PIXMAN_RENDERER_OUTPUT_USE_SHADOW) < 0)
+ if (pixman_renderer_output_create(&output->base, &options) < 0)
goto out_hw_surface;
loop = wl_display_get_event_loop(backend->compositor->wl_display);
static int
headless_output_enable_pixman(struct headless_output *output)
{
+ const struct pixman_renderer_output_options options = {
+ .use_shadow = true,
+ };
+
output->image_buf = malloc(output->base.current_mode->width *
output->base.current_mode->height * 4);
if (!output->image_buf)
output->image_buf,
output->base.current_mode->width * 4);
- if (pixman_renderer_output_create(&output->base,
- PIXMAN_RENDERER_OUTPUT_USE_SHADOW) < 0)
+ if (pixman_renderer_output_create(&output->base, &options) < 0)
goto err_renderer;
pixman_renderer_output_set_buffer(&output->base, output->image);
rdpSettings *settings;
pixman_image_t *new_shadow_buffer;
struct weston_mode *local_mode;
+ const struct pixman_renderer_output_options options = { };
local_mode = ensure_matching_mode(output, target_mode);
if (!local_mode) {
output->current_mode->flags |= WL_OUTPUT_MODE_CURRENT;
pixman_renderer_output_destroy(output);
- pixman_renderer_output_create(output, 0);
+ pixman_renderer_output_create(output, &options);
new_shadow_buffer = pixman_image_create_bits(PIXMAN_x8r8g8b8, target_mode->width,
target_mode->height, 0, target_mode->width * 4);
struct rdp_output *output = to_rdp_output(base);
struct rdp_backend *b = to_rdp_backend(base->compositor);
struct wl_event_loop *loop;
+ const struct pixman_renderer_output_options options = {
+ .use_shadow = true,
+ };
output->shadow_surface = pixman_image_create_bits(PIXMAN_x8r8g8b8,
output->base.current_mode->width,
return -1;
}
- if (pixman_renderer_output_create(&output->base,
- PIXMAN_RENDERER_OUTPUT_USE_SHADOW) < 0) {
+ if (pixman_renderer_output_create(&output->base, &options) < 0) {
pixman_image_unref(output->shadow_surface);
return -1;
}
static int
wayland_output_init_pixman_renderer(struct wayland_output *output)
{
- return pixman_renderer_output_create(&output->base,
- PIXMAN_RENDERER_OUTPUT_USE_SHADOW);
+ const struct pixman_renderer_output_options options = {
+ .use_shadow = true,
+ };
+ return pixman_renderer_output_create(&output->base, &options);
}
static void
output->mode.height = mode->height;
if (b->use_pixman) {
+ const struct pixman_renderer_output_options options = {
+ .use_shadow = true,
+ };
pixman_renderer_output_destroy(&output->base);
x11_output_deinit_shm(b, output);
return -1;
}
- if (pixman_renderer_output_create(&output->base,
- PIXMAN_RENDERER_OUTPUT_USE_SHADOW) < 0) {
+ if (pixman_renderer_output_create(&output->base, &options) < 0) {
weston_log("Failed to create pixman renderer for output\n");
x11_output_deinit_shm(b, output);
return -1;
x11_output_wait_for_map(b, output);
if (b->use_pixman) {
+ const struct pixman_renderer_output_options options = {
+ .use_shadow = true,
+ };
if (x11_output_init_shm(b, output,
output->base.current_mode->width,
output->base.current_mode->height) < 0) {
weston_log("Failed to initialize SHM for the X11 output\n");
goto err;
}
- if (pixman_renderer_output_create(&output->base,
- PIXMAN_RENDERER_OUTPUT_USE_SHADOW) < 0) {
+ if (pixman_renderer_output_create(&output->base, &options) < 0) {
weston_log("Failed to create pixman renderer for output\n");
x11_output_deinit_shm(b, output);
goto err;
}
WL_EXPORT int
-pixman_renderer_output_create(struct weston_output *output, uint32_t flags)
+pixman_renderer_output_create(struct weston_output *output,
+ const struct pixman_renderer_output_options *options)
{
struct pixman_output_state *po;
int w, h;
if (po == NULL)
return -1;
- if (flags & PIXMAN_RENDERER_OUTPUT_USE_SHADOW) {
+ if (options->use_shadow) {
/* set shadow image transformation */
w = output->current_mode->width;
h = output->current_mode->height;
int
pixman_renderer_init(struct weston_compositor *ec);
-enum pixman_renderer_output_flags {
- PIXMAN_RENDERER_OUTPUT_USE_SHADOW = (1 << 0),
+struct pixman_renderer_output_options {
+ /** Composite into a shadow buffer, copying to the hardware buffer */
+ bool use_shadow;
};
int
-pixman_renderer_output_create(struct weston_output *output, uint32_t flags);
+pixman_renderer_output_create(struct weston_output *output,
+ const struct pixman_renderer_output_options *options);
void
pixman_renderer_output_set_buffer(struct weston_output *output,