On Fri, 29 Jul 2016 13:26:24 +0200
Armin Krezović wrote:
> When all outputs are gone, there are no current read/write
> surfaces associated with a context. This makes the previously
> created dummy surface current until an output gets attached
> to avoid any potential crashes.
>
> Signed-off-by: Armin Krezović
Hi Armin,
this patch seems to have several unnecessary things, see below.
> ---
> libweston/gl-renderer.c | 27 +++
> 1 file changed, 27 insertions(+)
>
> diff --git a/libweston/gl-renderer.c b/libweston/gl-renderer.c
> index be6b11e..56eb344 100644
> --- a/libweston/gl-renderer.c
> +++ b/libweston/gl-renderer.c
> @@ -167,6 +167,7 @@ struct gl_surface_state {
>
> struct gl_renderer {
> struct weston_renderer base;
> + struct weston_compositor *compositor;
This member is not really necessary.
> int fragment_shader_debug;
> int fan_debug;
> struct weston_binding *fragment_binding;
> @@ -216,6 +217,9 @@ struct gl_renderer {
> struct gl_shader *current_shader;
>
> struct wl_signal destroy_signal;
> +
> + struct wl_signal output_destroy_signal;
output_destroy_signal seems unused. Does it have any purpose?
> + struct wl_listener output_destroy_listener;
> };
>
> static PFNEGLGETPLATFORMDISPLAYEXTPROC get_platform_display = NULL;
> @@ -2642,6 +2646,8 @@ gl_renderer_destroy(struct weston_compositor *ec)
> eglTerminate(gr->egl_display);
> eglReleaseThread();
>
> + wl_list_remove(>output_destroy_listener.link);
> +
> wl_array_release(>vertices);
> wl_array_release(>vtxcnt);
>
> @@ -2827,6 +2833,21 @@ platform_to_extension(EGLenum platform)
> }
> }
>
> +static void
> +output_handle_destroy(struct wl_listener *listener, void *data)
> +{
> + struct gl_renderer *gr;
> + struct weston_compositor *ec;
> +
> + gr = container_of(listener, struct gl_renderer,
> + output_destroy_listener);
> + ec = gr->compositor;
Rather than this, you could do:
struct weston_output *output = data;
ec = output->compositor;
> +
> + if (wl_list_empty(>output_list))
> + eglMakeCurrent(gr->egl_display, gr->dummy_surface,
> +gr->dummy_surface, gr->egl_context);
> +}
> +
> static int
> gl_renderer_create_pbuffer_surface(struct gl_renderer *gr) {
> EGLConfig pbuffer_config;
> @@ -2884,6 +2905,7 @@ gl_renderer_create(struct weston_compositor *ec,
> EGLenum platform,
> if (gr == NULL)
> return -1;
>
> + gr->compositor = ec;
This would be unneeded.
> gr->base.read_pixels = gl_renderer_read_pixels;
> gr->base.repaint_output = gl_renderer_repaint_output;
> gr->base.flush_damage = gl_renderer_flush_damage;
> @@ -2962,6 +2984,7 @@ gl_renderer_create(struct weston_compositor *ec,
> EGLenum platform,
> wl_display_add_shm_format(ec->wl_display, WL_SHM_FORMAT_RGB565);
>
> wl_signal_init(>destroy_signal);
> + wl_signal_init(>output_destroy_signal);
This is unused.
>
> if (gl_renderer_setup(ec, gr->dummy_surface) < 0) {
> if (gr->dummy_surface != EGL_NO_SURFACE)
> @@ -3136,6 +3159,10 @@ gl_renderer_setup(struct weston_compositor *ec,
> EGLSurface egl_surface)
> fan_debug_repaint_binding,
> ec);
>
> + gr->output_destroy_listener.notify = output_handle_destroy;
> + wl_signal_add(>output_destroyed_signal,
> + >output_destroy_listener);
> +
> weston_log("GL ES 2 renderer features:\n");
> weston_log_continue(STAMP_SPACE "read-back format: %s\n",
> ec->read_format == PIXMAN_a8r8g8b8 ? "BGRA" : "RGBA");
Other than that, this patch looks good.
Thanks,
pq
pgp57X04FU3sE.pgp
Description: OpenPGP digital signature
___
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/wayland-devel