summaryrefslogtreecommitdiff
path: root/src/gallium/state_trackers/egl/common/egl_g3d_api.c
diff options
context:
space:
mode:
authorChia-I Wu <olv@lunarg.com>2010-09-10 12:59:43 +0800
committerChia-I Wu <olv@lunarg.com>2010-09-10 15:44:11 +0800
commit948e3fa27ca9112b903a180d1a18c61cfb2928dc (patch)
tree80b9a684a2f12ed60a65757860203d2bff825fad /src/gallium/state_trackers/egl/common/egl_g3d_api.c
parent0cd480f07639ec9ee01424aaa3e0c900b2204d4f (diff)
st/egl: Use profiles to create OpenGL ES contexts.
Replace all uses of ST_API_OPENGL_ES{1,2} by profiles. Having 3 st_api's to provide OpenGL, OpenGL ES 1.1, and OpenGL ES 2.0 is not a sane abstraction, since all of them share glapi for current context/dispatch management.
Diffstat (limited to 'src/gallium/state_trackers/egl/common/egl_g3d_api.c')
-rw-r--r--src/gallium/state_trackers/egl/common/egl_g3d_api.c31
1 files changed, 19 insertions, 12 deletions
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 cda46b8c30..c0164daf9c 100644
--- a/src/gallium/state_trackers/egl/common/egl_g3d_api.c
+++ b/src/gallium/state_trackers/egl/common/egl_g3d_api.c
@@ -47,16 +47,21 @@ egl_g3d_choose_st(_EGLDriver *drv, _EGLContext *ctx,
enum st_profile_type *profile)
{
struct egl_g3d_driver *gdrv = egl_g3d_driver(drv);
- EGLint idx = -1;
+ struct st_api *stapi;
+ EGLint api = -1;
+
+ *profile = ST_PROFILE_DEFAULT;
switch (ctx->ClientAPI) {
case EGL_OPENGL_ES_API:
switch (ctx->ClientVersion) {
case 1:
- idx = ST_API_OPENGL_ES1;
+ api = ST_API_OPENGL;
+ *profile = ST_PROFILE_OPENGL_ES1;
break;
case 2:
- idx = ST_API_OPENGL_ES2;
+ api = ST_API_OPENGL;
+ *profile = ST_PROFILE_OPENGL_ES2;
break;
default:
_eglLog(_EGL_WARNING, "unknown client version %d",
@@ -65,29 +70,31 @@ egl_g3d_choose_st(_EGLDriver *drv, _EGLContext *ctx,
}
break;
case EGL_OPENVG_API:
- idx = ST_API_OPENVG;
+ api = ST_API_OPENVG;
break;
case EGL_OPENGL_API:
- idx = ST_API_OPENGL;
+ api = ST_API_OPENGL;
break;
default:
_eglLog(_EGL_WARNING, "unknown client API 0x%04x", ctx->ClientAPI);
break;
}
- switch (idx) {
- case ST_API_OPENGL_ES1:
- *profile = ST_PROFILE_OPENGL_ES1;
+ switch (api) {
+ case ST_API_OPENGL:
+ stapi = gdrv->loader->guess_gl_api(*profile);
break;
- case ST_API_OPENGL_ES2:
- *profile = ST_PROFILE_OPENGL_ES2;
+ case ST_API_OPENVG:
+ stapi = gdrv->loader->get_st_api(api);
break;
default:
- *profile = ST_PROFILE_DEFAULT;
+ stapi = NULL;
break;
}
+ if (stapi && !(stapi->profile_mask & (1 << *profile)))
+ stapi = NULL;
- return (idx >= 0) ? gdrv->loader->get_st_api(idx) : NULL;
+ return stapi;
}
static _EGLContext *