mirror of
https://github.com/brl/mutter.git
synced 2024-12-23 11:32:04 +00:00
cogl/texture: Add EGLImage texture import flags
The flags are 'none', and 'no-get-data' meaning get_data() is not supported. https://gitlab.gnome.org/GNOME/mutter/merge_requests/687
This commit is contained in:
parent
e6c8939c30
commit
7868ab761f
@ -241,6 +241,7 @@ cogl_egl_texture_2d_new_from_image (CoglContext *ctx,
|
|||||||
int height,
|
int height,
|
||||||
CoglPixelFormat format,
|
CoglPixelFormat format,
|
||||||
EGLImageKHR image,
|
EGLImageKHR image,
|
||||||
|
CoglEglImageFlags flags,
|
||||||
GError **error)
|
GError **error)
|
||||||
{
|
{
|
||||||
CoglTextureLoader *loader;
|
CoglTextureLoader *loader;
|
||||||
@ -261,6 +262,7 @@ cogl_egl_texture_2d_new_from_image (CoglContext *ctx,
|
|||||||
loader->src.egl_image.width = width;
|
loader->src.egl_image.width = width;
|
||||||
loader->src.egl_image.height = height;
|
loader->src.egl_image.height = height;
|
||||||
loader->src.egl_image.format = format;
|
loader->src.egl_image.format = format;
|
||||||
|
loader->src.egl_image.flags = flags;
|
||||||
|
|
||||||
tex = _cogl_texture_2d_create_base (ctx, width, height, format, loader);
|
tex = _cogl_texture_2d_create_base (ctx, width, height, format, loader);
|
||||||
|
|
||||||
|
@ -60,6 +60,12 @@ G_BEGIN_DECLS
|
|||||||
typedef struct _CoglTexture2D CoglTexture2D;
|
typedef struct _CoglTexture2D CoglTexture2D;
|
||||||
#define COGL_TEXTURE_2D(X) ((CoglTexture2D *)X)
|
#define COGL_TEXTURE_2D(X) ((CoglTexture2D *)X)
|
||||||
|
|
||||||
|
typedef enum _CoglEglImageFlags
|
||||||
|
{
|
||||||
|
COGL_EGL_IMAGE_FLAG_NONE = 0,
|
||||||
|
COGL_EGL_IMAGE_FLAG_NO_GET_DATA = 1 << 0,
|
||||||
|
} CoglEglImageFlags;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* cogl_texture_2d_get_gtype:
|
* cogl_texture_2d_get_gtype:
|
||||||
*
|
*
|
||||||
@ -219,6 +225,7 @@ cogl_egl_texture_2d_new_from_image (CoglContext *ctx,
|
|||||||
int height,
|
int height,
|
||||||
CoglPixelFormat format,
|
CoglPixelFormat format,
|
||||||
EGLImageKHR image,
|
EGLImageKHR image,
|
||||||
|
CoglEglImageFlags flags,
|
||||||
GError **error);
|
GError **error);
|
||||||
|
|
||||||
typedef gboolean (*CoglTexture2DEGLImageExternalAlloc) (CoglTexture2D *tex_2d,
|
typedef gboolean (*CoglTexture2DEGLImageExternalAlloc) (CoglTexture2D *tex_2d,
|
||||||
|
@ -182,6 +182,7 @@ typedef struct _CoglTextureLoader
|
|||||||
int width;
|
int width;
|
||||||
int height;
|
int height;
|
||||||
CoglPixelFormat format;
|
CoglPixelFormat format;
|
||||||
|
CoglEglImageFlags flags;
|
||||||
} egl_image;
|
} egl_image;
|
||||||
#endif
|
#endif
|
||||||
#if defined (COGL_HAS_EGL_SUPPORT)
|
#if defined (COGL_HAS_EGL_SUPPORT)
|
||||||
|
@ -320,6 +320,8 @@ allocate_from_egl_image (CoglTexture2D *tex_2d,
|
|||||||
}
|
}
|
||||||
|
|
||||||
tex_2d->internal_format = internal_format;
|
tex_2d->internal_format = internal_format;
|
||||||
|
tex_2d->is_get_data_supported =
|
||||||
|
!(loader->src.egl_image.flags & COGL_EGL_IMAGE_FLAG_NO_GET_DATA);
|
||||||
|
|
||||||
_cogl_texture_set_allocated (tex,
|
_cogl_texture_set_allocated (tex,
|
||||||
internal_format,
|
internal_format,
|
||||||
|
@ -801,6 +801,7 @@ _cogl_winsys_texture_pixmap_x11_create (CoglTexturePixmapX11 *tex_pixmap)
|
|||||||
tex->height,
|
tex->height,
|
||||||
texture_format,
|
texture_format,
|
||||||
egl_tex_pixmap->image,
|
egl_tex_pixmap->image,
|
||||||
|
COGL_EGL_IMAGE_FLAG_NONE,
|
||||||
NULL));
|
NULL));
|
||||||
|
|
||||||
tex_pixmap->winsys = egl_tex_pixmap;
|
tex_pixmap->winsys = egl_tex_pixmap;
|
||||||
|
@ -1870,6 +1870,7 @@ copy_shared_framebuffer_primary_gpu (CoglOnscreen *onscre
|
|||||||
uint32_t offsets[1];
|
uint32_t offsets[1];
|
||||||
uint64_t modifiers[1];
|
uint64_t modifiers[1];
|
||||||
CoglPixelFormat cogl_format;
|
CoglPixelFormat cogl_format;
|
||||||
|
CoglEglImageFlags flags;
|
||||||
CoglTexture2D *cogl_tex;
|
CoglTexture2D *cogl_tex;
|
||||||
CoglOffscreen *cogl_fbo;
|
CoglOffscreen *cogl_fbo;
|
||||||
int ret;
|
int ret;
|
||||||
@ -1919,11 +1920,13 @@ copy_shared_framebuffer_primary_gpu (CoglOnscreen *onscre
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
flags = COGL_EGL_IMAGE_FLAG_NONE;
|
||||||
cogl_tex = cogl_egl_texture_2d_new_from_image (cogl_context,
|
cogl_tex = cogl_egl_texture_2d_new_from_image (cogl_context,
|
||||||
dumb_fb->width,
|
dumb_fb->width,
|
||||||
dumb_fb->height,
|
dumb_fb->height,
|
||||||
cogl_format,
|
cogl_format,
|
||||||
egl_image,
|
egl_image,
|
||||||
|
flags,
|
||||||
&error);
|
&error);
|
||||||
|
|
||||||
meta_egl_destroy_image (egl, egl_display, egl_image, NULL);
|
meta_egl_destroy_image (egl, egl_display, egl_image, NULL);
|
||||||
|
@ -289,6 +289,7 @@ egl_image_buffer_attach (MetaWaylandBuffer *buffer,
|
|||||||
int format, width, height, y_inverted;
|
int format, width, height, y_inverted;
|
||||||
CoglPixelFormat cogl_format;
|
CoglPixelFormat cogl_format;
|
||||||
EGLImageKHR egl_image;
|
EGLImageKHR egl_image;
|
||||||
|
CoglEglImageFlags flags;
|
||||||
CoglTexture2D *texture_2d;
|
CoglTexture2D *texture_2d;
|
||||||
|
|
||||||
if (buffer->egl_image.texture)
|
if (buffer->egl_image.texture)
|
||||||
@ -343,10 +344,12 @@ egl_image_buffer_attach (MetaWaylandBuffer *buffer,
|
|||||||
if (egl_image == EGL_NO_IMAGE_KHR)
|
if (egl_image == EGL_NO_IMAGE_KHR)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
|
flags = COGL_EGL_IMAGE_FLAG_NONE;
|
||||||
texture_2d = cogl_egl_texture_2d_new_from_image (cogl_context,
|
texture_2d = cogl_egl_texture_2d_new_from_image (cogl_context,
|
||||||
width, height,
|
width, height,
|
||||||
cogl_format,
|
cogl_format,
|
||||||
egl_image,
|
egl_image,
|
||||||
|
flags,
|
||||||
error);
|
error);
|
||||||
|
|
||||||
meta_egl_destroy_image (egl, egl_display, egl_image, NULL);
|
meta_egl_destroy_image (egl, egl_display, egl_image, NULL);
|
||||||
|
@ -79,6 +79,7 @@ meta_wayland_dma_buf_realize_texture (MetaWaylandBuffer *buffer,
|
|||||||
uint64_t modifiers[META_WAYLAND_DMA_BUF_MAX_FDS];
|
uint64_t modifiers[META_WAYLAND_DMA_BUF_MAX_FDS];
|
||||||
CoglPixelFormat cogl_format;
|
CoglPixelFormat cogl_format;
|
||||||
EGLImageKHR egl_image;
|
EGLImageKHR egl_image;
|
||||||
|
CoglEglImageFlags flags;
|
||||||
CoglTexture2D *texture;
|
CoglTexture2D *texture;
|
||||||
|
|
||||||
if (buffer->dma_buf.texture)
|
if (buffer->dma_buf.texture)
|
||||||
@ -134,11 +135,13 @@ meta_wayland_dma_buf_realize_texture (MetaWaylandBuffer *buffer,
|
|||||||
if (egl_image == EGL_NO_IMAGE_KHR)
|
if (egl_image == EGL_NO_IMAGE_KHR)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
|
flags = COGL_EGL_IMAGE_FLAG_NONE;
|
||||||
texture = cogl_egl_texture_2d_new_from_image (cogl_context,
|
texture = cogl_egl_texture_2d_new_from_image (cogl_context,
|
||||||
dma_buf->width,
|
dma_buf->width,
|
||||||
dma_buf->height,
|
dma_buf->height,
|
||||||
cogl_format,
|
cogl_format,
|
||||||
egl_image,
|
egl_image,
|
||||||
|
flags,
|
||||||
error);
|
error);
|
||||||
|
|
||||||
meta_egl_destroy_image (egl, egl_display, egl_image, NULL);
|
meta_egl_destroy_image (egl, egl_display, egl_image, NULL);
|
||||||
|
Loading…
Reference in New Issue
Block a user