mirror of
https://git.yoctoproject.org/poky
synced 2026-04-30 21:32:13 +02:00
(From OE-Core rev: c58d3cb308e7e6fc3bad120019f257bf3834fa15) Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com> Signed-off-by: Saul Wold <sgw@linux.intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
268 lines
6.7 KiB
Diff
268 lines
6.7 KiB
Diff
From 453353a221de9c64479f4372565d2cd8591b36cc Mon Sep 17 00:00:00 2001
|
|
From: Frank Binns <frank.binns@imgtec.com>
|
|
Date: Fri, 29 Jun 2012 11:26:04 +0100
|
|
Subject: [PATCH 5/9] Fix build when EGL_MESA_screen_surface extension isn't
|
|
present
|
|
|
|
The EGL demos won't build against EGL implementations that don't support
|
|
the EGL_MESA_screen_surface extension. Fix this, in most cases, by
|
|
wrapping relevant bits of code in #ifdef EGL_MESA_screen_surface.
|
|
|
|
Signed-off-by: Frank Binns <frank.binns@imgtec.com>
|
|
|
|
Applied and fixed up in Yocto by...
|
|
|
|
Integrated-by: Tom Zanussi <tom.zanussi@linux.intel.com>
|
|
|
|
Upstream-Status: Pending
|
|
---
|
|
src/egl/eglut/eglut.c | 9 +++++++--
|
|
src/egl/eglut/eglut_screen.c | 14 ++++++++++++++
|
|
src/egl/opengl/demo1.c | 2 ++
|
|
src/egl/opengl/demo2.c | 7 ++++++-
|
|
src/egl/opengl/demo3.c | 7 ++++++-
|
|
5 files changed, 35 insertions(+), 4 deletions(-)
|
|
|
|
diff --git a/src/egl/eglut/eglut.c b/src/egl/eglut/eglut.c
|
|
index 2ee6f15..f6a2ad4 100644
|
|
--- a/src/egl/eglut/eglut.c
|
|
+++ b/src/egl/eglut/eglut.c
|
|
@@ -76,8 +76,9 @@ _eglutNow(void)
|
|
static void
|
|
_eglutDestroyWindow(struct eglut_window *win)
|
|
{
|
|
- if (_eglut->surface_type != EGL_PBUFFER_BIT &&
|
|
- _eglut->surface_type != EGL_SCREEN_BIT_MESA)
|
|
+
|
|
+ if (_eglut->surface_type == EGL_WINDOW_BIT ||
|
|
+ _eglut->surface_type == EGL_PIXMAP_BIT)
|
|
eglDestroySurface(_eglut->dpy, win->surface);
|
|
|
|
_eglutNativeFiniWindow(win);
|
|
@@ -175,7 +176,9 @@ _eglutCreateWindow(const char *title, int x, int y, int w, int h)
|
|
win->config, win->native.u.pixmap, NULL);
|
|
break;
|
|
case EGL_PBUFFER_BIT:
|
|
+#ifdef EGL_MESA_screen_surface
|
|
case EGL_SCREEN_BIT_MESA:
|
|
+#endif
|
|
win->surface = win->native.u.surface;
|
|
break;
|
|
default:
|
|
@@ -289,8 +292,10 @@ eglutDestroyWindow(int win)
|
|
if (window->index != win)
|
|
return;
|
|
|
|
+#ifdef EGL_MESA_screen_surface
|
|
/* XXX it causes some bug in st/egl KMS backend */
|
|
if ( _eglut->surface_type != EGL_SCREEN_BIT_MESA)
|
|
+#endif
|
|
eglMakeCurrent(_eglut->dpy, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
|
|
|
|
_eglutDestroyWindow(_eglut->current);
|
|
diff --git a/src/egl/eglut/eglut_screen.c b/src/egl/eglut/eglut_screen.c
|
|
index 021a8f1..094a4e2 100644
|
|
--- a/src/egl/eglut/eglut_screen.c
|
|
+++ b/src/egl/eglut/eglut_screen.c
|
|
@@ -35,26 +35,33 @@
|
|
|
|
#define MAX_MODES 100
|
|
|
|
+#ifdef EGL_MESA_screen_surface
|
|
static EGLScreenMESA kms_screen;
|
|
static EGLModeMESA kms_mode;
|
|
static EGLint kms_width, kms_height;
|
|
+#endif
|
|
|
|
void
|
|
_eglutNativeInitDisplay(void)
|
|
{
|
|
+#ifdef EGL_MESA_screen_surface
|
|
_eglut->native_dpy = EGL_DEFAULT_DISPLAY;
|
|
_eglut->surface_type = EGL_SCREEN_BIT_MESA;
|
|
+#endif
|
|
}
|
|
|
|
void
|
|
_eglutNativeFiniDisplay(void)
|
|
{
|
|
+#ifdef EGL_MESA_screen_surface
|
|
kms_screen = 0;
|
|
kms_mode = 0;
|
|
kms_width = 0;
|
|
kms_height = 0;
|
|
+#endif
|
|
}
|
|
|
|
+#ifdef EGL_MESA_screen_surface
|
|
static void
|
|
init_kms(void)
|
|
{
|
|
@@ -94,19 +101,23 @@ init_kms(void)
|
|
kms_width = width;
|
|
kms_height = height;
|
|
}
|
|
+#endif
|
|
|
|
void
|
|
_eglutNativeInitWindow(struct eglut_window *win, const char *title,
|
|
int x, int y, int w, int h)
|
|
{
|
|
+#ifdef EGL_MESA_screen_surface
|
|
EGLint surf_attribs[16];
|
|
EGLint i;
|
|
+#endif
|
|
const char *exts;
|
|
|
|
exts = eglQueryString(_eglut->dpy, EGL_EXTENSIONS);
|
|
if (!exts || !strstr(exts, "EGL_MESA_screen_surface"))
|
|
_eglutFatal("EGL_MESA_screen_surface is not supported\n");
|
|
|
|
+#ifdef EGL_MESA_screen_surface
|
|
init_kms();
|
|
|
|
i = 0;
|
|
@@ -128,14 +139,17 @@ _eglutNativeInitWindow(struct eglut_window *win, const char *title,
|
|
|
|
win->native.width = kms_width;
|
|
win->native.height = kms_height;
|
|
+#endif
|
|
}
|
|
|
|
void
|
|
_eglutNativeFiniWindow(struct eglut_window *win)
|
|
{
|
|
+#ifdef EGL_MESA_screen_surface
|
|
eglShowScreenSurfaceMESA(_eglut->dpy,
|
|
kms_screen, EGL_NO_SURFACE, 0);
|
|
eglDestroySurface(_eglut->dpy, win->native.u.surface);
|
|
+#endif
|
|
}
|
|
|
|
void
|
|
diff --git a/src/egl/opengl/demo1.c b/src/egl/opengl/demo1.c
|
|
index d892734..3a3564c 100644
|
|
--- a/src/egl/opengl/demo1.c
|
|
+++ b/src/egl/opengl/demo1.c
|
|
@@ -18,6 +18,7 @@
|
|
static void
|
|
TestScreens(EGLDisplay dpy)
|
|
{
|
|
+#ifdef EGL_MESA_screen_surface
|
|
#define MAX 8
|
|
EGLScreenMESA screens[MAX];
|
|
EGLint numScreens;
|
|
@@ -28,6 +29,7 @@ TestScreens(EGLDisplay dpy)
|
|
for (i = 0; i < numScreens; i++) {
|
|
printf(" Screen %d handle: %d\n", i, (int) screens[i]);
|
|
}
|
|
+#endif
|
|
}
|
|
|
|
/**
|
|
diff --git a/src/egl/opengl/demo2.c b/src/egl/opengl/demo2.c
|
|
index 505b474..bfef59e 100644
|
|
--- a/src/egl/opengl/demo2.c
|
|
+++ b/src/egl/opengl/demo2.c
|
|
@@ -16,6 +16,7 @@
|
|
|
|
/*#define FRONTBUFFER*/
|
|
|
|
+#ifdef EGL_MESA_screen_surface
|
|
static void _subset_Rectf(GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2,
|
|
GLfloat r, GLfloat g, GLfloat b)
|
|
{
|
|
@@ -95,12 +96,13 @@ TestScreens(EGLDisplay dpy)
|
|
printf(" Screen %d handle: %d\n", i, (int) screens[i]);
|
|
}
|
|
}
|
|
-
|
|
+#endif
|
|
|
|
int
|
|
main(int argc, char *argv[])
|
|
{
|
|
int maj, min;
|
|
+#ifdef EGL_MESA_screen_surface
|
|
EGLContext ctx;
|
|
EGLSurface pbuffer, screen_surf;
|
|
EGLConfig configs[10];
|
|
@@ -115,6 +117,7 @@ main(int argc, char *argv[])
|
|
EGLModeMESA mode;
|
|
EGLScreenMESA screen;
|
|
EGLint count;
|
|
+#endif
|
|
|
|
EGLDisplay d = eglGetDisplay(EGL_DEFAULT_DISPLAY);
|
|
assert(d);
|
|
@@ -132,6 +135,7 @@ main(int argc, char *argv[])
|
|
exit(1);
|
|
}
|
|
|
|
+#ifdef EGL_MESA_screen_surface
|
|
eglGetConfigs(d, configs, 10, &numConfigs);
|
|
printf("Got %d EGL configs:\n", numConfigs);
|
|
for (i = 0; i < numConfigs; i++) {
|
|
@@ -211,6 +215,7 @@ main(int argc, char *argv[])
|
|
eglDestroySurface(d, pbuffer);
|
|
eglDestroyContext(d, ctx);
|
|
eglTerminate(d);
|
|
+#endif
|
|
|
|
return 0;
|
|
}
|
|
diff --git a/src/egl/opengl/demo3.c b/src/egl/opengl/demo3.c
|
|
index f84ca23..31b5d8b 100644
|
|
--- a/src/egl/opengl/demo3.c
|
|
+++ b/src/egl/opengl/demo3.c
|
|
@@ -46,7 +46,7 @@ GLubyte OpenGL_bits[] = {
|
|
0x3e, 0x00, 0x00, 0xf8, 0x0c, 0x00,
|
|
};
|
|
|
|
-
|
|
+#ifdef EGL_MESA_screen_surface
|
|
static void Init(void)
|
|
{
|
|
|
|
@@ -551,11 +551,13 @@ write_ppm(const char *filename, const GLubyte *buffer, int width, int height)
|
|
fclose(f);
|
|
}
|
|
}
|
|
+#endif
|
|
|
|
int
|
|
main(int argc, char *argv[])
|
|
{
|
|
int maj, min;
|
|
+#ifdef EGL_MESA_screen_surface
|
|
EGLContext ctx;
|
|
EGLSurface screen_surf;
|
|
EGLConfig configs[10];
|
|
@@ -566,6 +568,7 @@ main(int argc, char *argv[])
|
|
const GLubyte *bitmap;
|
|
EGLint screenAttribs[32];
|
|
EGLint i;
|
|
+#endif
|
|
|
|
EGLDisplay d = eglGetDisplay(EGL_DEFAULT_DISPLAY);
|
|
assert(d);
|
|
@@ -583,6 +586,7 @@ main(int argc, char *argv[])
|
|
exit(1);
|
|
}
|
|
|
|
+#ifdef EGL_MESA_screen_surface
|
|
eglGetConfigs(d, configs, 10, &numConfigs);
|
|
eglGetScreensMESA(d, &screen, 1, &count);
|
|
eglGetModesMESA(d, screen, &mode, 1, &count);
|
|
@@ -642,6 +646,7 @@ main(int argc, char *argv[])
|
|
eglDestroySurface(d, screen_surf);
|
|
eglDestroyContext(d, ctx);
|
|
eglTerminate(d);
|
|
+#endif
|
|
|
|
return 0;
|
|
}
|
|
--
|
|
2.0.0
|
|
|