static boolean egl_g3d_st_manager_get_egl_image(struct st_manager *smapi, void *egl_image, struct st_egl_image *out) { struct egl_g3d_st_manager *gsmapi = egl_g3d_st_manager(smapi); EGLImageKHR handle = (EGLImageKHR) 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); out->texture = NULL; pipe_resource_reference(&out->texture, gimg->texture); out->level = gimg->level; out->layer = gimg->layer; _eglUnlockMutex(&gsmapi->display->Mutex); return TRUE; }
static __DRIimage * dri2_lookup_egl_image(__DRIcontext *context, void *image, void *data) { struct dri2_egl_context *dri2_ctx = data; _EGLDisplay *disp = dri2_ctx->base.Resource.Display; struct dri2_egl_image *dri2_img; _EGLImage *img; img = _eglLookupImage(image, disp); if (img == NULL) { _eglError(EGL_BAD_PARAMETER, "dri2_lookup_egl_image"); return NULL; } dri2_img = dri2_egl_image(image); return dri2_img->dri_image; }
__DRIimage * dri2_lookup_egl_image(__DRIscreen *screen, void *image, void *data) { _EGLDisplay *disp = data; struct dri2_egl_image *dri2_img; _EGLImage *img; (void) screen; img = _eglLookupImage(image, disp); if (img == NULL) { _eglError(EGL_BAD_PARAMETER, "dri2_lookup_egl_image"); return NULL; } dri2_img = dri2_egl_image(image); return dri2_img->dri_image; }
EGLBoolean EGLAPIENTRY eglExportDRMImageMESA(EGLDisplay dpy, EGLImageKHR image, EGLint *name, EGLint *handle, EGLint *stride) { _EGLDisplay *disp = _eglLockDisplay(dpy); _EGLImage *img = _eglLookupImage(image, disp); _EGLDriver *drv; EGLBoolean ret; _EGL_CHECK_DISPLAY(disp, EGL_FALSE, drv); assert(disp->Extensions.MESA_drm_image); if (!img) RETURN_EGL_ERROR(disp, EGL_BAD_PARAMETER, EGL_FALSE); ret = drv->API.ExportDRMImageMESA(drv, disp, img, name, handle, stride); RETURN_EGL_EVAL(disp, ret); }
EGLBoolean EGLAPIENTRY eglDestroyImageKHR(EGLDisplay dpy, EGLImageKHR image) { _EGLDisplay *disp = _eglLockDisplay(dpy); _EGLImage *img = _eglLookupImage(image, disp); _EGLDriver *drv; EGLBoolean ret; _EGL_CHECK_DISPLAY(disp, EGL_FALSE, drv); if (!disp->Extensions.KHR_image_base) RETURN_EGL_EVAL(disp, EGL_FALSE); if (!img) RETURN_EGL_ERROR(disp, EGL_BAD_PARAMETER, EGL_FALSE); _eglUnlinkImage(img); ret = drv->API.DestroyImageKHR(drv, disp, img); RETURN_EGL_EVAL(disp, ret); }