Revert ":evas: enable dynamic flag for zero copy texture upload in ector / Bind to... 26/63526/1
authorWonsik Jung <sidein@samsung.com>
Thu, 24 Mar 2016 10:41:00 +0000 (03:41 -0700)
committerWonsik Jung <sidein@samsung.com>
Thu, 24 Mar 2016 10:41:00 +0000 (03:41 -0700)
This reverts commit 1d7a1bc0a841eacc433369524f999ab331bd0365.

Change-Id: Iba5cea19ffccda72e30ac93c0de3e0d93e4fa035

src/lib/ector/software/ector_software_private.h
src/lib/ector/software/ector_software_rasterizer.c
src/lib/ector/software/ector_software_surface.c
src/lib/ector/software/ector_software_surface.eo [changed mode: 0755->0644]
src/lib/evas/canvas/evas_object_vg.c
src/modules/evas/engines/gl_common/evas_gl_common.h
src/modules/evas/engines/gl_common/evas_gl_context.c
src/modules/evas/engines/gl_common/evas_gl_texture.c
src/modules/evas/engines/gl_generic/evas_engine.c
src/modules/evas/engines/software_generic/evas_engine.c

index fdbdb5c..a4d1221 100644 (file)
@@ -52,7 +52,6 @@ typedef struct _Raster_Buffer
 {
    int            width;
    int            height;
-   int            stride;
    DATA32        *buffer;
 } Raster_Buffer;
 
index d5d0479..0cb74a0 100644 (file)
@@ -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)
           {
index 27fe0ae..0391150 100644 (file)
@@ -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 *
old mode 100755 (executable)
new mode 100644 (file)
index 375e158..bea11cd
@@ -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;
+        }
       }
    }
 
@@ -33,4 +32,3 @@ class Ector.Software.Surface (Ector.Generic.Surface)
       Eo.Base.constructor;
    }
 }
-
index 54e3a31..aff87f8 100644 (file)
@@ -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,
index 9a55282..a8785f7 100755 (executable)
@@ -680,10 +680,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);
index f3d89fa..df57edd 100755 (executable)
@@ -1145,7 +1145,8 @@ evas_gl_common_context_newframe(Evas_Engine_GL_Context *gc)
    if (gc->state.current.prog != PRG_INVALID)
      glUseProgram(gc->state.current.prog->prog);
 
-   evas_gl_common_texture_shared_back(gc, NULL);
+   glActiveTexture(GL_TEXTURE0);
+   glBindTexture(gc->pipe[0].shader.tex_target, gc->pipe[0].shader.cur_tex);
 
    _evas_gl_common_viewport_set(gc,1);
 }
@@ -2970,7 +2971,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)
           {
index 461c36b..9c31dda 100644 (file)
@@ -161,32 +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);
-        GLERR(__FUNCTION__, __FILE__, __LINE__, "");
-     }
-}
-
-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)
 {
@@ -977,8 +951,6 @@ void
 pt_unref(Evas_GL_Texture_Pool *pt)
 {
    if (!pt) return;
-   if (!pt->gc) return;
-
    pt->references--;
    if (pt->references != 0) return;
 
index b87132c..22570e7 100644 (file)
@@ -2447,16 +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;
@@ -2478,41 +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, void *context EINA_UNUSED, Ector_Surface *ector,
+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;
-
-   DATA32 *pixels;
-   int load_err;
-
-   glim = eng_image_data_get(data, glim, EINA_TRUE, &pixels, &load_err, EINA_TRUE);
-   eng_image_size_get(data, glim, &w, &h);
-   eng_image_stride_get(data, glim, &stride);
-   memset(pixels, 0, stride * h);
-
+   RGBA_Image *dst = glim->im;
+   w = dst->cache_entry.w;
+   h = dst->cache_entry.h;
+   void *pixels = evas_cache_image_pixels(&dst->cache_entry);
    if (use_cairo)
      {
         eo_do(ector,
@@ -2522,28 +2516,14 @@ eng_ector_begin(void *data, void *context EINA_UNUSED, Ector_Surface *ector,
    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));
      }
 }
 
 static void
-eng_ector_end(void *data, void *context EINA_UNUSED, Ector_Surface *ector, void *surface, Eina_Bool do_async EINA_UNUSED)
+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,
@@ -2552,7 +2532,7 @@ eng_ector_end(void *data, void *context EINA_UNUSED, Ector_Surface *ector, void
    else
      {
         eo_do(ector,
-              ector_software_surface_set(NULL, 0, 0, 0));
+              ector_software_surface_set(NULL, 0, 0));
      }
 }
 
index 3c0e5e4..e5c9505 100644 (file)
@@ -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();