pixman-renderer: set renderbuffer via new repaint_output parameter
Add a struct weston_renderbuffer parameter to repaint_output and make backends set the pixman image renderbuffer through this parameter instead of using pixman_renderer_output_set_buffer() Turn pixman_renderer_output_set_buffer() static. Signed-off-by: Philipp Zabel <philipp.zabel@gmail.com>
This commit is contained in:
parent
89e1831cd7
commit
6757bae0f3
|
@ -296,7 +296,7 @@ drm_output_render_gl(struct drm_output_state *state, pixman_region32_t *damage)
|
||||||
struct drm_fb *ret;
|
struct drm_fb *ret;
|
||||||
|
|
||||||
output->base.compositor->renderer->repaint_output(&output->base,
|
output->base.compositor->renderer->repaint_output(&output->base,
|
||||||
damage);
|
damage, NULL);
|
||||||
|
|
||||||
bo = gbm_surface_lock_front_buffer(output->gbm_surface);
|
bo = gbm_surface_lock_front_buffer(output->gbm_surface);
|
||||||
if (!bo) {
|
if (!bo) {
|
||||||
|
|
|
@ -343,12 +343,11 @@ drm_output_render_pixman(struct drm_output_state *state,
|
||||||
|
|
||||||
output->current_image ^= 1;
|
output->current_image ^= 1;
|
||||||
|
|
||||||
pixman_renderer_output_set_buffer(&output->base,
|
|
||||||
output->renderbuffer[output->current_image]->image);
|
|
||||||
pixman_renderer_output_set_hw_extra_damage(&output->base,
|
pixman_renderer_output_set_hw_extra_damage(&output->base,
|
||||||
&output->previous_damage);
|
&output->previous_damage);
|
||||||
|
|
||||||
ec->renderer->repaint_output(&output->base, damage);
|
ec->renderer->repaint_output(&output->base, damage,
|
||||||
|
output->renderbuffer[output->current_image]);
|
||||||
|
|
||||||
pixman_region32_copy(&output->previous_damage, damage);
|
pixman_region32_copy(&output->previous_damage, damage);
|
||||||
|
|
||||||
|
|
|
@ -47,6 +47,7 @@
|
||||||
#include "shared/weston-egl-ext.h"
|
#include "shared/weston-egl-ext.h"
|
||||||
#include "shared/cairo-util.h"
|
#include "shared/cairo-util.h"
|
||||||
#include "linux-dmabuf.h"
|
#include "linux-dmabuf.h"
|
||||||
|
#include "output-capture.h"
|
||||||
#include "presentation-time-server-protocol.h"
|
#include "presentation-time-server-protocol.h"
|
||||||
#include <libweston/windowed-output-api.h>
|
#include <libweston/windowed-output-api.h>
|
||||||
|
|
||||||
|
@ -159,7 +160,8 @@ headless_output_repaint(struct weston_output *output_base,
|
||||||
|
|
||||||
headless_output_update_gl_border(output);
|
headless_output_update_gl_border(output);
|
||||||
|
|
||||||
ec->renderer->repaint_output(&output->base, damage);
|
ec->renderer->repaint_output(&output->base, damage,
|
||||||
|
output->renderbuffer);
|
||||||
|
|
||||||
pixman_region32_subtract(&ec->primary_plane.damage,
|
pixman_region32_subtract(&ec->primary_plane.damage,
|
||||||
&ec->primary_plane.damage, damage);
|
&ec->primary_plane.damage, damage);
|
||||||
|
@ -315,8 +317,11 @@ headless_output_enable_pixman(struct headless_output *output)
|
||||||
if (pixman->output_create(&output->base, &options) < 0)
|
if (pixman->output_create(&output->base, &options) < 0)
|
||||||
goto err_renderer;
|
goto err_renderer;
|
||||||
|
|
||||||
pixman_renderer_output_set_buffer(&output->base,
|
weston_output_update_capture_info(&output->base,
|
||||||
output->renderbuffer->image);
|
WESTON_OUTPUT_CAPTURE_SOURCE_FRAMEBUFFER,
|
||||||
|
output->base.current_mode->width,
|
||||||
|
output->base.current_mode->height,
|
||||||
|
pfmt);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
|
|
@ -295,9 +295,8 @@ rdp_output_repaint(struct weston_output *output_base, pixman_region32_t *damage)
|
||||||
|
|
||||||
assert(output);
|
assert(output);
|
||||||
|
|
||||||
pixman_renderer_output_set_buffer(output_base,
|
ec->renderer->repaint_output(&output->base, damage,
|
||||||
output->renderbuffer->image);
|
output->renderbuffer);
|
||||||
ec->renderer->repaint_output(&output->base, damage);
|
|
||||||
|
|
||||||
if (pixman_region32_not_empty(damage)) {
|
if (pixman_region32_not_empty(damage)) {
|
||||||
pixman_region32_t transformed_damage;
|
pixman_region32_t transformed_damage;
|
||||||
|
|
|
@ -527,10 +527,8 @@ vnc_update_buffer(struct nvnc_display *display, struct pixman_region32 *damage)
|
||||||
wl_list_insert(&output->fb_side_data_list, &fb_side_data->link);
|
wl_list_insert(&output->fb_side_data_list, &fb_side_data->link);
|
||||||
}
|
}
|
||||||
|
|
||||||
pixman_renderer_output_set_buffer(&output->base,
|
ec->renderer->repaint_output(&output->base, &fb_side_data->damage,
|
||||||
fb_side_data->renderbuffer->image);
|
fb_side_data->renderbuffer);
|
||||||
|
|
||||||
ec->renderer->repaint_output(&output->base, &fb_side_data->damage);
|
|
||||||
|
|
||||||
/* Convert to local coordinates before clearing accumulated damage */
|
/* Convert to local coordinates before clearing accumulated damage */
|
||||||
pixman_region_init(&local_damage);
|
pixman_region_init(&local_damage);
|
||||||
|
|
|
@ -515,7 +515,7 @@ wayland_output_repaint_gl(struct weston_output *output_base,
|
||||||
|
|
||||||
wayland_output_update_gl_border(output);
|
wayland_output_update_gl_border(output);
|
||||||
|
|
||||||
ec->renderer->repaint_output(&output->base, damage);
|
ec->renderer->repaint_output(&output->base, damage, NULL);
|
||||||
|
|
||||||
pixman_region32_subtract(&ec->primary_plane.damage,
|
pixman_region32_subtract(&ec->primary_plane.damage,
|
||||||
&ec->primary_plane.damage, damage);
|
&ec->primary_plane.damage, damage);
|
||||||
|
@ -630,8 +630,8 @@ wayland_output_repaint_pixman(struct weston_output *output_base,
|
||||||
sb = wayland_output_get_shm_buffer(output);
|
sb = wayland_output_get_shm_buffer(output);
|
||||||
|
|
||||||
wayland_output_update_shm_border(sb);
|
wayland_output_update_shm_border(sb);
|
||||||
pixman_renderer_output_set_buffer(output_base, sb->renderbuffer->image);
|
b->compositor->renderer->repaint_output(output_base, &sb->damage,
|
||||||
b->compositor->renderer->repaint_output(output_base, &sb->damage);
|
sb->renderbuffer);
|
||||||
|
|
||||||
wayland_shm_buffer_attach(sb);
|
wayland_shm_buffer_attach(sb);
|
||||||
|
|
||||||
|
|
|
@ -435,7 +435,7 @@ x11_output_repaint_gl(struct weston_output *output_base,
|
||||||
|
|
||||||
ec = output->base.compositor;
|
ec = output->base.compositor;
|
||||||
|
|
||||||
ec->renderer->repaint_output(output_base, damage);
|
ec->renderer->repaint_output(output_base, damage, NULL);
|
||||||
|
|
||||||
pixman_region32_subtract(&ec->primary_plane.damage,
|
pixman_region32_subtract(&ec->primary_plane.damage,
|
||||||
&ec->primary_plane.damage, damage);
|
&ec->primary_plane.damage, damage);
|
||||||
|
@ -512,8 +512,7 @@ x11_output_repaint_shm(struct weston_output *output_base,
|
||||||
ec = output->base.compositor;
|
ec = output->base.compositor;
|
||||||
b = output->backend;
|
b = output->backend;
|
||||||
|
|
||||||
pixman_renderer_output_set_buffer(output_base, image);
|
ec->renderer->repaint_output(output_base, damage, output->renderbuffer);
|
||||||
ec->renderer->repaint_output(output_base, damage);
|
|
||||||
|
|
||||||
pixman_region32_subtract(&ec->primary_plane.damage,
|
pixman_region32_subtract(&ec->primary_plane.damage,
|
||||||
&ec->primary_plane.damage, damage);
|
&ec->primary_plane.damage, damage);
|
||||||
|
|
|
@ -59,7 +59,8 @@ struct weston_renderer {
|
||||||
uint32_t x, uint32_t y,
|
uint32_t x, uint32_t y,
|
||||||
uint32_t width, uint32_t height);
|
uint32_t width, uint32_t height);
|
||||||
void (*repaint_output)(struct weston_output *output,
|
void (*repaint_output)(struct weston_output *output,
|
||||||
pixman_region32_t *output_damage);
|
pixman_region32_t *output_damage,
|
||||||
|
struct weston_renderbuffer *renderbuffer);
|
||||||
|
|
||||||
/** See weston_renderer_resize_output()
|
/** See weston_renderer_resize_output()
|
||||||
*
|
*
|
||||||
|
|
|
@ -47,7 +47,8 @@ noop_renderer_read_pixels(struct weston_output *output,
|
||||||
|
|
||||||
static void
|
static void
|
||||||
noop_renderer_repaint_output(struct weston_output *output,
|
noop_renderer_repaint_output(struct weston_output *output,
|
||||||
pixman_region32_t *output_damage)
|
pixman_region32_t *output_damage,
|
||||||
|
struct weston_renderbuffer *renderbuffer)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -617,13 +617,22 @@ pixman_renderer_do_capture_tasks(struct weston_output *output,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
pixman_renderer_output_set_buffer(struct weston_output *output,
|
||||||
|
pixman_image_t *buffer);
|
||||||
|
|
||||||
static void
|
static void
|
||||||
pixman_renderer_repaint_output(struct weston_output *output,
|
pixman_renderer_repaint_output(struct weston_output *output,
|
||||||
pixman_region32_t *output_damage)
|
pixman_region32_t *output_damage,
|
||||||
|
struct weston_renderbuffer *renderbuffer)
|
||||||
{
|
{
|
||||||
struct pixman_output_state *po = get_output_state(output);
|
struct pixman_output_state *po = get_output_state(output);
|
||||||
pixman_region32_t hw_damage;
|
pixman_region32_t hw_damage;
|
||||||
|
|
||||||
|
assert(renderbuffer);
|
||||||
|
|
||||||
|
pixman_renderer_output_set_buffer(output, renderbuffer->image);
|
||||||
|
|
||||||
assert(output->from_blend_to_output_by_backend ||
|
assert(output->from_blend_to_output_by_backend ||
|
||||||
output->color_outcome->from_blend_to_output == NULL);
|
output->color_outcome->from_blend_to_output == NULL);
|
||||||
|
|
||||||
|
@ -1018,7 +1027,7 @@ pixman_renderer_init(struct weston_compositor *ec)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
WL_EXPORT void
|
static void
|
||||||
pixman_renderer_output_set_buffer(struct weston_output *output,
|
pixman_renderer_output_set_buffer(struct weston_output *output,
|
||||||
pixman_image_t *buffer)
|
pixman_image_t *buffer)
|
||||||
{
|
{
|
||||||
|
|
|
@ -40,10 +40,6 @@ struct pixman_renderer_output_options {
|
||||||
struct weston_size fb_size;
|
struct weston_size fb_size;
|
||||||
};
|
};
|
||||||
|
|
||||||
void
|
|
||||||
pixman_renderer_output_set_buffer(struct weston_output *output,
|
|
||||||
pixman_image_t *buffer);
|
|
||||||
|
|
||||||
void
|
void
|
||||||
pixman_renderer_output_set_hw_extra_damage(struct weston_output *output,
|
pixman_renderer_output_set_hw_extra_damage(struct weston_output *output,
|
||||||
pixman_region32_t *extra_damage);
|
pixman_region32_t *extra_damage);
|
||||||
|
|
|
@ -1716,7 +1716,8 @@ blit_shadow_to_output(struct weston_output *output,
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
gl_renderer_repaint_output(struct weston_output *output,
|
gl_renderer_repaint_output(struct weston_output *output,
|
||||||
pixman_region32_t *output_damage)
|
pixman_region32_t *output_damage,
|
||||||
|
struct weston_renderbuffer *renderbuffer)
|
||||||
{
|
{
|
||||||
struct gl_output_state *go = get_output_state(output);
|
struct gl_output_state *go = get_output_state(output);
|
||||||
struct weston_compositor *compositor = output->compositor;
|
struct weston_compositor *compositor = output->compositor;
|
||||||
|
|
Loading…
Reference in New Issue