From 34ce73badd4cc5084d42c1061a9035d4c6569d82 Mon Sep 17 00:00:00 2001 From: "Sung W. Park" Date: Fri, 12 Apr 2013 17:34:13 +0900 Subject: [PATCH] [Evas] Updated eglMap/UnmapImageSEC extension definition Recently Samsung specific eglMap/UnmapImageSEC has been updated to support new features. The extension definition was updated in evas accordingly. --- .../evas/engines/gl_common/evas_gl_api_ext_def.h | 4 ++-- .../evas/engines/gl_common/evas_gl_common.h | 16 ++++++++++++++-- .../evas/engines/gl_common/evas_gl_context.c | 4 ++-- .../evas/engines/gl_common/evas_gl_texture.c | 16 +++++++++++----- src/modules/evas/engines/gl_x11/evas_engine.c | 15 +++++++++------ .../evas/engines/wayland_egl/evas_engine.c | 11 +++++++---- 6 files changed, 45 insertions(+), 21 deletions(-) diff --git a/src/modules/evas/engines/gl_common/evas_gl_api_ext_def.h b/src/modules/evas/engines/gl_common/evas_gl_api_ext_def.h index ff63913100..a80f518e4b 100644 --- a/src/modules/evas/engines/gl_common/evas_gl_api_ext_def.h +++ b/src/modules/evas/engines/gl_common/evas_gl_api_ext_def.h @@ -558,10 +558,10 @@ _EVASGL_EXT_END() _EVASGL_EXT_BEGIN(EGL_SEC_map_image) _EVASGL_EXT_DRVNAME(EGL_SEC_map_image) - _EVASGL_EXT_FUNCTION_PRIVATE_BEGIN(void *, eglMapImageSEC, void *a, void *b)) + _EVASGL_EXT_FUNCTION_PRIVATE_BEGIN(void *, eglMapImageSEC, void *a, void *b, int c, int d)) _EVASGL_EXT_FUNCTION_DRVFUNC(GETPROCADDR("eglMapImageSEC")) _EVASGL_EXT_FUNCTION_PRIVATE_END() - _EVASGL_EXT_FUNCTION_PRIVATE_BEGIN(unsigned int, eglUnmapImageSEC, void *a, void *b)) + _EVASGL_EXT_FUNCTION_PRIVATE_BEGIN(unsigned int, eglUnmapImageSEC, void *a, void *b, int c)) _EVASGL_EXT_FUNCTION_DRVFUNC(GETPROCADDR("eglUnmapImageSEC")) _EVASGL_EXT_FUNCTION_PRIVATE_END() _EVASGL_EXT_END() diff --git a/src/modules/evas/engines/gl_common/evas_gl_common.h b/src/modules/evas/engines/gl_common/evas_gl_common.h index 70da52dba6..93c0b83159 100644 --- a/src/modules/evas/engines/gl_common/evas_gl_common.h +++ b/src/modules/evas/engines/gl_common/evas_gl_common.h @@ -113,6 +113,18 @@ #ifndef GL_WRITE_ONLY #define GL_WRITE_ONLY 0x88B9 #endif +#ifndef EGL_MAP_GL_TEXTURE_DEVICE_CPU_SEC +#define EGL_MAP_GL_TEXTURE_DEVICE_CPU_SEC 1 +#endif +#ifndef EGL_MAP_GL_TEXTURE_DEVICE_G2D_SEC +#define EGL_MAP_GL_TEXTURE_DEVICE_G2D_SEC 2 +#endif +#ifndef EGL_MAP_GL_TEXTURE_OPTION_READ_SEC +#define EGL_MAP_GL_TEXTURE_OPTION_READ_SEC (1<<0) +#endif +#ifndef EGL_MAP_GL_TEXTURE_OPTION_WRITE_SEC +#define EGL_MAP_GL_TEXTURE_OPTION_WRITE_SEC (1<<1) +#endif #define SHAD_VERTEX 0 #define SHAD_COLOR 1 @@ -671,8 +683,8 @@ extern GLboolean (*glsym_glUnmapBuffer) (GLenum a); extern void *(*secsym_eglCreateImage) (void *a, void *b, GLenum c, void *d, const int *e); extern unsigned int (*secsym_eglDestroyImage) (void *a, void *b); extern void (*secsym_glEGLImageTargetTexture2DOES) (int a, void *b); -extern void *(*secsym_eglMapImageSEC) (void *a, void *b); -extern unsigned int (*secsym_eglUnmapImageSEC) (void *a, void *b); +extern void *(*secsym_eglMapImageSEC) (void *a, void *b, int c, int d); +extern unsigned int (*secsym_eglUnmapImageSEC) (void *a, void *b, int c); extern unsigned int (*secsym_eglGetImageAttribSEC) (void *a, void *b, int c, int *d); #endif diff --git a/src/modules/evas/engines/gl_common/evas_gl_context.c b/src/modules/evas/engines/gl_common/evas_gl_context.c index 6668dcd504..30571b87e5 100644 --- a/src/modules/evas/engines/gl_common/evas_gl_context.c +++ b/src/modules/evas/engines/gl_common/evas_gl_context.c @@ -42,8 +42,8 @@ static const char *(*glsym_eglQueryString) (void *a, int name) = NUL void *(*secsym_eglCreateImage) (void *a, void *b, GLenum c, void *d, const int *e) = NULL; unsigned int (*secsym_eglDestroyImage) (void *a, void *b) = NULL; void (*secsym_glEGLImageTargetTexture2DOES) (int a, void *b) = NULL; -void *(*secsym_eglMapImageSEC) (void *a, void *b) = NULL; -unsigned int (*secsym_eglUnmapImageSEC) (void *a, void *b) = NULL; +void *(*secsym_eglMapImageSEC) (void *a, void *b, int c, int d) = NULL; +unsigned int (*secsym_eglUnmapImageSEC) (void *a, void *b, int c) = NULL; unsigned int (*secsym_eglGetImageAttribSEC) (void *a, void *b, int c, int *d) = NULL; #else typedef void (*_eng_fn) (void); diff --git a/src/modules/evas/engines/gl_common/evas_gl_texture.c b/src/modules/evas/engines/gl_common/evas_gl_texture.c index 52388d047f..e34f4bca63 100644 --- a/src/modules/evas/engines/gl_common/evas_gl_texture.c +++ b/src/modules/evas/engines/gl_common/evas_gl_texture.c @@ -656,7 +656,7 @@ evas_gl_texture_pool_empty(Evas_GL_Texture_Pool *pt) if (pt->dyn.img) { if (pt->dyn.checked_out > 0) - secsym_eglUnmapImageSEC(pt->gc->egldisp, pt->dyn.img); + secsym_eglUnmapImageSEC(pt->gc->egldisp, pt->dyn.img, EGL_MAP_GL_TEXTURE_DEVICE_CPU_SEC); secsym_eglDestroyImage(pt->gc->egldisp, pt->dyn.img); pt->dyn.img = NULL; pt->dyn.data = NULL; @@ -1455,7 +1455,10 @@ evas_gl_common_texture_nv12tiled_update(Evas_GL_Texture *tex, DATA8 **rows, unsi char *texture_addr; char *tmp; - texture_addr = secsym_eglMapImageSEC(tex->gc->egldisp, tex->pt->dyn.img); + texture_addr = secsym_eglMapImageSEC(tex->gc->egldisp, + tex->pt->dyn.img, + EGL_MAP_GL_TEXTURE_DEVICE_CPU_SEC, + EGL_MAP_GL_TEXTURE_OPTION_WRITE_SEC); /* Iterate each Y macroblock like we do in evas_convert_yuv.c */ for (mb_y = 0; mb_y < (mb_h >> 1); mb_y++) @@ -1510,9 +1513,12 @@ evas_gl_common_texture_nv12tiled_update(Evas_GL_Texture *tex, DATA8 **rows, unsi } } - secsym_eglUnmapImageSEC(tex->gc->egldisp, tex->pt->dyn.img); + secsym_eglUnmapImageSEC(tex->gc->egldisp, tex->pt->dyn.img, EGL_MAP_GL_TEXTURE_DEVICE_CPU_SEC); - texture_addr = secsym_eglMapImageSEC(tex->gc->egldisp, tex->ptuv->dyn.img); + texture_addr = secsym_eglMapImageSEC(tex->gc->egldisp, + tex->ptuv->dyn.img, + EGL_MAP_GL_TEXTURE_DEVICE_CPU_SEC, + EGL_MAP_GL_TEXTURE_OPTION_WRITE_SEC); /* Iterate each UV macroblock like we do in evas_convert_yuv.c */ base_h = (mb_h >> 1) + (mb_h & 0x1); @@ -1577,7 +1583,7 @@ evas_gl_common_texture_nv12tiled_update(Evas_GL_Texture *tex, DATA8 **rows, unsi } } - secsym_eglUnmapImageSEC(tex->gc->egldisp, tex->ptuv->dyn.img); + secsym_eglUnmapImageSEC(tex->gc->egldisp, tex->ptuv->dyn.img, EGL_MAP_GL_TEXTURE_DEVICE_CPU_SEC); return ; } #endif diff --git a/src/modules/evas/engines/gl_x11/evas_engine.c b/src/modules/evas/engines/gl_x11/evas_engine.c index 4bf8dcdb8a..b9678970ad 100644 --- a/src/modules/evas/engines/gl_x11/evas_engine.c +++ b/src/modules/evas/engines/gl_x11/evas_engine.c @@ -81,10 +81,10 @@ _eng_fn (*glsym_eglGetProcAddress) (const char *a) = NULL; void *(*glsym_eglCreateImage) (EGLDisplay a, EGLContext b, EGLenum c, EGLClientBuffer d, const int *e) = NULL; void (*glsym_eglDestroyImage) (EGLDisplay a, void *b) = NULL; void (*glsym_glEGLImageTargetTexture2DOES) (int a, void *b) = NULL; -void *(*glsym_eglMapImageSEC) (void *a, void *b) = NULL; -unsigned int (*glsym_eglUnmapImageSEC) (void *a, void *b) = NULL; -const char *(*glsym_eglQueryString) (EGLDisplay a, int name) = NULL; -void (*glsym_eglSwapBuffersRegion) (EGLDisplay a, void *b, EGLint c, const EGLint *d) = NULL; +void *(*glsym_eglMapImageSEC) (void *a, void *b, int c, int d) = NULL; +unsigned int (*glsym_eglUnmapImageSEC) (void *a, void *b, int c) = NULL; +const char *(*glsym_eglQueryString) (EGLDisplay a, int name) = NULL; +void (*glsym_eglSwapBuffersRegion) (EGLDisplay a, void *b, EGLint c, const EGLint *d) = NULL; #else @@ -2524,7 +2524,10 @@ eng_image_data_get(void *data, void *image, int to_write, DATA32 **image_data, i if (err) *err = EVAS_LOAD_ERROR_NONE; return im; } - *image_data = im->tex->pt->dyn.data = glsym_eglMapImageSEC(re->win->egl_disp, im->tex->pt->dyn.img); + *image_data = im->tex->pt->dyn.data = glsym_eglMapImageSEC(re->win->egl_disp, + im->tex->pt->dyn.img, + EGL_MAP_GL_TEXTURE_DEVICE_CPU_SEC, + EGL_MAP_GL_TEXTURE_OPTION_WRITE_SEC); if (!im->tex->pt->dyn.data) { @@ -2624,7 +2627,7 @@ eng_image_data_put(void *data, void *image, DATA32 *image_data) im->tex->pt->dyn.checked_out--; #ifdef GL_GLES if (im->tex->pt->dyn.checked_out == 0) - glsym_eglUnmapImageSEC(re->win->egl_disp, im->tex->pt->dyn.img); + glsym_eglUnmapImageSEC(re->win->egl_disp, im->tex->pt->dyn.img, EGL_MAP_GL_TEXTURE_DEVICE_CPU_SEC); #endif } diff --git a/src/modules/evas/engines/wayland_egl/evas_engine.c b/src/modules/evas/engines/wayland_egl/evas_engine.c index 85d4a1606a..776bdfb0bc 100644 --- a/src/modules/evas/engines/wayland_egl/evas_engine.c +++ b/src/modules/evas/engines/wayland_egl/evas_engine.c @@ -147,8 +147,8 @@ void *(*glsym_eglCreateImage) (EGLDisplay a, EGLContext b, EGLe void (*glsym_eglDestroyImage) (EGLDisplay a, void *b) = NULL; void (*glsym_glEGLImageTargetTexture2DOES) (int a, void *b) = NULL; void (*glsym_glEGLImageTargetRenderbufferStorageOES) (int a, void *b) = NULL; -void *(*glsym_eglMapImageSEC) (void *a, void *b) = NULL; -unsigned int (*glsym_eglUnmapImageSEC) (void *a, void *b) = NULL; +void *(*glsym_eglMapImageSEC) (void *a, void *b, int c, int d) = NULL; +unsigned int (*glsym_eglUnmapImageSEC) (void *a, void *b, int c) = NULL; const char *(*glsym_eglQueryString) (EGLDisplay a, int name) = NULL; unsigned int (*glsym_eglLockSurface) (EGLDisplay a, EGLSurface b, const int *attrib_list) = NULL; @@ -1718,7 +1718,10 @@ eng_image_data_get(void *data, void *image, int to_write, DATA32 **image_data, i if (err) *err = EVAS_LOAD_ERROR_NONE; return im; } - *image_data = im->tex->pt->dyn.data = glsym_eglMapImageSEC(re->win->egl_disp, im->tex->pt->dyn.img); + *image_data = im->tex->pt->dyn.data = glsym_eglMapImageSEC(re->win->egl_disp, + im->tex->pt->dyn.img, + EGL_MAP_GL_TEXTURE_DEVICE_CPU_SEC, + EGL_MAP_GL_TEXTURE_OPTION_WRITE_SEC); if (!im->tex->pt->dyn.data) { @@ -1807,7 +1810,7 @@ eng_image_data_put(void *data, void *image, DATA32 *image_data) { im->tex->pt->dyn.checked_out--; if (im->tex->pt->dyn.checked_out == 0) - glsym_eglUnmapImageSEC(re->win->egl_disp, im->tex->pt->dyn.img); + glsym_eglUnmapImageSEC(re->win->egl_disp, im->tex->pt->dyn.img, EGL_MAP_GL_TEXTURE_DEVICE_CPU_SEC); return image; }