summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorFrank Henigman <fjhenigman@chromium.org>2014-10-21 17:18:35 -0400
committerChad Versace <chad.versace@linux.intel.com>2014-11-09 21:47:44 -0800
commit37db06de448e64f46db9a73a99444ccf72c35e20 (patch)
tree8ed55bae038bfc9bb794eb9c38384d4a2b8b76d1 /src
parent0df69fa479a2651ca83ce4f4a7bac88c50fc705f (diff)
gbm: lock and release buffer in swap buffers
Otherwise mesa prints "libEGL debug: EGL user error 0x300d (EGL_BAD_SURFACE) in dri2_swap_buffers" when environment variable EGL_LOG_LEVEL=debug. Fixes #17: https://github.com/waffle-gl/waffle/pull/17 Reviewed-by: Chad Versace <chad.versace@linux.intel.com>
Diffstat (limited to 'src')
-rw-r--r--src/waffle/gbm/wgbm_platform.c2
-rw-r--r--src/waffle/gbm/wgbm_window.c17
-rw-r--r--src/waffle/gbm/wgbm_window.h3
3 files changed, 21 insertions, 1 deletions
diff --git a/src/waffle/gbm/wgbm_platform.c b/src/waffle/gbm/wgbm_platform.c
index 5624660..d556145 100644
--- a/src/waffle/gbm/wgbm_platform.c
+++ b/src/waffle/gbm/wgbm_platform.c
@@ -156,7 +156,7 @@ static const struct wcore_platform_vtbl wgbm_platform_vtbl = {
.create = wgbm_window_create,
.destroy = wgbm_window_destroy,
.show = wgbm_window_show,
- .swap_buffers = wegl_window_swap_buffers,
+ .swap_buffers = wgbm_window_swap_buffers,
.get_native = wgbm_window_get_native,
},
};
diff --git a/src/waffle/gbm/wgbm_window.c b/src/waffle/gbm/wgbm_window.c
index 85378da..bce32a4 100644
--- a/src/waffle/gbm/wgbm_window.c
+++ b/src/waffle/gbm/wgbm_window.c
@@ -100,6 +100,23 @@ wgbm_window_show(struct wcore_window *wc_self)
return true;
}
+
+bool
+wgbm_window_swap_buffers(struct wcore_window *wc_self)
+{
+ if (!wegl_window_swap_buffers(wc_self))
+ return false;
+
+ struct wgbm_window *self = wgbm_window(wc_self);
+ struct gbm_bo *bo = gbm_surface_lock_front_buffer(self->gbm_surface);
+ if (!bo)
+ return false;
+
+ gbm_surface_release_buffer(self->gbm_surface, bo);
+ return true;
+}
+
+
union waffle_native_window*
wgbm_window_get_native(struct wcore_window *wc_self)
{
diff --git a/src/waffle/gbm/wgbm_window.h b/src/waffle/gbm/wgbm_window.h
index 7cd752b..0a895db 100644
--- a/src/waffle/gbm/wgbm_window.h
+++ b/src/waffle/gbm/wgbm_window.h
@@ -60,5 +60,8 @@ wgbm_window_destroy(struct wcore_window *wc_self);
bool
wgbm_window_show(struct wcore_window *wc_self);
+bool
+wgbm_window_swap_buffers(struct wcore_window *wc_self);
+
union waffle_native_window*
wgbm_window_get_native(struct wcore_window *wc_self);