hybris/libhybris: updated for gralloc handler (!428)
Signed-off-by: Danct12 <danct12@disroot.org>
This commit is contained in:
parent
593fe01bb8
commit
f51840620b
2 changed files with 49 additions and 65 deletions
|
@ -1,7 +1,10 @@
|
|||
From ae11619430c59ba4a23acd8659157f43b863d2ed Mon Sep 17 00:00:00 2001
|
||||
From: NeKit <nekit1000@gmail.com>
|
||||
Date: Wed, 18 Oct 2017 23:12:51 +0300
|
||||
Subject: [PATCH 3/3] Implement X11 EGL platform based on wayland code.
|
||||
From d3fece21813f0a0e00e751703a8998b40f8dad73 Mon Sep 17 00:00:00 2001
|
||||
From: Danct12 <danct12@disroot.org>
|
||||
Date: Sat, 8 Jun 2019 16:56:10 +0700
|
||||
Subject: [PATCH] [PATCH v2] Implement X11 EGL platform based on wayland code.
|
||||
|
||||
Original patch by NeKit <nekit1000@gmail.com>
|
||||
Patched up for compatibility with libhybris gralloc support by Danct12 <danct12@disroot.org>
|
||||
|
||||
* Allow window system to hook eglGetConfigAttrib (needed for X11 EGL_NATIVE_VISUAL_ID)
|
||||
|
||||
|
@ -13,20 +16,21 @@ Subject: [PATCH 3/3] Implement X11 EGL platform based on wayland code.
|
|||
|
||||
* x11nativewindow: use same depth as target window for pixmap.
|
||||
Call xcb_present_pixmap instead of xcb_copy_area to present pixmap
|
||||
|
||||
Signed-off-by: Danct12 <danct12@disroot.org>
|
||||
---
|
||||
hybris/configure.ac | 1 +
|
||||
hybris/egl/egl.c | 13 +-
|
||||
hybris/egl/platforms/Makefile.am | 2 +-
|
||||
.../platforms/common/eglplatformcommon.cpp | 2 +-
|
||||
hybris/egl/platforms/x11/Makefile.am | 43 +
|
||||
hybris/egl/platforms/x11/eglplatform_x11.cpp | 235 ++++++
|
||||
hybris/egl/platforms/x11/x11_window.cpp | 742 ++++++++++++++++++
|
||||
hybris/egl/platforms/x11/x11_window.h | 206 +++++
|
||||
hybris/egl/platforms/x11/xcb_drihybris.c | 167 ++++
|
||||
hybris/egl/platforms/x11/xcb_drihybris.h | 122 +++
|
||||
hybris/egl/ws.c | 9 +
|
||||
hybris/egl/ws.h | 2 +
|
||||
12 files changed, 1541 insertions(+), 3 deletions(-)
|
||||
hybris/configure.ac | 1 +
|
||||
hybris/egl/egl.c | 13 +-
|
||||
hybris/egl/platforms/Makefile.am | 2 +-
|
||||
hybris/egl/platforms/x11/Makefile.am | 43 ++
|
||||
hybris/egl/platforms/x11/eglplatform_x11.cpp | 229 ++++++
|
||||
hybris/egl/platforms/x11/x11_window.cpp | 739 +++++++++++++++++++
|
||||
hybris/egl/platforms/x11/x11_window.h | 195 +++++
|
||||
hybris/egl/platforms/x11/xcb_drihybris.c | 167 +++++
|
||||
hybris/egl/platforms/x11/xcb_drihybris.h | 122 +++
|
||||
hybris/egl/ws.c | 9 +
|
||||
hybris/egl/ws.h | 2 +
|
||||
11 files changed, 1520 insertions(+), 2 deletions(-)
|
||||
create mode 100644 hybris/egl/platforms/x11/Makefile.am
|
||||
create mode 100644 hybris/egl/platforms/x11/eglplatform_x11.cpp
|
||||
create mode 100644 hybris/egl/platforms/x11/x11_window.cpp
|
||||
|
@ -35,10 +39,10 @@ Subject: [PATCH 3/3] Implement X11 EGL platform based on wayland code.
|
|||
create mode 100644 hybris/egl/platforms/x11/xcb_drihybris.h
|
||||
|
||||
diff --git a/hybris/configure.ac b/hybris/configure.ac
|
||||
index dac8bc9..526567a 100644
|
||||
index b3ddc50..7d20c34 100644
|
||||
--- a/hybris/configure.ac
|
||||
+++ b/hybris/configure.ac
|
||||
@@ -254,6 +254,7 @@ AC_CONFIG_FILES([
|
||||
@@ -264,6 +264,7 @@ AC_CONFIG_FILES([
|
||||
egl/platforms/null/Makefile
|
||||
egl/platforms/fbdev/Makefile
|
||||
egl/platforms/wayland/Makefile
|
||||
|
@ -87,7 +91,7 @@ index 4126752..c52de15 100644
|
|||
+SUBDIRS += x11
|
||||
diff --git a/hybris/egl/platforms/x11/Makefile.am b/hybris/egl/platforms/x11/Makefile.am
|
||||
new file mode 100644
|
||||
index 0000000..22eac5e
|
||||
index 0000000..4ab00f2
|
||||
--- /dev/null
|
||||
+++ b/hybris/egl/platforms/x11/Makefile.am
|
||||
@@ -0,0 +1,43 @@
|
||||
|
@ -123,7 +127,7 @@ index 0000000..22eac5e
|
|||
+eglplatform_x11_la_LDFLAGS = \
|
||||
+ -avoid-version -module -shared -export-dynamic \
|
||||
+ $(top_builddir)/egl/platforms/common/libhybris-eglplatformcommon.la \
|
||||
+ $(top_builddir)/hardware/libhardware.la \
|
||||
+ $(top_builddir)/gralloc/libgralloc.la \
|
||||
+ -lXext -lxcb -lX11-xcb -lxcb-present
|
||||
+
|
||||
+if HAS_ANDROID_4_2_0
|
||||
|
@ -136,10 +140,10 @@ index 0000000..22eac5e
|
|||
+
|
||||
diff --git a/hybris/egl/platforms/x11/eglplatform_x11.cpp b/hybris/egl/platforms/x11/eglplatform_x11.cpp
|
||||
new file mode 100644
|
||||
index 0000000..001b733
|
||||
index 0000000..3a1ac4f
|
||||
--- /dev/null
|
||||
+++ b/hybris/egl/platforms/x11/eglplatform_x11.cpp
|
||||
@@ -0,0 +1,235 @@
|
||||
@@ -0,0 +1,229 @@
|
||||
+/****************************************************************************************
|
||||
+**
|
||||
+** Copyright (C) 2013 Jolla Ltd.
|
||||
|
@ -190,16 +194,13 @@ index 0000000..001b733
|
|||
+#include <wayland-egl.h>
|
||||
+}
|
||||
+
|
||||
+#include <hybris/gralloc/gralloc.h>
|
||||
+#include "x11_window.h"
|
||||
+#include "logging.h"
|
||||
+
|
||||
+#include <X11/Xlib.h>
|
||||
+#include <X11/Xutil.h>
|
||||
+
|
||||
+static gralloc_module_t *gralloc = 0;
|
||||
+static alloc_device_t *alloc = 0;
|
||||
+
|
||||
+
|
||||
+static const char * (*_eglQueryString)(EGLDisplay dpy, EGLint name) = NULL;
|
||||
+static __eglMustCastToProperFunctionPointerType (*_eglGetProcAddress)(const char *procname) = NULL;
|
||||
+static EGLSyncKHR (*_eglCreateSyncKHR)(EGLDisplay dpy, EGLenum type, const EGLint *attrib_list) = NULL;
|
||||
|
@ -213,10 +214,7 @@ index 0000000..001b733
|
|||
+
|
||||
+extern "C" void x11ws_init_module(struct ws_egl_interface *egl_iface)
|
||||
+{
|
||||
+ int err;
|
||||
+ hw_get_module(GRALLOC_HARDWARE_MODULE_ID, (const hw_module_t **) &gralloc);
|
||||
+ err = gralloc_open((const hw_module_t *) gralloc, &alloc);
|
||||
+ TRACE("++ %lu x11: got gralloc %p err:%s", pthread_self(), gralloc, strerror(-err));
|
||||
+ hybris_gralloc_initialize(0);
|
||||
+ eglplatformcommon_init(egl_iface);
|
||||
+}
|
||||
+
|
||||
|
@ -275,7 +273,7 @@ index 0000000..001b733
|
|||
+ abort();
|
||||
+ }
|
||||
+
|
||||
+ X11NativeWindow *window = new X11NativeWindow(xdpy->xl_display, xlib_window, alloc, gralloc);
|
||||
+ X11NativeWindow *window = new X11NativeWindow(xdpy->xl_display, xlib_window);
|
||||
+ window->common.incRef(&window->common);
|
||||
+ return (EGLNativeWindowType) static_cast<struct ANativeWindow *>(window);
|
||||
+}
|
||||
|
@ -377,10 +375,10 @@ index 0000000..001b733
|
|||
+};
|
||||
diff --git a/hybris/egl/platforms/x11/x11_window.cpp b/hybris/egl/platforms/x11/x11_window.cpp
|
||||
new file mode 100644
|
||||
index 0000000..26e8844
|
||||
index 0000000..6eea75b
|
||||
--- /dev/null
|
||||
+++ b/hybris/egl/platforms/x11/x11_window.cpp
|
||||
@@ -0,0 +1,742 @@
|
||||
@@ -0,0 +1,739 @@
|
||||
+/****************************************************************************************
|
||||
+ **
|
||||
+ ** Copyright (C) 2013 Jolla Ltd.
|
||||
|
@ -442,7 +440,7 @@ index 0000000..26e8844
|
|||
+ pthread_mutex_unlock(&this->mutex);
|
||||
+}
|
||||
+
|
||||
+X11NativeWindow::X11NativeWindow(Display* xl_display, Window xl_window, alloc_device_t* alloc, gralloc_module_t* gralloc)
|
||||
+X11NativeWindow::X11NativeWindow(Display* xl_display, Window xl_window)
|
||||
+{
|
||||
+ int wayland_ok;
|
||||
+
|
||||
|
@ -459,9 +457,6 @@ index 0000000..26e8844
|
|||
+ // This is the default as per the EGL documentation
|
||||
+ this->m_swap_interval = 1;
|
||||
+
|
||||
+ this->m_alloc = alloc;
|
||||
+ m_gralloc = gralloc;
|
||||
+
|
||||
+ TRACE("getting X11 window information");
|
||||
+
|
||||
+ XWindowAttributes window_attributes;
|
||||
|
@ -918,7 +913,7 @@ index 0000000..26e8844
|
|||
+
|
||||
+ X11NativeWindowBuffer *wnb;
|
||||
+
|
||||
+ wnb = new ClientX11Buffer(m_alloc, m_width, m_height, m_format, m_usage, m_depth);
|
||||
+ wnb = new ClientX11Buffer(m_width, m_height, m_format, m_usage, m_depth);
|
||||
+ m_bufList.push_back(wnb);
|
||||
+ ++m_freeBufs;
|
||||
+
|
||||
|
@ -990,7 +985,7 @@ index 0000000..26e8844
|
|||
+ void *vaddr;
|
||||
+ std::list<X11NativeWindowBuffer *>::iterator it;
|
||||
+
|
||||
+ ret = m_gralloc->lock(m_gralloc, wnb->handle, wnb->usage, 0, 0, wnb->width, wnb->height, &vaddr);
|
||||
+ ret = hybris_gralloc_lock(wnb->handle, wnb->usage, 0, 0, wnb->width, wnb->height, &vaddr);
|
||||
+ TRACE("wnb:%p gralloc lock returns %i", wnb, ret);
|
||||
+ TRACE("wnb:%p lock to vaddr %p", wnb, vaddr);
|
||||
+ TRACE("wnb:%p width=%d stride=%d height=%d format=%d", wnb, wnb->width, wnb->stride, wnb->height, wnb->format);
|
||||
|
@ -1028,14 +1023,14 @@ index 0000000..26e8844
|
|||
+ if (m_useShm)
|
||||
+ {
|
||||
+ memcpy(m_image->data, vaddr, m_image->bytes_per_line * m_image->height);
|
||||
+ m_gralloc->unlock(m_gralloc, wnb->handle);
|
||||
+ hybris_gralloc_unlock(wnb->handle);
|
||||
+ XShmPutImage(m_display, m_window, m_gc, m_image, 0, 0, 0, 0, m_width, m_height, 0);
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ m_image->data = (char *)vaddr;
|
||||
+ XPutImage(m_display, m_window, m_gc, m_image, 0, 0, 0, 0, m_width, m_height);
|
||||
+ m_gralloc->unlock(m_gralloc, wnb->handle);
|
||||
+ hybris_gralloc_unlock(wnb->handle);
|
||||
+ }
|
||||
+
|
||||
+ lock();
|
||||
|
@ -1125,10 +1120,10 @@ index 0000000..26e8844
|
|||
+// vim: noai:ts=4:sw=4:ss=4:expandtab
|
||||
diff --git a/hybris/egl/platforms/x11/x11_window.h b/hybris/egl/platforms/x11/x11_window.h
|
||||
new file mode 100644
|
||||
index 0000000..e5be070
|
||||
index 0000000..e4464db
|
||||
--- /dev/null
|
||||
+++ b/hybris/egl/platforms/x11/x11_window.h
|
||||
@@ -0,0 +1,206 @@
|
||||
@@ -0,0 +1,195 @@
|
||||
+/****************************************************************************************
|
||||
+ **
|
||||
+ ** Copyright (C) 2013 Jolla Ltd.
|
||||
|
@ -1159,7 +1154,7 @@ index 0000000..e5be070
|
|||
+#define X11_WINDOW_H
|
||||
+#include "nativewindowbase.h"
|
||||
+#include <linux/fb.h>
|
||||
+#include <hardware/gralloc.h>
|
||||
+#include <hybris/gralloc/gralloc.h>
|
||||
+extern "C" {
|
||||
+#include <X11/Xlib-xcb.h>
|
||||
+#include <xcb/present.h>
|
||||
|
@ -1202,12 +1197,7 @@ index 0000000..e5be070
|
|||
+{
|
||||
+friend class X11NativeWindow;
|
||||
+protected:
|
||||
+ ClientX11Buffer()
|
||||
+ : m_alloc(0)
|
||||
+ {}
|
||||
+
|
||||
+ ClientX11Buffer(alloc_device_t* alloc_device,
|
||||
+ unsigned int width,
|
||||
+ ClientX11Buffer( unsigned int width,
|
||||
+ unsigned int height,
|
||||
+ unsigned int format,
|
||||
+ unsigned int usage,
|
||||
|
@ -1221,11 +1211,9 @@ index 0000000..e5be070
|
|||
+
|
||||
+ this->busy = 0;
|
||||
+ this->other = NULL;
|
||||
+ this->m_alloc = alloc_device;
|
||||
+ int alloc_ok = this->m_alloc->alloc(this->m_alloc,
|
||||
+ this->width ? this->width : 1, this->height ? this->height : 1,
|
||||
+ int alloc_ok = hybris_gralloc_allocate(this->width ? this->width : 1, this->height ? this->height : 1,
|
||||
+ this->format, this->usage,
|
||||
+ &this->handle, &this->stride);
|
||||
+ &this->handle, (uint32_t*)&this->stride);
|
||||
+ assert(alloc_ok == 0);
|
||||
+ this->youngest = 0;
|
||||
+ this->common.incRef(&this->common);
|
||||
|
@ -1236,13 +1224,11 @@ index 0000000..e5be070
|
|||
+
|
||||
+ ~ClientX11Buffer()
|
||||
+ {
|
||||
+ if (this->m_alloc)
|
||||
+ m_alloc->free(m_alloc, this->handle);
|
||||
+ hybris_gralloc_release(this->handle, 1);
|
||||
+ }
|
||||
+
|
||||
+protected:
|
||||
+ void* vaddr;
|
||||
+ alloc_device_t* m_alloc;
|
||||
+
|
||||
+public:
|
||||
+
|
||||
|
@ -1250,7 +1236,7 @@ index 0000000..e5be070
|
|||
+
|
||||
+class X11NativeWindow : public BaseNativeWindow {
|
||||
+public:
|
||||
+ X11NativeWindow(Display* xl_display, Window xl_window, alloc_device_t* alloc, gralloc_module_t* gralloc);
|
||||
+ X11NativeWindow(Display* xl_display, Window xl_window);
|
||||
+ ~X11NativeWindow();
|
||||
+
|
||||
+ void lock();
|
||||
|
@ -1323,14 +1309,12 @@ index 0000000..e5be070
|
|||
+ unsigned int m_defaultHeight;
|
||||
+ unsigned int m_usage;
|
||||
+
|
||||
+ alloc_device_t* m_alloc;
|
||||
+ pthread_mutex_t mutex;
|
||||
+ pthread_cond_t cond;
|
||||
+ int m_queueReads;
|
||||
+ int m_freeBufs;
|
||||
+ EGLint *m_damage_rects, m_damage_n_rects;
|
||||
+ int m_swap_interval;
|
||||
+ gralloc_module_t *m_gralloc;
|
||||
+};
|
||||
+
|
||||
+#endif
|
||||
|
@ -1674,5 +1658,5 @@ index c4811c0..92b221a 100644
|
|||
|
||||
#endif
|
||||
--
|
||||
2.17.0
|
||||
2.21.0
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
pkgname=libhybris
|
||||
pkgver=1.0_git20190508
|
||||
pkgrel=0
|
||||
pkgrel=1
|
||||
arch="x86 armhf armv7 aarch64"
|
||||
url="https://github.com/libhybris/libhybris"
|
||||
license="Apache"
|
||||
|
@ -12,7 +12,7 @@ _commit="8ddb15b53d6a63b1545bbf97d00ea93827bd68eb"
|
|||
source="$pkgname-$_commit.tar.gz::https://github.com/libhybris/libhybris/archive/$_commit.tar.gz
|
||||
0001-Make-libhybris-compile-with-musl.patch
|
||||
0002-tests-Regression-test-for-EGL-glibc-TLS-conflict.patch
|
||||
0003-Implement-X11-EGL-platform-based-on-wayland-code.patch
|
||||
0003-PATCH-v2-Implement-X11-EGL-platform-based-on-wayland.patch
|
||||
0004-Build-test-hwcomposer-7-caf.patch"
|
||||
|
||||
pkgdesc="libhybris allows to use bionic-based HW adaptations"
|
||||
|
@ -164,5 +164,5 @@ dev() {
|
|||
sha512sums="681e8345ba56d5b9684ab3901c9cfdc6d4f48f55ef97611eef14d9471f08f1c0f60803298224df5110f2a3d08da145a61e38ea241585bc07e30cb48a893dc92b libhybris-8ddb15b53d6a63b1545bbf97d00ea93827bd68eb.tar.gz
|
||||
9f7a324f18332e44f8789108e32f0587c268d10adaee0040c42d1bece7ab58e292d68243e7814f34f37b3b5dff590758269e531b4f2fd1991334eda4333f5854 0001-Make-libhybris-compile-with-musl.patch
|
||||
1355a4403d1af8bdf75b9e4502cbfc093b9788224ce7c24a1f6a53dd7996d385d31a3362577a4293db6b6d0dd0ae4e88140b38c658ff0a288d9acfc2753859bb 0002-tests-Regression-test-for-EGL-glibc-TLS-conflict.patch
|
||||
3915889f243f8232db2b926f9a456b042df61119ada351f27a33888edcc5da605f53d5bd12e4ef30f65ef962cd2371952776655e4eaf67f5d8cb6da2664c85b2 0003-Implement-X11-EGL-platform-based-on-wayland-code.patch
|
||||
db7bb0ffc04042b32d870db364df4d38d9769978f26d71f98dd2569b4cae7fb3839c7a0c421b465f931a57fcde38b8eca091b7ae0062e32a7e09b93a701397f3 0003-PATCH-v2-Implement-X11-EGL-platform-based-on-wayland.patch
|
||||
eda57804fefa1d586e90fb2198c310f65e6dbc7e09b5d1dd7d15df4ab152c4c8915c212230a92c35ec8a013d3ec7a7b1d289653bedb46b7eb2850a477ccebe16 0004-Build-test-hwcomposer-7-caf.patch"
|
||||
|
|
Loading…
Reference in a new issue