From: jinhyung.jo Date: Fri, 3 Jul 2015 11:36:10 +0000 (+0900) Subject: VIGS/YaGL: gl_version property added X-Git-Tag: TizenStudio_2.0_p3.0~97 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=fa9eafde5ed0c25dd861891a657433247ad3b86a;p=sdk%2Femulator%2Fqemu.git VIGS/YaGL: gl_version property added Modified to use the device property instead of using the environment variable, GL_VERSION. Change-Id: I16eaa1b5d4775bf45fe7eb38c6a980c031a55768 Signed-off-by: Jinhyung Jo --- diff --git a/hw/vigs/vigs_backend.h b/hw/vigs/vigs_backend.h index bbbd90a..1aa6c16 100644 --- a/hw/vigs/vigs_backend.h +++ b/hw/vigs/vigs_backend.h @@ -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 diff --git a/hw/vigs/vigs_device.c b/hw/vigs/vigs_device.c index e2b02c4..9295b84 100644 --- a/hw/vigs/vigs_device.c +++ b/hw/vigs/vigs_device.c @@ -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, diff --git a/hw/vigs/vigs_gl_backend_cgl.c b/hw/vigs/vigs_gl_backend_cgl.c index db07be6..7a41d0a 100644 --- a/hw/vigs/vigs_gl_backend_cgl.c +++ b/hw/vigs/vigs_gl_backend_cgl.c @@ -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; } diff --git a/hw/vigs/vigs_gl_backend_glx.c b/hw/vigs/vigs_gl_backend_glx.c index fbba559..4014a83 100644 --- a/hw/vigs/vigs_gl_backend_glx.c +++ b/hw/vigs/vigs_gl_backend_glx.c @@ -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; } diff --git a/hw/vigs/vigs_gl_backend_wgl.c b/hw/vigs/vigs_gl_backend_wgl.c index 1d8add5..c4e34b7 100644 --- a/hw/vigs/vigs_gl_backend_wgl.c +++ b/hw/vigs/vigs_gl_backend_wgl.c @@ -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; } diff --git a/hw/yagl/yagl_device.c b/hw/yagl/yagl_device.c index 60fbfc8..a2a3b50 100644 --- a/hw/yagl/yagl_device.c +++ b/hw/yagl/yagl_device.c @@ -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(), }; diff --git a/hw/yagl/yagl_drivers/egl_cgl/yagl_egl_cgl.c b/hw/yagl/yagl_drivers/egl_cgl/yagl_egl_cgl.c index 3baf505..75b0462 100644 --- a/hw/yagl/yagl_drivers/egl_cgl/yagl_egl_cgl.c +++ b/hw/yagl/yagl_drivers/egl_cgl/yagl_egl_cgl.c @@ -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; } diff --git a/hw/yagl/yagl_drivers/egl_glx/yagl_egl_glx.c b/hw/yagl/yagl_drivers/egl_glx/yagl_egl_glx.c index 08afac4..9ce4bfd 100644 --- a/hw/yagl/yagl_drivers/egl_glx/yagl_egl_glx.c +++ b/hw/yagl/yagl_drivers/egl_glx/yagl_egl_glx.c @@ -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; } diff --git a/hw/yagl/yagl_drivers/egl_wgl/yagl_egl_wgl.c b/hw/yagl/yagl_drivers/egl_wgl/yagl_egl_wgl.c index 0c6ca47..ca64baa 100644 --- a/hw/yagl/yagl_drivers/egl_wgl/yagl_egl_wgl.c +++ b/hw/yagl/yagl_drivers/egl_wgl/yagl_egl_wgl.c @@ -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; } diff --git a/hw/yagl/yagl_egl_driver.h b/hw/yagl/yagl_egl_driver.h index cbee5da..5c88636 100644 --- a/hw/yagl/yagl_egl_driver.h +++ b/hw/yagl/yagl_egl_driver.h @@ -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);