From: Emil Velikov <[email protected]> Use the function pointers stored in wgbm_platform, to communicate with the library.
Signed-off-by: Emil Velikov <[email protected]> Signed-off-by: Chad Versace <[email protected]> --- v2(chadv): Fix numerous upcast errors of form: src/waffle/gbm/wgbm_display.c: In function ‘wgbm_display_connect’: src/waffle/gbm/wgbm_display.c:121:12: warning: passing argument 1 of ‘wgbm_platform’ from incompatible pointer type [enabled by default] struct wgbm_platform *plat = wgbm_platform(wc_plat); ^ In file included from src/waffle/core/wcore_display.h:32:0, from src/waffle/egl/wegl_display.h:33, from src/waffle/gbm/wgbm_display.h:33, from src/waffle/gbm/wgbm_display.c:39: src/waffle/gbm/wgbm_platform.h:60:28: note: expected ‘struct wegl_platform *’ but argument is of type ‘struct wcore_platform *’ DEFINE_CONTAINER_CAST_FUNC(wgbm_platform, ^ src/waffle/core/wcore_util.h:44:5: note: in definition of macro ‘DEFINE_CONTAINER_CAST_FUNC’ func_name(member_type *member##_self) \ ^ I fixed them by applying this hunk pattern to each occurrence of the warning: - struct wgbm_platform *plat = wgbm_platform(wc_self->display->platform); + struct wcore_platform *wc_plat = wc_self->display->platform; + struct wgbm_platform *plat = wgbm_platform(wegl_platform(wc_plat)); For wgbm_window, this warning likely resulted in a real error, because the address of wegl_window and wgbm_window differ. For reference, below is the layout of wgbm_window: struct wgbm_window { struct gbm_surface *gbm_surface; struct wegl_window wegl; }; .../Modules/WafflePrintConfigurationSummary.cmake | 1 - src/waffle/CMakeLists.txt | 1 - src/waffle/gbm/wgbm_display.c | 11 ++++++----- src/waffle/gbm/wgbm_window.c | 23 +++++++++++++--------- src/waffle/gbm/wgbm_window.h | 1 + 5 files changed, 21 insertions(+), 16 deletions(-) diff --git a/cmake/Modules/WafflePrintConfigurationSummary.cmake b/cmake/Modules/WafflePrintConfigurationSummary.cmake index 79f7b38..81e738d 100644 --- a/cmake/Modules/WafflePrintConfigurationSummary.cmake +++ b/cmake/Modules/WafflePrintConfigurationSummary.cmake @@ -65,7 +65,6 @@ if(waffle_has_x11) endif() if(waffle_has_gbm) message(" gbm_INCLUDE_DIRS: ${gbm_INCLUDE_DIRS}") - message(" gbm_LDFLAGS: ${gbm_LDFLAGS}") endif() message("") message("Build type:") diff --git a/src/waffle/CMakeLists.txt b/src/waffle/CMakeLists.txt index bf096b0..5d703f4 100644 --- a/src/waffle/CMakeLists.txt +++ b/src/waffle/CMakeLists.txt @@ -55,7 +55,6 @@ if(waffle_on_linux) endif() if(waffle_has_gbm) list(APPEND waffle_libdeps - ${gbm_LDFLAGS} ${libudev_LDFLAGS} ) endif() diff --git a/src/waffle/gbm/wgbm_display.c b/src/waffle/gbm/wgbm_display.c index be5e83f..ae416d4 100644 --- a/src/waffle/gbm/wgbm_display.c +++ b/src/waffle/gbm/wgbm_display.c @@ -23,13 +23,11 @@ // OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -#define __GBM__ 1 #define _GNU_SOURCE #include <stdlib.h> #include <unistd.h> -#include <gbm.h> #include <libudev.h> #include <fcntl.h> #include <sys/types.h> @@ -45,6 +43,8 @@ bool wgbm_display_destroy(struct wcore_display *wc_self) { struct wgbm_display *self = wgbm_display(wc_self); + struct wcore_platform *wc_plat = wc_self->platform; + struct wgbm_platform *plat = wgbm_platform(wegl_platform(wc_plat)); bool ok = true; int fd; @@ -55,8 +55,8 @@ wgbm_display_destroy(struct wcore_display *wc_self) ok &= wegl_display_teardown(&self->wegl); if (self->gbm_device) { - fd = gbm_device_get_fd(self->gbm_device); - gbm_device_destroy(self->gbm_device); + fd = plat->gbm_device_get_fd(self->gbm_device); + plat->gbm_device_destroy(self->gbm_device); close(fd); } @@ -119,6 +119,7 @@ wgbm_display_connect(struct wcore_platform *wc_plat, const char *name) { struct wgbm_display *self; + struct wgbm_platform *plat = wgbm_platform(wegl_platform(wc_plat)); bool ok = true; int fd; @@ -137,7 +138,7 @@ wgbm_display_connect(struct wcore_platform *wc_plat, goto error; } - self->gbm_device = gbm_create_device(fd); + self->gbm_device = plat->gbm_create_device(fd); if (!self->gbm_device) { wcore_errorf(WAFFLE_ERROR_UNKNOWN, "gbm_create_device failed"); goto error; diff --git a/src/waffle/gbm/wgbm_window.c b/src/waffle/gbm/wgbm_window.c index bce32a4..edac449 100644 --- a/src/waffle/gbm/wgbm_window.c +++ b/src/waffle/gbm/wgbm_window.c @@ -23,8 +23,6 @@ // OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -#define __GBM__ 1 - #include <stdlib.h> #include <string.h> @@ -38,11 +36,14 @@ #include "wgbm_config.h" #include "wgbm_display.h" +#include "wgbm_platform.h" #include "wgbm_window.h" bool wgbm_window_destroy(struct wcore_window *wc_self) { + struct wcore_platform *wc_plat = wc_self->display->platform; + struct wgbm_platform *plat = wgbm_platform(wegl_platform(wc_plat)); struct wgbm_window *self = wgbm_window(wc_self); bool ok = true; @@ -50,7 +51,7 @@ wgbm_window_destroy(struct wcore_window *wc_self) return ok; ok &= wegl_window_teardown(&self->wegl); - gbm_surface_destroy(self->gbm_surface); + plat->gbm_surface_destroy(self->gbm_surface); free(self); return ok; } @@ -61,8 +62,9 @@ wgbm_window_create(struct wcore_platform *wc_plat, int width, int height) { - struct wgbm_window *self; struct wgbm_display *dpy = wgbm_display(wc_config->display); + struct wgbm_platform *plat = wgbm_platform(wegl_platform(wc_plat)); + struct wgbm_window *self; uint32_t gbm_format; bool ok = true; @@ -72,9 +74,9 @@ wgbm_window_create(struct wcore_platform *wc_plat, gbm_format = wgbm_config_get_gbm_format(&wc_config->attrs); assert(gbm_format != 0); - self->gbm_surface = gbm_surface_create(dpy->gbm_device, width, height, - gbm_format, - GBM_BO_USE_RENDERING); + self->gbm_surface = plat->gbm_surface_create(dpy->gbm_device, + width, height, gbm_format, + GBM_BO_USE_RENDERING); if (!self->gbm_surface) { wcore_errorf(WAFFLE_ERROR_UNKNOWN, "gbm_surface_create failed"); @@ -104,15 +106,18 @@ wgbm_window_show(struct wcore_window *wc_self) bool wgbm_window_swap_buffers(struct wcore_window *wc_self) { + struct wcore_platform *wc_plat = wc_self->display->platform; + struct wgbm_platform *plat = wgbm_platform(wegl_platform(wc_plat)); + 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); + struct gbm_bo *bo = plat->gbm_surface_lock_front_buffer(self->gbm_surface); if (!bo) return false; - gbm_surface_release_buffer(self->gbm_surface, bo); + plat->gbm_surface_release_buffer(self->gbm_surface, bo); return true; } diff --git a/src/waffle/gbm/wgbm_window.h b/src/waffle/gbm/wgbm_window.h index 0a895db..729612b 100644 --- a/src/waffle/gbm/wgbm_window.h +++ b/src/waffle/gbm/wgbm_window.h @@ -30,6 +30,7 @@ #include "wegl_window.h" struct wcore_platform; +struct gbm_surface; struct wgbm_window { struct gbm_surface *gbm_surface; -- 2.1.2.1.g5433a3e _______________________________________________ waffle mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/waffle

