diff --git a/src/gallium/frontends/va/surface.c b/src/gallium/frontends/va/surface.c index 48aeea503e3..1abbecf3525 100644 --- a/src/gallium/frontends/va/surface.c +++ b/src/gallium/frontends/va/surface.c @@ -92,8 +92,14 @@ vlVaDestroySurfaces(VADriverContextP ctx, VASurfaceID *surface_list, int num_sur if (surf->fence && surf->ctx->decoder && surf->ctx->decoder->destroy_fence) surf->ctx->decoder->destroy_fence(surf->ctx->decoder, surf->fence); } - if (drv->last_efc_surface == surf) - drv->last_efc_surface = NULL; + if (drv->last_efc_surface) { + vlVaSurface *efc_surf = drv->last_efc_surface; + if (efc_surf == surf || efc_surf->efc_surface == surf) { + efc_surf->efc_surface = NULL; + drv->last_efc_surface = NULL; + drv->efc_count = -1; + } + } util_dynarray_fini(&surf->subpics); FREE(surf); handle_table_remove(drv->htab, surface_list[i]);