mirror of
git://git.yoctoproject.org/meta-raspberrypi.git
synced 2025-07-19 12:59:03 +02:00

There is new patch-status QA check in oe-core: https://git.openembedded.org/openembedded-core/commit/?id=76a685bfcf927593eac67157762a53259089ea8a This is temporary work around just to hide _many_ warnings from optional patch-status (if you add it to WARN_QA). This just added Upstream-Status: Pending everywhere without actually investigating what's the proper status. This is just to hide current QA warnings and to catch new .patch files being added without Upstream-Status, but the number of Pending patches is now terrible: Patches in Pending state: 41 (57%) With recent change to enable patch-status not only for all .patch files in oe-core, but for all recipes from oe-core: https://git.openembedded.org/openembedded-core/commit/?id=61a881fdbe8b5a21c6276b8a5d06cc30486b1eb3 this causes bluez5 do_patch failures as reported in: https://lists.openembedded.org/g/openembedded-core/message/183177 Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
90 lines
3.4 KiB
Diff
90 lines
3.4 KiB
Diff
From ffdcdf7605f4f266b408cf161e7c76dab54d689b Mon Sep 17 00:00:00 2001
|
|
From: Jeff Wannamaker <jeff_wannamaker@cable.comcast.com>
|
|
Date: Thu, 19 Jan 2017 18:56:07 +0000
|
|
Subject: [PATCH] Implement triple buffering for wayland
|
|
|
|
Change from double to triple buffering for wayland.
|
|
This enables higher frame rates without tearing artifacts
|
|
by allowing both the glFinish and the buffer release
|
|
interlock to operate without pushing the frame period
|
|
to two vertical intervals
|
|
|
|
Signed-off-by: Jeff Wannamaker <jeff_wannamaker@cable.comcast.com>
|
|
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
|
---
|
|
Upstream-Status: Pending
|
|
|
|
interface/khronos/egl/egl_client.c | 3 ++-
|
|
interface/khronos/egl/egl_client_surface.c | 8 ++++++++
|
|
interface/khronos/egl/egl_client_surface.h | 11 +++++++++++
|
|
3 files changed, 21 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/interface/khronos/egl/egl_client.c b/interface/khronos/egl/egl_client.c
|
|
index 13a110c..0380274 100644
|
|
--- a/interface/khronos/egl/egl_client.c
|
|
+++ b/interface/khronos/egl/egl_client.c
|
|
@@ -2323,7 +2323,8 @@ EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffers(EGLDisplay dpy, EGLSurface surf)
|
|
|
|
buffer_temp = surface->front_wl_buffer;
|
|
surface->front_wl_buffer = surface->back_wl_buffer;
|
|
- surface->back_wl_buffer = buffer_temp;
|
|
+ surface->back_wl_buffer = surface->middle_wl_buffer;
|
|
+ surface->middle_wl_buffer = buffer_temp;
|
|
|
|
configid = egl_config_to_id(surface->config);
|
|
color = egl_config_get_color_format(configid);
|
|
diff --git a/interface/khronos/egl/egl_client_surface.c b/interface/khronos/egl/egl_client_surface.c
|
|
index 9a9582c..10b3b04 100644
|
|
--- a/interface/khronos/egl/egl_client_surface.c
|
|
+++ b/interface/khronos/egl/egl_client_surface.c
|
|
@@ -402,12 +402,14 @@ EGL_SURFACE_T *egl_surface_create(
|
|
if (type == WINDOW && wl_display) {
|
|
surface->wl_egl_window = (struct wl_egl_window*)win;
|
|
surface->front_wl_buffer = NULL;
|
|
+ surface->middle_wl_buffer = NULL;
|
|
surface->back_wl_buffer = allocate_wl_buffer(
|
|
surface->wl_egl_window, color);
|
|
resource = surface->back_wl_buffer->resource;
|
|
} else {
|
|
surface->wl_egl_window = NULL;
|
|
surface->front_wl_buffer = NULL;
|
|
+ surface->middle_wl_buffer = NULL;
|
|
surface->back_wl_buffer = NULL;
|
|
resource = DISPMANX_NO_HANDLE;
|
|
}
|
|
@@ -696,6 +698,12 @@ void egl_surface_free(EGL_SURFACE_T *surface)
|
|
surface->back_wl_buffer = 0;
|
|
}
|
|
|
|
+ if (surface->middle_wl_buffer) {
|
|
+ wl_buffer_destroy(surface->middle_wl_buffer->wl_buffer);
|
|
+ free(surface->middle_wl_buffer);
|
|
+ surface->middle_wl_buffer = 0;
|
|
+ }
|
|
+
|
|
if (surface->front_wl_buffer) {
|
|
wl_buffer_destroy(surface->front_wl_buffer->wl_buffer);
|
|
free(surface->front_wl_buffer);
|
|
diff --git a/interface/khronos/egl/egl_client_surface.h b/interface/khronos/egl/egl_client_surface.h
|
|
index e328b77..58a3184 100644
|
|
--- a/interface/khronos/egl/egl_client_surface.h
|
|
+++ b/interface/khronos/egl/egl_client_surface.h
|
|
@@ -312,6 +312,17 @@ typedef struct {
|
|
*/
|
|
struct wl_dispmanx_client_buffer *front_wl_buffer;
|
|
|
|
+ /*
|
|
+ middle_wl_buffer
|
|
+
|
|
+ Validity:
|
|
+ type == WINDOW
|
|
+
|
|
+ Invariant:
|
|
+ client-side information about the wl_buffer in the middle
|
|
+ */
|
|
+ struct wl_dispmanx_client_buffer *middle_wl_buffer;
|
|
+
|
|
/*
|
|
back_wl_buffer
|
|
|