compositor-drm: clear gbm_surface pointer after destroying the GBM surface
Since commit ee1d968e64 ("compositor-drm: Fall back if GBM surface fails with
modifiers"), drm_output_init_egl requires output->gbm_surface to be NULL, or
gbm_surface_create will not be called if HAVE_GBM_MODIFIERS is enabled but no
modifiers are supported by the plane. This could happen if _init_egl is called
after drm_ouptut_fini_egl drom drm_output_switch_mode.
Add an assert to guarantee the requirement and clears the gbm_surface pointer
after the surface is destroyed.
Signed-off-by: Philipp Zabel <p.pzabel@pengutronix.de>
This commit is contained in:
@@ -5045,6 +5045,8 @@ drm_output_init_egl(struct drm_output *output, struct drm_backend *b)
|
|||||||
struct drm_plane *plane = output->scanout_plane;
|
struct drm_plane *plane = output->scanout_plane;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
|
assert(output->gbm_surface == NULL);
|
||||||
|
|
||||||
for (i = 0; i < plane->count_formats; i++) {
|
for (i = 0; i < plane->count_formats; i++) {
|
||||||
if (plane->formats[i].format == output->gbm_format)
|
if (plane->formats[i].format == output->gbm_format)
|
||||||
break;
|
break;
|
||||||
@@ -5094,6 +5096,7 @@ drm_output_init_egl(struct drm_output *output, struct drm_backend *b)
|
|||||||
n_formats) < 0) {
|
n_formats) < 0) {
|
||||||
weston_log("failed to create gl renderer output state\n");
|
weston_log("failed to create gl renderer output state\n");
|
||||||
gbm_surface_destroy(output->gbm_surface);
|
gbm_surface_destroy(output->gbm_surface);
|
||||||
|
output->gbm_surface = NULL;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -5120,6 +5123,7 @@ drm_output_fini_egl(struct drm_output *output)
|
|||||||
|
|
||||||
gl_renderer->output_destroy(&output->base);
|
gl_renderer->output_destroy(&output->base);
|
||||||
gbm_surface_destroy(output->gbm_surface);
|
gbm_surface_destroy(output->gbm_surface);
|
||||||
|
output->gbm_surface = NULL;
|
||||||
drm_output_fini_cursor_egl(output);
|
drm_output_fini_cursor_egl(output);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user