*/
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;
/**
* 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.
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)
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;
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);
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,