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

