From 776dc53f62c46e235ff8ef2e1eec1a308a036987 Mon Sep 17 00:00:00 2001 From: Chia-I Wu Date: Fri, 12 Mar 2010 09:56:11 +0800 Subject: [PATCH] st/egl: Implement get_egl_image hook. This hook may be used by rendering state trackers to implement EGLImage extensions. --- src/gallium/state_trackers/egl/common/egl_g3d_st.c | 32 ++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/src/gallium/state_trackers/egl/common/egl_g3d_st.c b/src/gallium/state_trackers/egl/common/egl_g3d_st.c index 6488965..9573ba0 100644 --- a/src/gallium/state_trackers/egl/common/egl_g3d_st.c +++ b/src/gallium/state_trackers/egl/common/egl_g3d_st.c @@ -85,6 +85,37 @@ egl_g3d_create_st_api(enum st_api_type api) return mod->create_api(); } +static boolean +egl_g3d_st_manager_get_egl_image(struct st_manager *smapi, + struct st_egl_image *stimg) +{ + struct egl_g3d_st_manager *gsmapi = egl_g3d_st_manager(smapi); + EGLImageKHR handle = (EGLImageKHR) stimg->egl_image; + _EGLImage *img; + struct egl_g3d_image *gimg; + + /* this is called from state trackers */ + _eglLockMutex(&gsmapi->display->Mutex); + + img = _eglLookupImage(handle, gsmapi->display); + if (!img) { + _eglUnlockMutex(&gsmapi->display->Mutex); + return FALSE; + } + + gimg = egl_g3d_image(img); + + stimg->texture = NULL; + pipe_texture_reference(&stimg->texture, gimg->texture); + stimg->face = gimg->face; + stimg->level = gimg->level; + stimg->zslice = gimg->zslice; + + _eglUnlockMutex(&gsmapi->display->Mutex); + + return TRUE; +} + struct st_manager * egl_g3d_create_st_manager(_EGLDisplay *dpy) { @@ -96,6 +127,7 @@ egl_g3d_create_st_manager(_EGLDisplay *dpy) gsmapi->display = dpy; gsmapi->base.screen = gdpy->native->screen; + gsmapi->base.get_egl_image = egl_g3d_st_manager_get_egl_image; } return &gsmapi->base;; -- 2.7.4