diff --git a/include/libweston/libweston.h b/include/libweston/libweston.h index ce70148c2..a35568b8d 100644 --- a/include/libweston/libweston.h +++ b/include/libweston/libweston.h @@ -1596,6 +1596,7 @@ struct weston_buffer { const struct pixel_format_info *pixel_format; uint64_t format_modifier; + char *format_modifier_name; }; enum weston_buffer_reference_type { diff --git a/libweston/compositor.c b/libweston/compositor.c index 7f1430120..b1bd4e8e7 100644 --- a/libweston/compositor.c +++ b/libweston/compositor.c @@ -2823,6 +2823,7 @@ weston_buffer_destroy(struct weston_buffer *buffer) assert(buffer->passive_count == 0); wl_signal_emit_mutable(&buffer->destroy_signal, buffer); + free(buffer->format_modifier_name); free(buffer); } @@ -2937,6 +2938,8 @@ weston_buffer_from_resource(struct weston_compositor *ec, buffer->type = WESTON_BUFFER_RENDERER_OPAQUE; } + buffer->format_modifier_name = pixel_format_get_modifier(buffer->format_modifier); + if (ec->renderer->buffer_init) ec->renderer->buffer_init(ec, buffer); @@ -3103,6 +3106,7 @@ weston_buffer_create_solid_rgba(struct weston_compositor *compositor, pixel_format_get_info_shm(WL_SHM_FORMAT_ARGB8888); } buffer->format_modifier = DRM_FORMAT_MOD_LINEAR; + buffer->format_modifier_name = pixel_format_get_modifier(buffer->format_modifier); weston_buffer_reference(ret, buffer, BUFFER_MAY_BE_ACCESSED); @@ -9503,7 +9507,6 @@ static void debug_scene_view_print_buffer(FILE *fp, struct weston_view *view) { struct weston_buffer *buffer = view->surface->buffer_ref.buffer; - char *modifier_name; if (!buffer) { fputs("\t\t[buffer not available]\n", fp); @@ -9543,12 +9546,7 @@ debug_scene_view_print_buffer(FILE *fp, struct weston_view *view) } else { fputs("\t\t\t[unknown format]\n", fp); } - - modifier_name = pixel_format_get_modifier(buffer->format_modifier); - fprintf(fp, "\t\t\tmodifier: %s\n", - modifier_name ? - modifier_name : "Failed to convert to a modifier name"); - free(modifier_name); + fprintf(fp, "\t\t\tmodifier: %s\n", buffer->format_modifier_name); fprintf(fp, "\t\t\twidth: %d, height: %d\n", buffer->width, buffer->height); diff --git a/libweston/renderer-gl/gl-renderer.c b/libweston/renderer-gl/gl-renderer.c index 91753b99e..61d4e8d59 100644 --- a/libweston/renderer-gl/gl-renderer.c +++ b/libweston/renderer-gl/gl-renderer.c @@ -367,7 +367,6 @@ gl_log_paint_node_start(struct gl_renderer *gr, struct weston_paint_node *pnode) struct weston_surface *surface; struct weston_buffer *buffer; pid_t pid = 0; - char *modifier_name; if (!weston_log_scope_is_enabled(gr->paint_node_scope)) return; @@ -398,11 +397,8 @@ gl_log_paint_node_start(struct gl_renderer *gr, struct weston_paint_node *pnode) else weston_log_scope_printf(gr->paint_node_scope, "\t\t[unknown buffer format]\n"); - modifier_name = pixel_format_get_modifier(buffer->format_modifier); weston_log_scope_printf(gr->paint_node_scope, "\t\tbuffer modifier: %s\n", - modifier_name ? modifier_name : - "Failed to convert to a modifier name"); - free(modifier_name); + buffer->format_modifier_name); } static void