YaGL/VIGS: Use OpenGL 3.0 context instead of 2.1 28/13128/1
authorStanislav Vorobiov <s.vorobiov@samsung.com>
Fri, 18 Oct 2013 07:32:47 +0000 (11:32 +0400)
committerStanislav Vorobiov <s.vorobiov@samsung.com>
Fri, 18 Oct 2013 07:32:47 +0000 (11:32 +0400)
Change-Id: I514eb239da143feff1e4737bc2afa6ad3da93658

hw/vigs_gl_backend_glx.c
hw/yagl_drivers/egl_glx/yagl_egl_glx.c

index 4176072..b499abe 100644 (file)
@@ -52,11 +52,13 @@ struct vigs_gl_backend_glx
     PFNGLXGETFBCONFIGATTRIBPROC glXGetFBConfigAttrib;
     PFNGLXCREATEPBUFFERPROC glXCreatePbuffer;
     PFNGLXDESTROYPBUFFERPROC glXDestroyPbuffer;
-    PFNGLXCREATENEWCONTEXTPROC glXCreateNewContext;
     PFNGLXDESTROYCONTEXTPROC glXDestroyContext;
     PFNGLXMAKECONTEXTCURRENTPROC glXMakeContextCurrent;
     PFNGLXGETCURRENTCONTEXTPROC glXGetCurrentContext;
 
+    /* GLX_ARB_create_context */
+    PFNGLXCREATECONTEXTATTRIBSARBPROC glXCreateContextAttribsARB;
+
     Display *dpy;
     GLXPbuffer sfc;
     GLXContext ctx;
@@ -141,14 +143,22 @@ static bool vigs_gl_backend_glx_create_surface(struct vigs_gl_backend_glx *gl_ba
 static bool vigs_gl_backend_glx_create_context(struct vigs_gl_backend_glx *gl_backend_glx,
                                                GLXFBConfig config)
 {
-    gl_backend_glx->ctx = gl_backend_glx->glXCreateNewContext(gl_backend_glx->dpy,
-                                                              config,
-                                                              GLX_RGBA_TYPE,
-                                                              NULL,
-                                                              True);
+    int attribs[] =
+    {
+        GLX_CONTEXT_MAJOR_VERSION_ARB, 3,
+        GLX_CONTEXT_MINOR_VERSION_ARB, 0,
+        GLX_RENDER_TYPE, GLX_RGBA_TYPE,
+        None
+    };
+
+    gl_backend_glx->ctx = gl_backend_glx->glXCreateContextAttribsARB(gl_backend_glx->dpy,
+                                                                     config,
+                                                                     NULL,
+                                                                     True,
+                                                                     attribs);
 
     if (!gl_backend_glx->ctx) {
-        VIGS_LOG_CRITICAL("glXCreateNewContext failed");
+        VIGS_LOG_CRITICAL("glXCreateContextAttribsARB failed");
         return false;
     }
 
@@ -239,10 +249,10 @@ struct vigs_backend *vigs_gl_backend_create(void *display)
     VIGS_GLX_GET_PROC(PFNGLXGETFBCONFIGATTRIBPROC, glXGetFBConfigAttrib);
     VIGS_GLX_GET_PROC(PFNGLXCREATEPBUFFERPROC, glXCreatePbuffer);
     VIGS_GLX_GET_PROC(PFNGLXDESTROYPBUFFERPROC, glXDestroyPbuffer);
-    VIGS_GLX_GET_PROC(PFNGLXCREATENEWCONTEXTPROC, glXCreateNewContext);
     VIGS_GLX_GET_PROC(PFNGLXDESTROYCONTEXTPROC, glXDestroyContext);
     VIGS_GLX_GET_PROC(PFNGLXMAKECONTEXTCURRENTPROC, glXMakeContextCurrent);
     VIGS_GLX_GET_PROC(PFNGLXGETCURRENTCONTEXTPROC, glXGetCurrentContext);
+    VIGS_GLX_GET_PROC(PFNGLXCREATECONTEXTATTRIBSARBPROC, glXCreateContextAttribsARB);
 
     VIGS_GL_GET_PROC(GenTextures, glGenTextures);
     VIGS_GL_GET_PROC(DeleteTextures, glDeleteTextures);
index 7d35d45..eb0d2dc 100644 (file)
@@ -88,6 +88,9 @@ struct yagl_egl_glx
 
     /* GLX 1.4 or GLX_ARB_get_proc_address */
     PFNGLXGETPROCADDRESSPROC glXGetProcAddress;
+
+    /* GLX_ARB_create_context */
+    PFNGLXCREATECONTEXTATTRIBSARBPROC glXCreateContextAttribsARB;
 };
 
 /*
@@ -369,22 +372,29 @@ static EGLContext yagl_egl_glx_context_create(struct yagl_egl_driver *driver,
 {
     struct yagl_egl_glx *egl_glx = (struct yagl_egl_glx*)driver;
     GLXContext ctx;
+    int attribs[] =
+    {
+        GLX_CONTEXT_MAJOR_VERSION_ARB, 3,
+        GLX_CONTEXT_MINOR_VERSION_ARB, 0,
+        GLX_RENDER_TYPE, GLX_RGBA_TYPE,
+        None
+    };
 
     YAGL_EGL_GLX_ENTER(yagl_egl_glx_context_create,
                        "dpy = %p, share_context = %p",
                        dpy,
                        share_context);
 
-    ctx = egl_glx->glXCreateNewContext(dpy,
-                                       (GLXFBConfig)cfg->driver_data,
-                                       GLX_RGBA_TYPE,
-                                       ((share_context == EGL_NO_CONTEXT) ?
-                                           NULL
-                                         : (GLXContext)share_context),
-                                       True);
+    ctx = egl_glx->glXCreateContextAttribsARB(dpy,
+                                              (GLXFBConfig)cfg->driver_data,
+                                              ((share_context == EGL_NO_CONTEXT) ?
+                                                  NULL
+                                                : (GLXContext)share_context),
+                                              True,
+                                              attribs);
 
     if (!ctx) {
-        YAGL_LOG_ERROR("glXCreateNewContext failed");
+        YAGL_LOG_ERROR("glXCreateContextAttribsARB failed");
 
         YAGL_LOG_FUNC_EXIT(NULL);
 
@@ -524,6 +534,9 @@ struct yagl_egl_driver *yagl_egl_driver_create(void *display)
     YAGL_EGL_GLX_GET_PROC(PFNGLXCREATENEWCONTEXTPROC, glXCreateNewContext);
     YAGL_EGL_GLX_GET_PROC(PFNGLXMAKECONTEXTCURRENTPROC, glXMakeContextCurrent);
 
+    /* GLX_ARB_create_context */
+    YAGL_EGL_GLX_GET_PROC(PFNGLXCREATECONTEXTATTRIBSARBPROC, glXCreateContextAttribsARB);
+
     egl_glx->base.display_open = &yagl_egl_glx_display_open;
     egl_glx->base.display_close = &yagl_egl_glx_display_close;
     egl_glx->base.config_enum = &yagl_egl_glx_config_enum;