From 56e4959f0bc3e442c813d78e8ab6b3bf64b4ac66 Mon Sep 17 00:00:00 2001 From: OpenEmbedded Date: Wed, 2 Dec 2020 20:27:42 +0000 Subject: [PATCH] fix dispmanx build For when the user is building "--with-flavors dispmanx-glesv2", fixes a bunch of "redeclared as different kind of symbol" problems. This patch is almost entirely from: https://github.com/glmark2/glmark2/commit/3b1a0f78d03ae126b78ee52a7c434809115e5993 Which was created by: Alexandros Frantzis See: https://github.com/glmark2/glmark2/issues/80 My contribution is to tweak the wscript to link all the required libraries. Upstream-Status: Submitted [https://github.com/glmark2/glmark2/pull/135] Signed-off-by: Trevor Woerner --- src/native-state-dispmanx.cpp | 22 +++++++++++++++++----- src/native-state-dispmanx.h | 7 +++---- wscript | 2 +- 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/src/native-state-dispmanx.cpp b/src/native-state-dispmanx.cpp index 2117386..49f74e7 100644 --- a/src/native-state-dispmanx.cpp +++ b/src/native-state-dispmanx.cpp @@ -23,13 +23,25 @@ #include "native-state-dispmanx.h" #include "log.h" +#include "EGL/egl.h" + #include #include +struct NativeStateDispmanx::Private +{ + Private() + { + memset(&egl_dispmanx_window, 0, sizeof(egl_dispmanx_window)); + } + + EGL_DISPMANX_WINDOW_T egl_dispmanx_window; +}; + NativeStateDispmanx::NativeStateDispmanx() + : priv{std::make_unique()} { memset(&properties_, 0, sizeof(properties_)); - memset(&egl_dispmanx_window, 0, sizeof(egl_dispmanx_window)); } NativeStateDispmanx::~NativeStateDispmanx() @@ -99,9 +111,9 @@ NativeStateDispmanx::create_window(WindowProperties const& properties) 0 /*clamp*/, DISPMANX_NO_ROTATE); - egl_dispmanx_window.element = dispmanx_element; - egl_dispmanx_window.width = dst_rect.width; - egl_dispmanx_window.height = dst_rect.height; + priv->egl_dispmanx_window.element = dispmanx_element; + priv->egl_dispmanx_window.width = dst_rect.width; + priv->egl_dispmanx_window.height = dst_rect.height; vc_dispmanx_update_submit_sync(dispmanx_update); return true; @@ -111,7 +123,7 @@ void* NativeStateDispmanx::window(WindowProperties &properties) { properties = properties_; - return &egl_dispmanx_window; + return &priv->egl_dispmanx_window; } void diff --git a/src/native-state-dispmanx.h b/src/native-state-dispmanx.h index a6ed3d4..794b2d3 100644 --- a/src/native-state-dispmanx.h +++ b/src/native-state-dispmanx.h @@ -24,10 +24,8 @@ #define GLMARK2_NATIVE_STATE_DISPMANX_H_ #include +#include #include "bcm_host.h" -#include "GLES/gl.h" -#include "EGL/egl.h" -#include "EGL/eglext.h" #include "native-state.h" @@ -46,11 +44,12 @@ public: void flip(); private: + struct Private; DISPMANX_DISPLAY_HANDLE_T dispmanx_display; DISPMANX_UPDATE_HANDLE_T dispmanx_update; DISPMANX_ELEMENT_HANDLE_T dispmanx_element; - EGL_DISPMANX_WINDOW_T egl_dispmanx_window; WindowProperties properties_; + std::unique_ptr priv; }; #endif /* GLMARK2_NATIVE_STATE_DISPMANX_H_ */ diff --git a/wscript b/wscript index e09fa78..6c3869c 100644 --- a/wscript +++ b/wscript @@ -205,7 +205,7 @@ def configure_linux(ctx): ctx.check_cxx(lib = 'brcmGLESv2', uselib_store = 'glesv2', libpath='/opt/vc/lib') ctx.check_cxx(lib = ['brcmEGL', 'brcmGLESv2'], uselib_store = 'egl', libpath='/opt/vc/lib') - ctx.check_cxx(lib = ['bcm_host', 'vcos', 'vchiq_arm'], uselib_store = 'dispmanx', libpath='/opt/vc/lib') + ctx.check_cxx(lib = ['brcmEGL', 'brcmGLESv2', 'vchostif', 'bcm_host', 'vcos', 'vchiq_arm'], uselib_store = 'dispmanx', libpath='/opt/vc/lib') # Check optional packages opt_pkgs = [('x11', 'x11', None, list_contains(ctx.options.flavors, 'x11')), -- 2.28.0.497.g54e85e7af1