summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/gallium/include/state_tracker/st_api.h18
-rw-r--r--src/gallium/state_trackers/dri/common/dri_screen.c8
-rw-r--r--src/gallium/state_trackers/egl/common/egl_g3d_st.c15
-rw-r--r--src/mesa/state_tracker/st_manager.c4
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,