| From 56e4959f0bc3e442c813d78e8ab6b3bf64b4ac66 Mon Sep 17 00:00:00 2001 |
| From: OpenEmbedded <oe.patch@oe> |
| 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 <alexandros.frantzis@collabora.com> |
| |
| 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 <twoerner@gmail.com> |
| --- |
| 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 <cstring> |
| #include <csignal> |
| |
| +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<Private>()} |
| { |
| 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 <vector> |
| +#include <memory> |
| #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<Private> 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 |
| |