VIGS/YaGL: gl_version property added
authorjinhyung.jo <jinhyung.jo@samsung.com>
Fri, 3 Jul 2015 11:36:10 +0000 (20:36 +0900)
committerjinhyung.jo <jinhyung.jo@samsung.com>
Mon, 6 Jul 2015 04:28:11 +0000 (13:28 +0900)
Modified to use the device property
instead of using the environment variable, GL_VERSION.

Change-Id: I16eaa1b5d4775bf45fe7eb38c6a980c031a55768
Signed-off-by: Jinhyung Jo <jinhyung.jo@samsung.com>
hw/vigs/vigs_backend.h
hw/vigs/vigs_device.c
hw/vigs/vigs_gl_backend_cgl.c
hw/vigs/vigs_gl_backend_glx.c
hw/vigs/vigs_gl_backend_wgl.c
hw/yagl/yagl_device.c
hw/yagl/yagl_drivers/egl_cgl/yagl_egl_cgl.c
hw/yagl/yagl_drivers/egl_glx/yagl_egl_glx.c
hw/yagl/yagl_drivers/egl_wgl/yagl_egl_wgl.c
hw/yagl/yagl_egl_driver.h

index bbbd90a..1aa6c16 100644 (file)
@@ -70,7 +70,8 @@ void vigs_backend_init(struct vigs_backend *backend,
 
 void vigs_backend_cleanup(struct vigs_backend *backend);
 
-struct vigs_backend *vigs_gl_backend_create(void *display);
+struct vigs_backend *vigs_gl_backend_create(void *display,
+                                            const char *gl_version);
 struct vigs_backend *vigs_sw_backend_create(void);
 
 #endif
index e2b02c4..9295b84 100644 (file)
@@ -61,6 +61,7 @@ typedef struct VIGSState
     char *render_queue;
     char *backend;
     char *wsi;
+    char *gl_version;
     MemoryRegion vram_bar;
     uint32_t vram_size;
 
@@ -457,7 +458,7 @@ static int vigs_device_init(PCIDevice *dev)
     pci_register_bar(&s->dev, 2, PCI_BASE_ADDRESS_SPACE_MEMORY, &s->io_bar);
 
     if (!strcmp(s->backend, "gl")) {
-        backend = vigs_gl_backend_create(dobj->dpy);
+        backend = vigs_gl_backend_create(dobj->dpy, s->gl_version);
     } else if (!strcmp(s->backend, "sw")) {
         backend = vigs_sw_backend_create();
     }
@@ -566,6 +567,7 @@ static Property vigs_properties[] = {
     DEFINE_PROP_STRING("render_queue", VIGSState, render_queue),
     DEFINE_PROP_STRING("backend", VIGSState, backend),
     DEFINE_PROP_STRING("wsi", VIGSState, wsi),
+    DEFINE_PROP_STRING("gl_version", VIGSState, gl_version),
     DEFINE_PROP_UINT32("vram_size", VIGSState, vram_size,
                        32 * 1024 * 1024),
     DEFINE_PROP_UINT32("ram_size", VIGSState, ram_size,
index db07be6..7a41d0a 100644 (file)
@@ -98,28 +98,26 @@ static const char *gl_3_2_check_funcs[] =
 };
 
 static bool vigs_gl_backend_cgl_check_gl_version(struct vigs_gl_backend_cgl *gl_backend_cgl,
+                                                 const char *gl_version,
                                                  bool *is_gl_2)
 {
     CGLError error;
     bool res = false;
-    const char *tmp;
     CGLPixelFormatObj pixel_format;
     int n;
     unsigned int i;
 
-    tmp = getenv("GL_VERSION");
-
-    if (tmp) {
-        if (strcmp(tmp, "2") == 0) {
+    if (gl_version) {
+        if (strcmp(gl_version, "2") == 0) {
             VIGS_LOG_INFO("GL_VERSION forces OpenGL version to 2.1");
             *is_gl_2 = true;
             res = true;
-        } else if (strcmp(tmp, "3_2") == 0) {
+        } else if (strcmp(gl_version, "3_2") == 0) {
             VIGS_LOG_INFO("GL_VERSION forces OpenGL version to 3.2");
             *is_gl_2 = false;
             res = true;
         } else {
-            VIGS_LOG_CRITICAL("Bad GL_VERSION value = %s", tmp);
+            VIGS_LOG_CRITICAL("Bad GL_VERSION value = %s", gl_version);
         }
 
         goto out;
@@ -250,7 +248,8 @@ static void vigs_gl_backend_cgl_destroy(struct vigs_backend *backend)
     VIGS_LOG_DEBUG("destroyed");
 }
 
-struct vigs_backend *vigs_gl_backend_create(void *display)
+struct vigs_backend *vigs_gl_backend_create(void *display,
+                                            const char *gl_version)
 {
     struct vigs_gl_backend_cgl *gl_backend_cgl;
     CGLError error;
@@ -330,6 +329,7 @@ struct vigs_backend *vigs_gl_backend_create(void *display)
     VIGS_GL_GET_PROC_OPTIONAL(MapBufferRange, glMapBufferRange);
 
     if (!vigs_gl_backend_cgl_check_gl_version(gl_backend_cgl,
+                                              gl_version,
                                               &gl_backend_cgl->base.is_gl_2)) {
         goto fail2;
     }
index fbba559..4014a83 100644 (file)
@@ -109,6 +109,7 @@ static const char *gl_3_2_check_funcs[] =
 };
 
 static bool vigs_gl_backend_glx_check_gl_version(struct vigs_gl_backend_glx *gl_backend_glx,
+                                                 const char *gl_version,
                                                  bool *is_gl_2)
 {
     int config_attribs[] =
@@ -134,33 +135,30 @@ static bool vigs_gl_backend_glx_check_gl_version(struct vigs_gl_backend_glx *gl_
         None
     };
     bool res = false;
-    const char *tmp;
     int n = 0;
     GLXFBConfig *configs = NULL;
     GLXContext ctx = NULL;
     unsigned int i;
 
-    tmp = getenv("GL_VERSION");
-
-    if (tmp) {
-        if (strcmp(tmp, "2") == 0) {
+    if (gl_version) {
+        if (strcmp(gl_version, "2") == 0) {
             VIGS_LOG_INFO("GL_VERSION forces OpenGL version to 2.1");
             *is_gl_2 = true;
             res = true;
-        } else if (strcmp(tmp, "3_1") == 0) {
+        } else if (strcmp(gl_version, "3_1") == 0) {
             VIGS_LOG_INFO("GL_VERSION forces OpenGL version to 3.1");
             *is_gl_2 = false;
             res = true;
-        } else if (strcmp(tmp, "3_1_es3") == 0) {
+        } else if (strcmp(gl_version, "3_1_es3") == 0) {
             VIGS_LOG_INFO("GL_VERSION forces OpenGL version to 3.1 ES3");
             *is_gl_2 = false;
             res = true;
-        } else if (strcmp(tmp, "3_2") == 0) {
+        } else if (strcmp(gl_version, "3_2") == 0) {
             VIGS_LOG_INFO("GL_VERSION forces OpenGL version to 3.2");
             *is_gl_2 = false;
             res = true;
         } else {
-            VIGS_LOG_CRITICAL("Bad GL_VERSION value = %s", tmp);
+            VIGS_LOG_CRITICAL("Bad GL_VERSION value = %s", gl_version);
         }
 
         goto out;
@@ -440,7 +438,8 @@ static void vigs_gl_backend_glx_destroy(struct vigs_backend *backend)
     VIGS_LOG_DEBUG("destroyed");
 }
 
-struct vigs_backend *vigs_gl_backend_create(void *display)
+struct vigs_backend *vigs_gl_backend_create(void *display,
+                                            const char *gl_version)
 {
     struct vigs_gl_backend_glx *gl_backend_glx;
     GLXFBConfig config;
@@ -544,6 +543,7 @@ struct vigs_backend *vigs_gl_backend_create(void *display)
     gl_backend_glx->dpy = x_display;
 
     if (!vigs_gl_backend_glx_check_gl_version(gl_backend_glx,
+                                              gl_version,
                                               &gl_backend_glx->base.is_gl_2)) {
         goto fail2;
     }
index 1d8add5..c4e34b7 100644 (file)
@@ -134,6 +134,7 @@ static const char *gl_3_2_check_funcs[] =
 };
 
 static bool vigs_gl_backend_wgl_check_gl_version(struct vigs_gl_backend_wgl *gl_backend_wgl,
+                                                 const char *gl_version,
                                                  bool *is_gl_2)
 {
     int config_attribs[] = {
@@ -159,7 +160,6 @@ static bool vigs_gl_backend_wgl_check_gl_version(struct vigs_gl_backend_wgl *gl_
         0
     };
     bool res = false;
-    const char *tmp;
     HWND win;
     HDC dc;
     int config_id = 0;
@@ -168,27 +168,25 @@ static bool vigs_gl_backend_wgl_check_gl_version(struct vigs_gl_backend_wgl *gl_
     HGLRC ctx;
     unsigned int i;
 
-    tmp = getenv("GL_VERSION");
-
-    if (tmp) {
-        if (strcmp(tmp, "2") == 0) {
+    if (gl_version) {
+        if (strcmp(gl_version, "2") == 0) {
             VIGS_LOG_INFO("GL_VERSION forces OpenGL version to 2.1");
             *is_gl_2 = true;
             res = true;
-        } else if (strcmp(tmp, "3_1") == 0) {
+        } else if (strcmp(gl_version, "3_1") == 0) {
             VIGS_LOG_INFO("GL_VERSION forces OpenGL version to 3.1");
             *is_gl_2 = false;
             res = true;
-        } else if (strcmp(tmp, "3_1_es3") == 0) {
+        } else if (strcmp(gl_version, "3_1_es3") == 0) {
             VIGS_LOG_INFO("GL_VERSION forces OpenGL version to 3.1 ES3");
             *is_gl_2 = false;
             res = true;
-        } else if (strcmp(tmp, "3_2") == 0) {
+        } else if (strcmp(gl_version, "3_2") == 0) {
             VIGS_LOG_INFO("GL_VERSION forces OpenGL version to 3.2");
             *is_gl_2 = false;
             res = true;
         } else {
-            VIGS_LOG_CRITICAL("Bad GL_VERSION value = %s", tmp);
+            VIGS_LOG_CRITICAL("Bad GL_VERSION value = %s", gl_version);
         }
 
         goto out1;
@@ -461,7 +459,8 @@ static void vigs_gl_backend_wgl_destroy(struct vigs_backend *backend)
     VIGS_LOG_DEBUG("destroyed");
 }
 
-struct vigs_backend *vigs_gl_backend_create(void *display)
+struct vigs_backend *vigs_gl_backend_create(void *display,
+                                            const char *gl_version)
 {
     WNDCLASSEXA vigs_win_class;
     HWND tmp_win = NULL;
@@ -646,6 +645,7 @@ struct vigs_backend *vigs_gl_backend_create(void *display)
     VIGS_GL_GET_PROC_OPTIONAL(MapBufferRange, glMapBufferRange);
 
     if (!vigs_gl_backend_wgl_check_gl_version(gl_backend_wgl,
+                                              gl_version,
                                               &gl_backend_wgl->base.is_gl_2)) {
         goto fail;
     }
index 60fbfc8..a2a3b50 100644 (file)
@@ -72,6 +72,7 @@ typedef struct YaGLState
     char *display;
     char *render_queue;
     char *wsi;
+    char *gl_version;
     MemoryRegion iomem;
     struct yagl_server_state *ss;
     struct yagl_user users[YAGL_MAX_USERS];
@@ -293,7 +294,7 @@ static int yagl_device_init(PCIDevice *dev)
 
     yagl_handle_gen_init();
 
-    egl_driver = yagl_egl_driver_create(dobj->dpy);
+    egl_driver = yagl_egl_driver_create(dobj->dpy, s->gl_version);
 
     if (!egl_driver) {
         goto fail;
@@ -399,6 +400,7 @@ static Property yagl_properties[] = {
     DEFINE_PROP_STRING("display", YaGLState, display),
     DEFINE_PROP_STRING("render_queue", YaGLState, render_queue),
     DEFINE_PROP_STRING("wsi", YaGLState, wsi),
+    DEFINE_PROP_STRING("gl_version", YaGLState, gl_version),
     DEFINE_PROP_END_OF_LIST(),
 };
 
index 3baf505..75b0462 100644 (file)
@@ -147,30 +147,28 @@ static CGLError yagl_egl_cgl_choose_pixel_format(const CGLPixelFormatAttribute p
 }
 
 static bool yagl_egl_cgl_get_gl_version(struct yagl_egl_cgl *egl_cgl,
+                                        const char *gl_version,
                                         yagl_gl_version *version)
 {
     CGLError error;
     bool res = false;
-    const char *tmp;
     CGLPixelFormatObj pixel_format;
     int n;
     unsigned int i;
 
     YAGL_LOG_FUNC_ENTER(yagl_egl_cgl_get_gl_version, NULL);
 
-    tmp = getenv("GL_VERSION");
-
-    if (tmp) {
-        if (strcmp(tmp, "2") == 0) {
+    if (gl_version) {
+        if (strcmp(gl_version, "2") == 0) {
             YAGL_LOG_INFO("GL_VERSION forces OpenGL version to 2.1");
             *version = yagl_gl_2;
             res = true;
-        } else if (strcmp(tmp, "3_2") == 0) {
+        } else if (strcmp(gl_version, "3_2") == 0) {
             YAGL_LOG_INFO("GL_VERSION forces OpenGL version to 3.2");
             *version = yagl_gl_3_2;
             res = true;
         } else {
-            YAGL_LOG_CRITICAL("Bad GL_VERSION value = %s", tmp);
+            YAGL_LOG_CRITICAL("Bad GL_VERSION value = %s", gl_version);
         }
 
         goto out;
@@ -510,7 +508,8 @@ static void yagl_egl_cgl_destroy(struct yagl_egl_driver *driver)
     YAGL_LOG_FUNC_EXIT(NULL);
 }
 
-struct yagl_egl_driver *yagl_egl_driver_create(void *display)
+struct yagl_egl_driver *yagl_egl_driver_create(void *display,
+                                               const char *gl_version)
 {
     CGLError error;
     struct yagl_egl_cgl *egl_cgl;
@@ -534,7 +533,9 @@ struct yagl_egl_driver *yagl_egl_driver_create(void *display)
         goto fail;
     }
 
-    if (!yagl_egl_cgl_get_gl_version(egl_cgl, &egl_cgl->base.gl_version)) {
+    if (!yagl_egl_cgl_get_gl_version(egl_cgl,
+                                     gl_version,
+                                     &egl_cgl->base.gl_version)) {
         goto fail;
     }
 
index 08afac4..9ce4bfd 100644 (file)
@@ -134,6 +134,7 @@ static const char *gl_3_2_check_funcs[] =
 };
 
 static bool yagl_egl_glx_get_gl_version(struct yagl_egl_glx *egl_glx,
+                                        const char *gl_version,
                                         yagl_gl_version *version)
 {
     int config_attribs[] =
@@ -174,7 +175,6 @@ static bool yagl_egl_glx_get_gl_version(struct yagl_egl_glx *egl_glx,
         None
     };
     bool res = false;
-    const char *tmp;
     int n = 0;
     GLXFBConfig *configs = NULL;
     GLXContext ctx = NULL;
@@ -186,27 +186,25 @@ static bool yagl_egl_glx_get_gl_version(struct yagl_egl_glx *egl_glx,
 
     YAGL_EGL_GLX_ENTER(yagl_egl_glx_get_gl_version, NULL);
 
-    tmp = getenv("GL_VERSION");
-
-    if (tmp) {
-        if (strcmp(tmp, "2") == 0) {
+    if (gl_version) {
+        if (strcmp(gl_version, "2") == 0) {
             YAGL_LOG_INFO("GL_VERSION forces OpenGL version to 2.1");
             *version = yagl_gl_2;
             res = true;
-        } else if (strcmp(tmp, "3_1") == 0) {
+        } else if (strcmp(gl_version, "3_1") == 0) {
             YAGL_LOG_INFO("GL_VERSION forces OpenGL version to 3.1");
             *version = yagl_gl_3_1;
             res = true;
-        } else if (strcmp(tmp, "3_1_es3") == 0) {
+        } else if (strcmp(gl_version, "3_1_es3") == 0) {
             YAGL_LOG_INFO("GL_VERSION forces OpenGL version to 3.1 ES3");
             *version = yagl_gl_3_1_es3;
             res = true;
-        } else if (strcmp(tmp, "3_2") == 0) {
+        } else if (strcmp(gl_version, "3_2") == 0) {
             YAGL_LOG_INFO("GL_VERSION forces OpenGL version to 3.2");
             *version = yagl_gl_3_2;
             res = true;
         } else {
-            YAGL_LOG_CRITICAL("Bad GL_VERSION value = %s", tmp);
+            YAGL_LOG_CRITICAL("Bad GL_VERSION value = %s", gl_version);
         }
 
         goto out;
@@ -284,7 +282,7 @@ static bool yagl_egl_glx_get_gl_version(struct yagl_egl_glx *egl_glx,
     GetIntegerv(GL_NUM_EXTENSIONS, &num_extensions);
 
     for (i = 0; i < num_extensions; ++i) {
-        tmp = (const char*)GetStringi(GL_EXTENSIONS, i);
+        const char *tmp = (const char *)GetStringi(GL_EXTENSIONS, i);
         if (strcmp(tmp, "GL_ARB_ES3_compatibility") == 0) {
             YAGL_LOG_INFO("GL_ARB_ES3_compatibility supported, using OpenGL 3.1 ES3");
             *version = yagl_gl_3_1_es3;
@@ -729,7 +727,8 @@ static void yagl_egl_glx_destroy(struct yagl_egl_driver *driver)
     YAGL_LOG_FUNC_EXIT(NULL);
 }
 
-struct yagl_egl_driver *yagl_egl_driver_create(void *display)
+struct yagl_egl_driver *yagl_egl_driver_create(void *display,
+                                               const char *gl_version)
 {
     struct yagl_egl_driver *egl_driver;
     struct yagl_egl_glx *egl_glx;
@@ -805,7 +804,9 @@ struct yagl_egl_driver *yagl_egl_driver_create(void *display)
     /* GLX_ARB_create_context */
     YAGL_EGL_GLX_GET_PROC(PFNGLXCREATECONTEXTATTRIBSARBPROC, glXCreateContextAttribsARB);
 
-    if (!yagl_egl_glx_get_gl_version(egl_glx, &egl_glx->base.gl_version)) {
+    if (!yagl_egl_glx_get_gl_version(egl_glx,
+                                     gl_version,
+                                     &egl_glx->base.gl_version)) {
         goto fail;
     }
 
index 0c6ca47..ca64baa 100644 (file)
@@ -137,6 +137,7 @@ static const char *gl_3_2_check_funcs[] =
 };
 
 static bool yagl_egl_wgl_get_gl_version(YaglEglWglDriver *egl_wgl,
+                                        const char *gl_version,
                                         yagl_gl_version *version)
 {
     int config_attribs[] = {
@@ -176,7 +177,6 @@ static bool yagl_egl_wgl_get_gl_version(YaglEglWglDriver *egl_wgl,
         0
     };
     bool res = false;
-    const char *tmp;
     HWND win;
     HDC dc;
     int config_id = 0;
@@ -192,27 +192,25 @@ static bool yagl_egl_wgl_get_gl_version(YaglEglWglDriver *egl_wgl,
 
     YAGL_EGL_WGL_ENTER(yagl_egl_wgl_get_gl_version, NULL);
 
-    tmp = getenv("GL_VERSION");
-
-    if (tmp) {
-        if (strcmp(tmp, "2") == 0) {
+    if (gl_version) {
+        if (strcmp(gl_version, "2") == 0) {
             YAGL_LOG_INFO("GL_VERSION forces OpenGL version to 2.1");
             *version = yagl_gl_2;
             res = true;
-        } else if (strcmp(tmp, "3_1") == 0) {
+        } else if (strcmp(gl_version, "3_1") == 0) {
             YAGL_LOG_INFO("GL_VERSION forces OpenGL version to 3.1");
             *version = yagl_gl_3_1;
             res = true;
-        } else if (strcmp(tmp, "3_1_es3") == 0) {
+        } else if (strcmp(gl_version, "3_1_es3") == 0) {
             YAGL_LOG_INFO("GL_VERSION forces OpenGL version to 3.1 ES3");
             *version = yagl_gl_3_1_es3;
             res = true;
-        } else if (strcmp(tmp, "3_2") == 0) {
+        } else if (strcmp(gl_version, "3_2") == 0) {
             YAGL_LOG_INFO("GL_VERSION forces OpenGL version to 3.2");
             *version = yagl_gl_3_2;
             res = true;
         } else {
-            YAGL_LOG_CRITICAL("Bad GL_VERSION value = %s", tmp);
+            YAGL_LOG_CRITICAL("Bad GL_VERSION value = %s", gl_version);
         }
 
         goto out1;
@@ -320,7 +318,7 @@ static bool yagl_egl_wgl_get_gl_version(YaglEglWglDriver *egl_wgl,
     GetIntegerv(GL_NUM_EXTENSIONS, &num_extensions);
 
     for (i = 0; i < num_extensions; ++i) {
-        tmp = (const char*)GetStringi(GL_EXTENSIONS, i);
+        const char *tmp = (const char *)GetStringi(GL_EXTENSIONS, i);
         if (strcmp(tmp, "GL_ARB_ES3_compatibility") == 0) {
             YAGL_LOG_INFO("GL_ARB_ES3_compatibility supported, using OpenGL 3.1 ES3");
             *version = yagl_gl_3_1_es3;
@@ -1132,7 +1130,8 @@ out:
     return ext_initialized;
 }
 
-struct yagl_egl_driver *yagl_egl_driver_create(void *display)
+struct yagl_egl_driver *yagl_egl_driver_create(void *display,
+                                               const char *gl_version)
 {
     YaglEglWglDriver *egl_wgl;
     struct yagl_egl_driver *egl_driver;
@@ -1198,7 +1197,9 @@ struct yagl_egl_driver *yagl_egl_driver_create(void *display)
         goto fail;
     }
 
-    if (!yagl_egl_wgl_get_gl_version(egl_wgl, &egl_wgl->base.gl_version)) {
+    if (!yagl_egl_wgl_get_gl_version(egl_wgl,
+                                     gl_version,
+                                     &egl_wgl->base.gl_version)) {
         goto fail;
     }
 
index cbee5da..5c88636 100644 (file)
@@ -111,7 +111,8 @@ struct yagl_egl_driver
 /*
  * 'display' is Display* on linux and HWND on windows.
  */
-struct yagl_egl_driver *yagl_egl_driver_create(void *display);
+struct yagl_egl_driver *yagl_egl_driver_create(void *display,
+                                               const char *gl_version);
 
 void yagl_egl_driver_init(struct yagl_egl_driver *driver);
 void yagl_egl_driver_cleanup(struct yagl_egl_driver *driver);