diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/gallium/include/state_tracker/st_api.h | 18 | ||||
-rw-r--r-- | src/gallium/state_trackers/dri/common/dri_screen.c | 8 | ||||
-rw-r--r-- | src/gallium/state_trackers/egl/common/egl_g3d_st.c | 15 | ||||
-rw-r--r-- | src/mesa/state_tracker/st_manager.c | 4 |
4 files changed, 27 insertions, 18 deletions
diff --git a/src/gallium/include/state_tracker/st_api.h b/src/gallium/include/state_tracker/st_api.h index e7efbf065f0..621bdae5c85 100644 --- a/src/gallium/include/state_tracker/st_api.h +++ b/src/gallium/include/state_tracker/st_api.h @@ -146,10 +146,6 @@ struct st_context_resource */ struct st_egl_image { - /* these fields are filled by the caller */ - struct st_context_iface *stctxi; - void *egl_image; - /* this is owned by the caller */ struct pipe_resource *texture; @@ -329,10 +325,22 @@ struct st_manager /** * Look up and return the info of an EGLImage. * + * This is used to implement for example EGLImageTargetTexture2DOES. + * The GLeglImageOES agrument of that call is passed directly to this + * function call and the information needed to access this is returned + * in the given struct out. + * + * @smapi: manager owning the caller context + * @stctx: caller context + * @egl_image: EGLImage that caller recived + * @out: return struct filled out with access information. + * * This function is optional. */ boolean (*get_egl_image)(struct st_manager *smapi, - struct st_egl_image *stimg); + struct st_context_iface *stctx, + void *egl_image, + struct st_egl_image *out); /** * Query an manager param. diff --git a/src/gallium/state_trackers/dri/common/dri_screen.c b/src/gallium/state_trackers/dri/common/dri_screen.c index 5decdb23b15..fa1a35deb32 100644 --- a/src/gallium/state_trackers/dri/common/dri_screen.c +++ b/src/gallium/state_trackers/dri/common/dri_screen.c @@ -314,15 +314,17 @@ dri_get_swap_info(__DRIdrawable * dPriv, __DRIswapInfo * sInfo) static boolean dri_get_egl_image(struct st_manager *smapi, - struct st_egl_image *stimg) + struct st_context_iface *stctxi, + void *egl_image, + struct st_egl_image *stimg) { struct dri_context *ctx = - (struct dri_context *)stimg->stctxi->st_manager_private; + (struct dri_context *)stctxi->st_manager_private; struct dri_screen *screen = dri_screen(ctx->sPriv); __DRIimage *img = NULL; if (screen->lookup_egl_image) { - img = screen->lookup_egl_image(ctx, stimg->egl_image); + img = screen->lookup_egl_image(ctx, egl_image); } if (!img) 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 2d459d5a6c9..cdf13140cb0 100644 --- a/src/gallium/state_trackers/egl/common/egl_g3d_st.c +++ b/src/gallium/state_trackers/egl/common/egl_g3d_st.c @@ -206,10 +206,11 @@ egl_g3d_destroy_st_apis(void) static boolean egl_g3d_st_manager_get_egl_image(struct st_manager *smapi, - struct st_egl_image *stimg) + void *egl_image, + struct st_egl_image *out) { struct egl_g3d_st_manager *gsmapi = egl_g3d_st_manager(smapi); - EGLImageKHR handle = (EGLImageKHR) stimg->egl_image; + EGLImageKHR handle = (EGLImageKHR) egl_image; _EGLImage *img; struct egl_g3d_image *gimg; @@ -224,11 +225,11 @@ egl_g3d_st_manager_get_egl_image(struct st_manager *smapi, gimg = egl_g3d_image(img); - stimg->texture = NULL; - pipe_resource_reference(&stimg->texture, gimg->texture); - stimg->face = gimg->face; - stimg->level = gimg->level; - stimg->zslice = gimg->zslice; + out->texture = NULL; + pipe_resource_reference(&out->texture, gimg->texture); + out->face = gimg->face; + out->level = gimg->level; + out->zslice = gimg->zslice; _eglUnlockMutex(&gsmapi->display->Mutex); diff --git a/src/mesa/state_tracker/st_manager.c b/src/mesa/state_tracker/st_manager.c index d7523e4941e..8c3dfb3f71f 100644 --- a/src/mesa/state_tracker/st_manager.c +++ b/src/mesa/state_tracker/st_manager.c @@ -756,9 +756,7 @@ st_manager_get_egl_image_surface(struct st_context *st, return NULL; memset(&stimg, 0, sizeof(stimg)); - stimg.stctxi = &st->iface; - stimg.egl_image = eglimg; - if (!smapi->get_egl_image(smapi, &stimg)) + if (!smapi->get_egl_image(smapi, &st->iface, eglimg, &stimg)) return NULL; ps = smapi->screen->get_tex_surface(smapi->screen, |