diff options
author | Frank Henigman <fjhenigman@chromium.org> | 2014-10-21 17:18:35 -0400 |
---|---|---|
committer | Chad Versace <chad.versace@linux.intel.com> | 2014-11-09 21:47:44 -0800 |
commit | 37db06de448e64f46db9a73a99444ccf72c35e20 (patch) | |
tree | 8ed55bae038bfc9bb794eb9c38384d4a2b8b76d1 /src | |
parent | 0df69fa479a2651ca83ce4f4a7bac88c50fc705f (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.c | 2 | ||||
-rw-r--r-- | src/waffle/gbm/wgbm_window.c | 17 | ||||
-rw-r--r-- | src/waffle/gbm/wgbm_window.h | 3 |
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); |