summaryrefslogtreecommitdiff
path: root/EGL/yagl_display.c
diff options
context:
space:
mode:
Diffstat (limited to 'EGL/yagl_display.c')
-rw-r--r--EGL/yagl_display.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/EGL/yagl_display.c b/EGL/yagl_display.c
index 1433c8a..4aec282 100644
--- a/EGL/yagl_display.c
+++ b/EGL/yagl_display.c
@@ -42,6 +42,7 @@
#include "yagl_fence.h"
#include "yagl_native_display.h"
#include "yagl_native_platform.h"
+#include "yagl_client_image.h"
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
@@ -534,6 +535,33 @@ int yagl_display_image_remove(struct yagl_display *dpy,
return 0;
}
+void yagl_display_finalize_images(struct yagl_display *dpy)
+{
+ struct yagl_resource *res;
+
+ pthread_mutex_lock(&dpy->mutex);
+
+ yagl_list_for_each(struct yagl_resource, res, &dpy->images, list) {
+ struct yagl_image *image = (struct yagl_image *)res;
+ int need_finalize;
+
+ yagl_image_acquire(image);
+
+ yagl_client_image_acquire(image->client_image);
+ need_finalize = image->client_image->need_finalize;
+ image->client_image->need_finalize = 0;
+ yagl_client_image_release(image->client_image);
+
+ if (need_finalize && image->finalize) {
+ image->finalize(image);
+ }
+
+ yagl_image_release(image);
+ }
+
+ pthread_mutex_unlock(&dpy->mutex);
+}
+
void yagl_display_fence_add(struct yagl_display *dpy,
struct yagl_fence *fence)
{