renderer-gl: Change init/destroy step for recovery

When recovering the renderer, skip non-GL steps in
gl_renderer_destroy() and gl_renderer_display_create()

Signed-off-by: Trigger Huang <Trigger.Huang@amd.com>
This commit is contained in:
Trigger Huang 2026-04-24 12:01:06 +08:00
parent bdb78b2af6
commit 64713ca283

View file

@ -5147,6 +5147,13 @@ gl_renderer_destroy_context(struct weston_compositor *ec)
EGL_NO_SURFACE, EGL_NO_SURFACE,
EGL_NO_CONTEXT);
if (gr->recovering && gr->drm_device) {
weston_dmabuf_feedback_destroy(ec->default_dmabuf_feedback);
ec->default_dmabuf_feedback = NULL;
weston_dmabuf_feedback_format_table_destroy(ec->dmabuf_feedback_format_table);
ec->dmabuf_feedback_format_table = NULL;
}
wl_list_for_each_safe(format, next_format, &gr->dmabuf_formats, link)
dmabuf_format_destroy(format);
@ -5169,6 +5176,11 @@ gl_renderer_destroy(struct weston_compositor *ec)
{
struct gl_renderer *gr = get_renderer(ec);
if (gr->recovering) {
gl_renderer_destroy_context(ec);
return;
}
wl_signal_emit(&gr->destroy_signal, gr);
gl_renderer_destroy_context(ec);
@ -5344,11 +5356,14 @@ static int
gl_renderer_display_create(struct weston_compositor *ec,
const struct gl_renderer_display_options *options)
{
struct gl_renderer *gr;
struct gl_renderer *gr = get_renderer(ec);
const struct pixel_format_info *info;
int nformats, i, j;
bool supported;
if (gr && gr->recovering)
return gl_renderer_init_context(ec, options);
gr = zalloc(sizeof *gr);
if (gr == NULL)
return -1;