On Fri, 29 Jul 2016 13:26:24 +0200 Armin Krezović <krezovic.ar...@gmail.com> 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ć <krezovic.ar...@gmail.com> 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(&gr->output_destroy_listener.link); > + > wl_array_release(&gr->vertices); > wl_array_release(&gr->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(&ec->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(&gr->destroy_signal); > + wl_signal_init(&gr->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(&ec->output_destroyed_signal, > + &gr->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