From ff289445e1cf6e5d041bfc43c3b8ee9d959739bd Mon Sep 17 00:00:00 2001 From: sunghyun kim Date: Thu, 7 Apr 2016 19:11:02 -0700 Subject: [PATCH] Revert "evas: enable dynamic flag for zero copy texture upload in ector / Bind to TEXTURE_EXTERNAL for images with dynamic hint and tbm" This reverts commit 12ece5d958925f04dd8958819a36931fdc40adb6. Change-Id: Ie719b621b71744ca26fe56c37521b05709c79c44 --- src/lib/ector/software/ector_software_private.h | 1 - src/lib/ector/software/ector_software_rasterizer.c | 8 ++-- src/lib/ector/software/ector_software_surface.c | 18 +++------ src/lib/ector/software/ector_software_surface.eo | 29 +++++++------- src/lib/evas/canvas/evas_object_vg.c | 2 +- .../evas/engines/gl_common/evas_gl_common.h | 3 -- .../evas/engines/gl_common/evas_gl_context.c | 4 +- .../evas/engines/gl_common/evas_gl_texture.c | 31 +-------------- src/modules/evas/engines/gl_generic/evas_engine.c | 45 +++++++--------------- .../evas/engines/software_generic/evas_engine.c | 6 +-- 10 files changed, 44 insertions(+), 103 deletions(-) mode change 100755 => 100644 src/lib/ector/software/ector_software_surface.eo diff --git a/src/lib/ector/software/ector_software_private.h b/src/lib/ector/software/ector_software_private.h index fdbdb5c..a4d1221 100644 --- a/src/lib/ector/software/ector_software_private.h +++ b/src/lib/ector/software/ector_software_private.h @@ -52,7 +52,6 @@ typedef struct _Raster_Buffer { int width; int height; - int stride; DATA32 *buffer; } Raster_Buffer; diff --git a/src/lib/ector/software/ector_software_rasterizer.c b/src/lib/ector/software/ector_software_rasterizer.c index d5d0479..0cb74a0 100644 --- a/src/lib/ector/software/ector_software_rasterizer.c +++ b/src/lib/ector/software/ector_software_rasterizer.c @@ -23,11 +23,11 @@ _blend_color_argb(int count, const SW_FT_Span *spans, void *user_data) comp_func = ector_comp_func_solid_span_get(data->op, color); // move to the offset location - buffer = data->raster_buffer.buffer + ((data->raster_buffer.stride / 4) * data->offy + data->offx); + buffer = data->raster_buffer.buffer + ((data->raster_buffer.width * data->offy) + data->offx); while (count--) { - target = buffer + ((data->raster_buffer.stride / 4) * spans->y + spans->x); + target = buffer + ((data->raster_buffer.width * spans->y) + spans->x); comp_func(target, spans->len, color, spans->coverage); ++spans; } @@ -56,11 +56,11 @@ _blend_gradient(int count, const SW_FT_Span *spans, void *user_data) comp_func = ector_comp_func_span_get(data->op, data->mul_col, data->gradient->alpha); // move to the offset location - destbuffer = data->raster_buffer.buffer + ((data->raster_buffer.stride / 4) * data->offy + data->offx); + destbuffer = data->raster_buffer.buffer + ((data->raster_buffer.width * data->offy) + data->offx); while (count--) { - target = destbuffer + ((data->raster_buffer.stride / 4) * spans->y + spans->x); + target = destbuffer + ((data->raster_buffer.width * spans->y) + spans->x); length = spans->len; while (length) { diff --git a/src/lib/ector/software/ector_software_surface.c b/src/lib/ector/software/ector_software_surface.c index 6c33ae0..0391150 100644 --- a/src/lib/ector/software/ector_software_surface.c +++ b/src/lib/ector/software/ector_software_surface.c @@ -46,29 +46,21 @@ _ector_software_surface_context_get(Eo *obj EINA_UNUSED, void _ector_software_surface_surface_set(Eo *obj EINA_UNUSED, Ector_Software_Surface_Data *pd, - void *pixels, unsigned int width, - unsigned int height, unsigned int stride) + void *pixels, unsigned int width, unsigned int height) { pd->software->fill_data.raster_buffer.buffer = pixels; pd->software->fill_data.raster_buffer.width = width; pd->software->fill_data.raster_buffer.height = height; - pd->software->fill_data.raster_buffer.stride = stride; } void _ector_software_surface_surface_get(Eo *obj EINA_UNUSED, Ector_Software_Surface_Data *pd, - void **pixels, unsigned int *width, - unsigned int *height, unsigned int *stride) + void **pixels, unsigned int *width, unsigned int *height) { - if (pixels) - *pixels = pd->software->fill_data.raster_buffer.buffer; - if (width) - *width = pd->software->fill_data.raster_buffer.width; - if (height) - *height = pd->software->fill_data.raster_buffer.height; - if (stride) - *stride = pd->software->fill_data.raster_buffer.stride; + *pixels = pd->software->fill_data.raster_buffer.buffer; + *width = pd->software->fill_data.raster_buffer.width; + *height = pd->software->fill_data.raster_buffer.height; } static Eo * diff --git a/src/lib/ector/software/ector_software_surface.eo b/src/lib/ector/software/ector_software_surface.eo old mode 100755 new mode 100644 index 5d68e00..bea11cd --- a/src/lib/ector/software/ector_software_surface.eo +++ b/src/lib/ector/software/ector_software_surface.eo @@ -5,24 +5,23 @@ class Ector.Software.Surface (Ector.Generic.Surface) methods { @property context { set { - } - get { - } - values { - ctx: Software_Rasterizer *; - } + } + get { + } + values { + ctx: Software_Rasterizer *; + } } @property surface { set { - } - get { - } - values { - pixels: void *; - width: uint; - height: uint; - stride: uint; - } + } + get { + } + values { + pixels: void *; + width: uint; + height: uint; + } } } diff --git a/src/lib/evas/canvas/evas_object_vg.c b/src/lib/evas/canvas/evas_object_vg.c index 54e3a31..aff87f8 100644 --- a/src/lib/evas/canvas/evas_object_vg.c +++ b/src/lib/evas/canvas/evas_object_vg.c @@ -247,7 +247,7 @@ evas_object_vg_render(Evas_Object *eo_obj EINA_UNUSED, _evas_vg_render(obj, vd, output, context, vd->backing_store, vd->root, NULL,do_async); obj->layer->evas->engine.func->image_dirty_region(obj->layer->evas->engine.data.output, vd->backing_store, 0, 0, 0, 0); - obj->layer->evas->engine.func->ector_end(output, context, ector, vd->backing_store, do_async); + obj->layer->evas->engine.func->ector_end(output, context, ector, surface, do_async); } obj->layer->evas->engine.func->image_draw(output, context, surface, vd->backing_store, 0, 0, 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 f8426b8..dc1c352 100755 --- a/src/modules/evas/engines/gl_common/evas_gl_common.h +++ b/src/modules/evas/engines/gl_common/evas_gl_common.h @@ -668,9 +668,6 @@ void evas_gl_common_poly_draw(Evas_Engine_GL_Context *gc, Evas_GL_P void evas_gl_common_line_draw(Evas_Engine_GL_Context *gc, int x1, int y1, int x2, int y2); -void evas_gl_common_texture_shared_specific(Evas_Engine_GL_Context *gc, Evas_GL_Texture_Pool *pt, int i); -void evas_gl_common_texture_shared_back(Evas_Engine_GL_Context *gc, Evas_GL_Texture_Pool *pt); - extern void (*glsym_glGenFramebuffers) (GLsizei a, GLuint *b); extern void (*glsym_glBindFramebuffer) (GLenum a, GLuint b); extern void (*glsym_glFramebufferTexture2D) (GLenum a, GLenum b, GLenum c, GLuint d, GLint e); 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 266668b..d57d094 100755 --- a/src/modules/evas/engines/gl_common/evas_gl_context.c +++ b/src/modules/evas/engines/gl_common/evas_gl_context.c @@ -1156,7 +1156,7 @@ evas_gl_common_context_newframe(Evas_Engine_GL_Context *gc) else glUseProgram(gc->state.current.cur_prog); glActiveTexture(GL_TEXTURE0); - evas_gl_common_texture_shared_back(gc, NULL); + glBindTexture(gc->pipe[0].shader.tex_target, gc->pipe[0].shader.cur_tex); _evas_gl_common_viewport_set(gc,1); } @@ -3164,7 +3164,7 @@ shader_array_flush(Evas_Engine_GL_Context *gc) } #endif glActiveTexture(GL_TEXTURE0); - evas_gl_common_texture_shared_specific(gc, NULL, i); + glBindTexture(gc->pipe[i].shader.tex_target, gc->pipe[i].shader.cur_tex); } if (gc->pipe[i].array.im) { 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 0d44030..9c31dda 100644 --- a/src/modules/evas/engines/gl_common/evas_gl_texture.c +++ b/src/modules/evas/engines/gl_common/evas_gl_texture.c @@ -161,31 +161,6 @@ _evas_gl_texture_search_format(Eina_Bool alpha, Eina_Bool bgra, Evas_Colorspace return -1; } -void -evas_gl_common_texture_shared_specific(Evas_Engine_GL_Context *gc, Evas_GL_Texture_Pool *pt, int i) -{ - if (!pt || pt->texture != gc->pipe[i].shader.cur_tex) - { - if (gc->pipe[i].array.im) - { - if (gc->pipe[i].array.im->tex->pt->dyn.img) - gc->pipe[i].shader.tex_target = gc->pipe[i].array.im->tex->pt->dyn.target; - else - gc->pipe[i].shader.tex_target = gc->pipe[i].array.im->native.target; - } - else - gc->pipe[i].shader.tex_target = GL_TEXTURE_2D; - - glBindTexture(gc->pipe[i].shader.tex_target, gc->pipe[i].shader.cur_tex); - } -} - -void -evas_gl_common_texture_shared_back(Evas_Engine_GL_Context *gc, Evas_GL_Texture_Pool *pt) -{ - evas_gl_common_texture_shared_specific(gc, pt, 0); -} - static void _print_tex_count(void) { @@ -760,11 +735,7 @@ _pool_tex_dynamic_new(Evas_Engine_GL_Context *gc, int w, int h, int intformat, i _print_tex_count(); - if (gc->shared->info.sec_tbm_surface) - pt->dyn.target = GL_TEXTURE_EXTERNAL_OES; - else - pt->dyn.target = GL_TEXTURE_2D; - + pt->dyn.target = GL_TEXTURE_2D; glGenTextures(1, &(pt->texture)); glBindTexture(pt->dyn.target, pt->texture); diff --git a/src/modules/evas/engines/gl_generic/evas_engine.c b/src/modules/evas/engines/gl_generic/evas_engine.c index e2e30b5..22570e7 100644 --- a/src/modules/evas/engines/gl_generic/evas_engine.c +++ b/src/modules/evas/engines/gl_generic/evas_engine.c @@ -2447,17 +2447,15 @@ static void eng_ector_renderer_draw(void *data, void *context, void *surface, Ector_Renderer *renderer, Eina_Array *clips EINA_UNUSED, Eina_Bool do_async EINA_UNUSED) { Evas_GL_Image *glimg = surface; + RGBA_Image *img = glimg->im; Evas_Engine_GL_Context *gc; Render_Engine_GL_Generic *re = data; Eina_Array *c; Eina_Rectangle *r; - int w, h; - eng_image_size_get(data, glimg, &w, &h); //TODO handle, clips properly c = eina_array_new(1); - eina_array_push(c, eina_rectangle_new(0, 0, w, h)); - + eina_array_push(c, eina_rectangle_new(0, 0, img->cache_entry.w, img->cache_entry.h)); gc = re->window_gl_context_get(re->software.ob); gc->dc = context; @@ -2479,37 +2477,36 @@ eng_ector_surface_create(void *data, void *surface, int width, int height) if (!surface) { surface = eng_image_new_from_copied_data(data, width, height, NULL, EINA_TRUE, EVAS_COLORSPACE_ARGB8888); - //Use this hint for ZERO COPY texture upload. - eng_image_content_hint_set(data, surface, EVAS_IMAGE_CONTENT_HINT_DYNAMIC); } else { int cur_w , cur_h; glim = surface; - eng_image_size_get(data, glim, &cur_w, &cur_h); + cur_w = glim->im->cache_entry.w; + cur_h = glim->im->cache_entry.h; if (width != cur_w || height != cur_h) { eng_image_free(data, surface); surface = eng_image_new_from_copied_data(data, width, height, NULL, EINA_TRUE, EVAS_COLORSPACE_ARGB8888); - //Use this hint for ZERO COPY texture upload. - eng_image_content_hint_set(data, surface, EVAS_IMAGE_CONTENT_HINT_DYNAMIC); } } + // clear the buffer + glim = surface; + void *pixels = evas_cache_image_pixels(&glim->im->cache_entry); + memset(pixels, 0, width * height *4); + return surface; } static void eng_ector_begin(void *data EINA_UNUSED, void *context EINA_UNUSED, Ector_Surface *ector, void *surface, int x, int y, Eina_Bool do_async EINA_UNUSED) { - int w, h, stride; + int w, h; Evas_GL_Image *glim = surface; RGBA_Image *dst = glim->im; - + w = dst->cache_entry.w; + h = dst->cache_entry.h; void *pixels = evas_cache_image_pixels(&dst->cache_entry); - eng_image_stride_get(data, glim, &stride); - eng_image_size_get(data, glim, &w, &h); - memset(pixels, 0, stride * h); - if (use_cairo) { eo_do(ector, @@ -2519,7 +2516,7 @@ eng_ector_begin(void *data EINA_UNUSED, void *context EINA_UNUSED, Ector_Surface else { eo_do(ector, - ector_software_surface_set(pixels, w, h, stride), + ector_software_surface_set(pixels, w, h), ector_surface_reference_point_set(x, y)); } } @@ -2527,20 +2524,6 @@ eng_ector_begin(void *data EINA_UNUSED, void *context EINA_UNUSED, Ector_Surface static void eng_ector_end(void *data EINA_UNUSED, void *context EINA_UNUSED, Ector_Surface *ector, void *surface EINA_UNUSED, Eina_Bool do_async EINA_UNUSED) { - void *pixels = NULL; - if (use_cairo) - { - eo_do(ector, - ector_cairo_software_surface_get(&pixels, NULL, NULL)); - } - else - { - eo_do(ector, - ector_software_surface_get(&pixels, NULL, NULL, NULL)); - } - - eng_image_data_put(data, surface, pixels); - if (use_cairo) { eo_do(ector, @@ -2549,7 +2532,7 @@ eng_ector_end(void *data EINA_UNUSED, void *context EINA_UNUSED, Ector_Surface * else { eo_do(ector, - ector_software_surface_set(NULL, 0, 0, 0)); + ector_software_surface_set(NULL, 0, 0)); } } diff --git a/src/modules/evas/engines/software_generic/evas_engine.c b/src/modules/evas/engines/software_generic/evas_engine.c index 3c0e5e4..e5c9505 100644 --- a/src/modules/evas/engines/software_generic/evas_engine.c +++ b/src/modules/evas/engines/software_generic/evas_engine.c @@ -3877,7 +3877,7 @@ _draw_thread_ector_surface_set(void *data) else { eo_do(ector_surface->ector, - ector_software_surface_set(pixels, w, h, w * 4), + ector_software_surface_set(pixels, w, h), ector_surface_reference_point_set(x, y)); } @@ -3927,7 +3927,7 @@ eng_ector_begin(void *data EINA_UNUSED, void *context EINA_UNUSED, Ector_Surface else { eo_do(ector, - ector_software_surface_set(pixels, w, h, w * 4), + ector_software_surface_set(pixels, w, h), ector_surface_reference_point_set(x, y)); } } @@ -3958,7 +3958,7 @@ eng_ector_end(void *data EINA_UNUSED, void *context EINA_UNUSED, Ector_Surface * else { eo_do(ector, - ector_software_surface_set(NULL, 0, 0, 0)); + ector_software_surface_set(NULL, 0, 0)); } evas_common_cpu_end_opt(); -- 2.7.4