summaryrefslogtreecommitdiff
path: root/meta-xilinx/meta-xilinx-bsp/recipes-graphics/weston/files/0001-gl-renderer.c-Use-gr-egl_config-to-create-pbuffer-su.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-xilinx/meta-xilinx-bsp/recipes-graphics/weston/files/0001-gl-renderer.c-Use-gr-egl_config-to-create-pbuffer-su.patch')
-rw-r--r--meta-xilinx/meta-xilinx-bsp/recipes-graphics/weston/files/0001-gl-renderer.c-Use-gr-egl_config-to-create-pbuffer-su.patch84
1 files changed, 84 insertions, 0 deletions
diff --git a/meta-xilinx/meta-xilinx-bsp/recipes-graphics/weston/files/0001-gl-renderer.c-Use-gr-egl_config-to-create-pbuffer-su.patch b/meta-xilinx/meta-xilinx-bsp/recipes-graphics/weston/files/0001-gl-renderer.c-Use-gr-egl_config-to-create-pbuffer-su.patch
new file mode 100644
index 000000000..d7d411f63
--- /dev/null
+++ b/meta-xilinx/meta-xilinx-bsp/recipes-graphics/weston/files/0001-gl-renderer.c-Use-gr-egl_config-to-create-pbuffer-su.patch
@@ -0,0 +1,84 @@
+From 7cc76d50bddd6ff1eb5fb19712415f385f5d3f49 Mon Sep 17 00:00:00 2001
+From: Madhurkiran Harikrishnan <madhurkiran.harikrishnan@xilinx.com>
+Date: Mon, 3 Feb 2020 14:26:21 -0800
+Subject: [PATCH] gl-renderer.c: Use gr->egl_config to create pbuffer surface
+
+The original implementation always chose first egl config for pbuffer
+surface type, however the returned configs are implementation specific
+and egl config may not always match between ctx and surface. Hence,
+use gr->egl_config which already has the matching config but ensure that
+windows and pbuffer bit are set for the surface type.
+
+Signed-off-by: Madhurkiran Harikrishnan <madhurkiran.harikrishnan@xilinx.com>
+Upstream-status: Pending
+---
+ libweston/renderer-gl/gl-renderer.c | 28 ++++++++++++++--------------
+ 1 file changed, 14 insertions(+), 14 deletions(-)
+
+diff --git a/libweston/renderer-gl/gl-renderer.c b/libweston/renderer-gl/gl-renderer.c
+index 54f8b1c..f50c959 100644
+--- a/libweston/renderer-gl/gl-renderer.c
++++ b/libweston/renderer-gl/gl-renderer.c
+@@ -3567,7 +3567,7 @@ gl_renderer_setup_egl_extensions(struct weston_compositor *ec)
+ }
+
+ static const EGLint gl_renderer_opaque_attribs[] = {
+- EGL_SURFACE_TYPE, EGL_WINDOW_BIT,
++ EGL_SURFACE_TYPE, EGL_WINDOW_BIT | EGL_PBUFFER_BIT,
+ EGL_RED_SIZE, 1,
+ EGL_GREEN_SIZE, 1,
+ EGL_BLUE_SIZE, 1,
+@@ -3577,7 +3577,7 @@ static const EGLint gl_renderer_opaque_attribs[] = {
+ };
+
+ static const EGLint gl_renderer_alpha_attribs[] = {
+- EGL_SURFACE_TYPE, EGL_WINDOW_BIT,
++ EGL_SURFACE_TYPE, EGL_WINDOW_BIT | EGL_PBUFFER_BIT,
+ EGL_RED_SIZE, 1,
+ EGL_GREEN_SIZE, 1,
+ EGL_BLUE_SIZE, 1,
+@@ -3682,15 +3682,7 @@ static int
+ gl_renderer_create_pbuffer_surface(struct gl_renderer *gr) {
+ EGLConfig pbuffer_config;
+
+- static const EGLint pbuffer_config_attribs[] = {
+- EGL_SURFACE_TYPE, EGL_PBUFFER_BIT,
+- EGL_RED_SIZE, 1,
+- EGL_GREEN_SIZE, 1,
+- EGL_BLUE_SIZE, 1,
+- EGL_ALPHA_SIZE, 0,
+- EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
+- EGL_NONE
+- };
++ EGLint surface_type;
+
+ static const EGLint pbuffer_attribs[] = {
+ EGL_WIDTH, 10,
+@@ -3698,13 +3690,21 @@ gl_renderer_create_pbuffer_surface(struct gl_renderer *gr) {
+ EGL_NONE
+ };
+
+- if (egl_choose_config(gr, pbuffer_config_attribs, NULL, 0, &pbuffer_config) < 0) {
+- weston_log("failed to choose EGL config for PbufferSurface\n");
++ if(!eglGetConfigAttrib(gr->egl_display, gr->egl_config, EGL_SURFACE_TYPE, &surface_type)) {
++ weston_log("failed to get surface type for PbufferSurface\n");
++ return -1;
++ }
++
++ if (!((surface_type & EGL_WINDOW_BIT) && (surface_type & EGL_PBUFFER_BIT)) &&
++ !gr->has_configless_context) {
++ weston_log("attempted to use a different EGL config for an "
++ "output but EGL_KHR_no_config_context or "
++ "EGL_MESA_configless_context is not supported\n");
+ return -1;
+ }
+
+ gr->dummy_surface = eglCreatePbufferSurface(gr->egl_display,
+- pbuffer_config,
++ gr->egl_config,
+ pbuffer_attribs);
+
+ if (gr->dummy_surface == EGL_NO_SURFACE) {
+--
+2.7.4
+