Allow to create textured pixmaps from gbm_bo without using gem names
This implements glamor_egl_create_textured_pixmap_from_gbm_bo, which is similar to glamor_egl_create_textured_pixmap, except it takes a gbm_bo as argument. Signed-off-by: Axel Davy <axel.davy@ens.fr> Reviewed-by: Zhigang Gong <zhigang.gong@linux.intel.com>
This commit is contained in:
parent
403004fe79
commit
a5321ea431
|
@ -230,6 +230,19 @@ extern _X_EXPORT Bool glamor_egl_create_textured_pixmap(PixmapPtr pixmap,
|
||||||
int handle,
|
int handle,
|
||||||
int stride);
|
int stride);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @glamor_egl_create_textured_pixmap_from_bo: Try to create a textured pixmap
|
||||||
|
* from a gbm_bo.
|
||||||
|
*
|
||||||
|
* @pixmap: The pixmap need to be processed.
|
||||||
|
* @bo: a pointer on a gbm_bo structure attached to this pixmap at DDX layer.
|
||||||
|
*
|
||||||
|
* This function is similar to glamor_egl_create_textured_pixmap.
|
||||||
|
*/
|
||||||
|
extern _X_EXPORT Bool
|
||||||
|
glamor_egl_create_textured_pixmap_from_gbm_bo(PixmapPtr pixmap,
|
||||||
|
void *bo);
|
||||||
|
|
||||||
extern _X_EXPORT void glamor_egl_destroy_textured_pixmap(PixmapPtr pixmap);
|
extern _X_EXPORT void glamor_egl_destroy_textured_pixmap(PixmapPtr pixmap);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -315,6 +315,40 @@ done:
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Bool
|
||||||
|
glamor_egl_create_textured_pixmap_from_gbm_bo(PixmapPtr pixmap, void *bo)
|
||||||
|
{
|
||||||
|
ScreenPtr screen = pixmap->drawable.pScreen;
|
||||||
|
ScrnInfoPtr scrn = xf86ScreenToScrn(screen);
|
||||||
|
struct glamor_egl_screen_private *glamor_egl;
|
||||||
|
EGLImageKHR image;
|
||||||
|
GLuint texture;
|
||||||
|
Bool ret = FALSE;
|
||||||
|
|
||||||
|
glamor_egl = glamor_egl_get_screen_private(scrn);
|
||||||
|
|
||||||
|
glamor_egl_make_current(screen);
|
||||||
|
|
||||||
|
image = glamor_egl->egl_create_image_khr(glamor_egl->display,
|
||||||
|
glamor_egl->context,
|
||||||
|
EGL_NATIVE_PIXMAP_KHR,
|
||||||
|
bo, NULL);
|
||||||
|
if (image == EGL_NO_IMAGE_KHR) {
|
||||||
|
glamor_set_pixmap_type(pixmap, GLAMOR_DRM_ONLY);
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
glamor_create_texture_from_image(glamor_egl, image, &texture);
|
||||||
|
glamor_set_pixmap_type(pixmap, GLAMOR_TEXTURE_DRM);
|
||||||
|
glamor_set_pixmap_texture(pixmap, texture);
|
||||||
|
dixSetPrivate(&pixmap->devPrivates, glamor_egl_pixmap_private_key,
|
||||||
|
image);
|
||||||
|
ret = TRUE;
|
||||||
|
|
||||||
|
done:
|
||||||
|
glamor_egl_restore_context(screen);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_glamor_egl_destroy_pixmap_image(PixmapPtr pixmap)
|
_glamor_egl_destroy_pixmap_image(PixmapPtr pixmap)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue
Block a user