On 06/27/2014 10:59 AM, Knut Andre Tidemann wrote:
v2: fix style and wrong major version comparison.
v3: fix version check in context creation.
---
  src/gallium/state_trackers/egl/common/egl_g3d.c     |  1 +
  src/gallium/state_trackers/egl/common/egl_g3d_api.c | 12 ++++++++++++
  2 files changed, 13 insertions(+)

diff --git a/src/gallium/state_trackers/egl/common/egl_g3d.c 
b/src/gallium/state_trackers/egl/common/egl_g3d.c
index d3f5e92..22b5e4a 100644
--- a/src/gallium/state_trackers/egl/common/egl_g3d.c
+++ b/src/gallium/state_trackers/egl/common/egl_g3d.c
@@ -584,6 +584,7 @@ egl_g3d_initialize(_EGLDriver *drv, _EGLDisplay *dpy)
     dpy->Extensions.KHR_fence_sync = EGL_TRUE;

     dpy->Extensions.KHR_surfaceless_context = EGL_TRUE;
+   dpy->Extensions.KHR_create_context = EGL_TRUE;

     if (dpy->Platform == _EGL_PLATFORM_DRM) {
        dpy->Extensions.MESA_drm_display = EGL_TRUE;
diff --git a/src/gallium/state_trackers/egl/common/egl_g3d_api.c 
b/src/gallium/state_trackers/egl/common/egl_g3d_api.c
index b19d899..5e900cc 100644
--- a/src/gallium/state_trackers/egl/common/egl_g3d_api.c
+++ b/src/gallium/state_trackers/egl/common/egl_g3d_api.c
@@ -72,6 +72,11 @@ egl_g3d_choose_st(_EGLDriver *drv, _EGLContext *ctx,
        break;
     case EGL_OPENGL_API:
        api = ST_API_OPENGL;
+      if (((ctx->ClientMajorVersion >= 4) ||
+            (ctx->ClientMajorVersion == 3 && ctx->ClientMinorVersion >= 2)) &&
+            ctx->Profile == EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT_KHR) {
+         *profile = ST_PROFILE_OPENGL_CORE;
+      }
        break;
     default:
        _eglLog(_EGL_WARNING, "unknown client API 0x%04x", ctx->ClientAPI);
@@ -166,6 +171,12 @@ egl_g3d_create_context(_EGLDriver *drv, _EGLDisplay *dpy, 
_EGLConfig *conf,
     if (gconf)
        stattribs.visual = gconf->stvis;

+   if (gctx->base.Flags & EGL_CONTEXT_OPENGL_DEBUG_BIT_KHR)
+      stattribs.flags = ST_CONTEXT_FLAG_DEBUG;
+
+   stattribs.major = gctx->base.ClientMajorVersion;
+   stattribs.minor = gctx->base.ClientMinorVersion;
+
     gctx->stapi = egl_g3d_choose_st(drv, &gctx->base, &stattribs.profile);
     if (!gctx->stapi) {
        FREE(gctx);
@@ -175,6 +186,7 @@ egl_g3d_create_context(_EGLDriver *drv, _EGLDisplay *dpy, 
_EGLConfig *conf,
     gctx->stctxi = gctx->stapi->create_context(gctx->stapi, gdpy->smapi,
           &stattribs, &ctx_err, (gshare) ? gshare->stctxi : NULL);
     if (!gctx->stctxi) {
+      _eglError(EGL_BAD_MATCH, "eglCreateContext");
        FREE(gctx);
        return NULL;
     }



Is there any interest in this? If not I would like to make a feature request as it is the only way to create a core context with EGL at the moment.

--
Knut Tidemann
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to