summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarsten Haitzler (Rasterman) <raster@rasterman.com>2020-06-02 11:39:06 +0100
committerCarsten Haitzler (Rasterman) <raster@rasterman.com>2020-06-04 12:09:06 +0100
commit7dbe886f58c6058146f63bdde5a9fe9ba8219b6e (patch)
tree83d9cdebda2aab76d19fa9aa3c52da8019702f32
parentd992a319a84a7f63831c7af0a4483e43d7cd6d12 (diff)
downloadefl-7dbe886f58c6058146f63bdde5a9fe9ba8219b6e.tar.gz
evas gl - tune gl engine to use a bit less cpu overhead
we have used a fair bit of cpu to avoid gpu overhead and this tunes the balance back a bit to throwing more at the gpu and less at the cpu by reducing the number of pipes and max vertex counts per pipe by default and only resetting pipe state vars if adding the first pipe member. @opt
-rw-r--r--src/modules/evas/engines/gl_common/evas_gl_common.h2
-rw-r--r--src/modules/evas/engines/gl_common/evas_gl_context.c777
2 files changed, 411 insertions, 368 deletions
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 44772620d0..5873b93fb6 100644
--- a/src/modules/evas/engines/gl_common/evas_gl_common.h
+++ b/src/modules/evas/engines/gl_common/evas_gl_common.h
@@ -165,7 +165,7 @@ struct _Evas_GL_Shared
#define DEF_CUTOUT 4096
#define MAX_PIPES 32
-#define DEF_PIPES 32
+#define DEF_PIPES 8
#define DEF_PIPES_SGX_540 24
#define DEF_PIPES_TEGRA_2 8
#define DEF_PIPES_TEGRA_3 24
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 40d9f98a22..30a3b46703 100644
--- a/src/modules/evas/engines/gl_common/evas_gl_context.c
+++ b/src/modules/evas/engines/gl_common/evas_gl_context.c
@@ -988,7 +988,7 @@ evas_gl_common_context_new(void)
&(shared->info.max_texture_units));
glGetIntegerv(GL_MAX_TEXTURE_SIZE,
&(shared->info.max_texture_size));
- shared->info.max_vertex_elements = 6 * 100000;
+ shared->info.max_vertex_elements = 6 * 100;
#ifdef GL_MAX_ELEMENTS_VERTICES
/* only applies to glDrawRangeElements. don't really need to get it.
glGetIntegerv(GL_MAX_ELEMENTS_VERTICES,
@@ -1847,14 +1847,13 @@ vertex_array_size_check(Evas_Engine_GL_Context *gc EINA_UNUSED, int pn EINA_UNUS
{
return 1;
// this fixup breaks for expedite test 32. why?
-/* for reference
+// for reference
if ((gc->pipe[pn].array.num + n) > gc->shared->info.max_vertex_elements)
{
shader_array_flush(gc);
return 0;
}
return 1;
- */
}
static int
@@ -1966,30 +1965,33 @@ evas_gl_common_context_line_push(Evas_Engine_GL_Context *gc,
0, 0, 0, 0, 0,
mask_smooth);
- gc->pipe[pn].region.type = SHD_LINE;
- gc->pipe[pn].shader.prog = prog;
- gc->pipe[pn].shader.cur_tex = 0;
- gc->pipe[pn].shader.cur_texm = mtexid;
- gc->pipe[pn].shader.blend = blend;
- gc->pipe[pn].shader.render_op = gc->dc->render_op;
- gc->pipe[pn].shader.clip = clip;
- gc->pipe[pn].shader.cx = cx;
- gc->pipe[pn].shader.cy = cy;
- gc->pipe[pn].shader.cw = cw;
- gc->pipe[pn].shader.ch = ch;
- gc->pipe[pn].shader.mask_smooth = mask_smooth;
-
- gc->pipe[pn].array.line = 1;
- gc->pipe[pn].array.anti_alias = gc->dc->anti_alias;
- gc->pipe[pn].array.use_vertex = 1;
- gc->pipe[pn].array.use_color = 1;
- gc->pipe[pn].array.use_texuv = 0;
- gc->pipe[pn].array.use_texuv2 = 0;
- gc->pipe[pn].array.use_texuv3 = 0;
- gc->pipe[pn].array.use_texa = 0;
- gc->pipe[pn].array.use_texsam = 0;
- gc->pipe[pn].array.use_masksam = (masksam != SHD_SAM11);
- gc->pipe[pn].array.use_mask = !!mtex;
+ if (gc->pipe[pn].array.num == 0)
+ {
+ gc->pipe[pn].region.type = SHD_LINE;
+ gc->pipe[pn].shader.prog = prog;
+ gc->pipe[pn].shader.cur_tex = 0;
+ gc->pipe[pn].shader.cur_texm = mtexid;
+ gc->pipe[pn].shader.blend = blend;
+ gc->pipe[pn].shader.render_op = gc->dc->render_op;
+ gc->pipe[pn].shader.clip = clip;
+ gc->pipe[pn].shader.cx = cx;
+ gc->pipe[pn].shader.cy = cy;
+ gc->pipe[pn].shader.cw = cw;
+ gc->pipe[pn].shader.ch = ch;
+ gc->pipe[pn].shader.mask_smooth = mask_smooth;
+
+ gc->pipe[pn].array.line = 1;
+ gc->pipe[pn].array.anti_alias = gc->dc->anti_alias;
+ gc->pipe[pn].array.use_vertex = 1;
+ gc->pipe[pn].array.use_color = 1;
+ gc->pipe[pn].array.use_texuv = 0;
+ gc->pipe[pn].array.use_texuv2 = 0;
+ gc->pipe[pn].array.use_texuv3 = 0;
+ gc->pipe[pn].array.use_texa = 0;
+ gc->pipe[pn].array.use_texsam = 0;
+ gc->pipe[pn].array.use_masksam = (masksam != SHD_SAM11);
+ gc->pipe[pn].array.use_mask = !!mtex;
+ }
pipe_region_expand(gc, pn, x, y, w, h);
PIPE_GROW(gc, pn, 2);
@@ -2031,29 +2033,31 @@ evas_gl_common_context_rectangle_push(Evas_Engine_GL_Context *gc,
EINA_FALSE,
0, 0, 0, 0, 0,
mask_smooth);
-
- gc->pipe[pn].region.type = SHD_RECT;
- gc->pipe[pn].shader.prog = prog;
- gc->pipe[pn].shader.cur_tex = 0;
- gc->pipe[pn].shader.cur_texm = mtexid;
- gc->pipe[pn].shader.blend = blend;
- gc->pipe[pn].shader.render_op = gc->dc->render_op;
- gc->pipe[pn].shader.mask_smooth = mask_smooth;
- gc->pipe[pn].shader.clip = 0;
- gc->pipe[pn].shader.cx = 0;
- gc->pipe[pn].shader.cy = 0;
- gc->pipe[pn].shader.cw = 0;
- gc->pipe[pn].shader.ch = 0;
- gc->pipe[pn].array.line = 0;
- gc->pipe[pn].array.use_vertex = 1;
- gc->pipe[pn].array.use_color = 1;
- gc->pipe[pn].array.use_texuv = 0;
- gc->pipe[pn].array.use_texuv2 = 0;
- gc->pipe[pn].array.use_texuv3 = 0;
- gc->pipe[pn].array.use_texa = 0;
- gc->pipe[pn].array.use_texsam = 0;
- gc->pipe[pn].array.use_masksam = (masksam != SHD_SAM11);
- gc->pipe[pn].array.use_mask = !!mtex;
+ if (gc->pipe[pn].array.num == 0)
+ {
+ gc->pipe[pn].region.type = SHD_RECT;
+ gc->pipe[pn].shader.prog = prog;
+ gc->pipe[pn].shader.cur_tex = 0;
+ gc->pipe[pn].shader.cur_texm = mtexid;
+ gc->pipe[pn].shader.blend = blend;
+ gc->pipe[pn].shader.render_op = gc->dc->render_op;
+ gc->pipe[pn].shader.mask_smooth = mask_smooth;
+ gc->pipe[pn].shader.clip = 0;
+ gc->pipe[pn].shader.cx = 0;
+ gc->pipe[pn].shader.cy = 0;
+ gc->pipe[pn].shader.cw = 0;
+ gc->pipe[pn].shader.ch = 0;
+ gc->pipe[pn].array.line = 0;
+ gc->pipe[pn].array.use_vertex = 1;
+ gc->pipe[pn].array.use_color = 1;
+ gc->pipe[pn].array.use_texuv = 0;
+ gc->pipe[pn].array.use_texuv2 = 0;
+ gc->pipe[pn].array.use_texuv3 = 0;
+ gc->pipe[pn].array.use_texa = 0;
+ gc->pipe[pn].array.use_texsam = 0;
+ gc->pipe[pn].array.use_masksam = (masksam != SHD_SAM11);
+ gc->pipe[pn].array.use_mask = !!mtex;
+ }
pipe_region_expand(gc, pn, x, y, w, h);
PIPE_GROW(gc, pn, 6);
@@ -2250,29 +2254,32 @@ evas_gl_common_context_image_push(Evas_Engine_GL_Context *gc,
0, 0, 0, 0, 0,
mask_smooth);
- gc->pipe[pn].region.type = SHD_IMAGE;
- gc->pipe[pn].shader.prog = prog;
- gc->pipe[pn].shader.cur_tex = pt->texture;
- gc->pipe[pn].shader.cur_texm = mtex ? mtex->pt->texture : 0;
- gc->pipe[pn].shader.tex_target = tex_target;
- gc->pipe[pn].shader.smooth = smooth;
- gc->pipe[pn].shader.mask_smooth = mask_smooth;
- gc->pipe[pn].shader.blend = blend;
- gc->pipe[pn].shader.render_op = render_op;
- gc->pipe[pn].shader.clip = 0;
- gc->pipe[pn].shader.cx = 0;
- gc->pipe[pn].shader.cy = 0;
- gc->pipe[pn].shader.cw = 0;
- gc->pipe[pn].shader.ch = 0;
- gc->pipe[pn].array.line = 0;
- gc->pipe[pn].array.use_vertex = 1;
- gc->pipe[pn].array.use_color = !nomul;
- gc->pipe[pn].array.use_texuv = 1;
- gc->pipe[pn].array.use_texuv2 = 0;
- gc->pipe[pn].array.use_texuv3 = 0;
- gc->pipe[pn].array.use_texsam = (sam != SHD_SAM11);
- gc->pipe[pn].array.use_mask = !!mtex;
- gc->pipe[pn].array.use_masksam = (masksam != SHD_SAM11);
+ if (gc->pipe[pn].array.num == 0)
+ {
+ gc->pipe[pn].region.type = SHD_IMAGE;
+ gc->pipe[pn].shader.prog = prog;
+ gc->pipe[pn].shader.cur_tex = pt->texture;
+ gc->pipe[pn].shader.cur_texm = mtex ? mtex->pt->texture : 0;
+ gc->pipe[pn].shader.tex_target = tex_target;
+ gc->pipe[pn].shader.smooth = smooth;
+ gc->pipe[pn].shader.mask_smooth = mask_smooth;
+ gc->pipe[pn].shader.blend = blend;
+ gc->pipe[pn].shader.render_op = render_op;
+ gc->pipe[pn].shader.clip = 0;
+ gc->pipe[pn].shader.cx = 0;
+ gc->pipe[pn].shader.cy = 0;
+ gc->pipe[pn].shader.cw = 0;
+ gc->pipe[pn].shader.ch = 0;
+ gc->pipe[pn].array.line = 0;
+ gc->pipe[pn].array.use_vertex = 1;
+ gc->pipe[pn].array.use_color = !nomul;
+ gc->pipe[pn].array.use_texuv = 1;
+ gc->pipe[pn].array.use_texuv2 = 0;
+ gc->pipe[pn].array.use_texuv3 = 0;
+ gc->pipe[pn].array.use_texsam = (sam != SHD_SAM11);
+ gc->pipe[pn].array.use_mask = !!mtex;
+ gc->pipe[pn].array.use_masksam = (masksam != SHD_SAM11);
+ }
pipe_region_expand(gc, pn, x, y, w, h);
PIPE_GROW(gc, pn, 6);
@@ -2452,28 +2459,31 @@ evas_gl_common_context_font_push(Evas_Engine_GL_Context *gc,
0, 0, 0, 0, 0,
mask_smooth);
- gc->pipe[pn].region.type = SHD_FONT;
- gc->pipe[pn].shader.prog = prog;
- gc->pipe[pn].shader.cur_tex = tex->pt->texture;
- gc->pipe[pn].shader.cur_texm = mtex ? mtex->pt->texture : 0;
- gc->pipe[pn].shader.smooth = 0;
- gc->pipe[pn].shader.blend = 1;
- gc->pipe[pn].shader.render_op = gc->dc->render_op;
- gc->pipe[pn].shader.mask_smooth = mask_smooth;
- gc->pipe[pn].shader.clip = 0;
- gc->pipe[pn].shader.cx = 0;
- gc->pipe[pn].shader.cy = 0;
- gc->pipe[pn].shader.cw = 0;
- gc->pipe[pn].shader.ch = 0;
- gc->pipe[pn].array.line = 0;
- gc->pipe[pn].array.use_vertex = 1;
- gc->pipe[pn].array.use_color = 1;
- gc->pipe[pn].array.use_texuv = 1;
- gc->pipe[pn].array.use_texuv2 = 0;
- gc->pipe[pn].array.use_texuv3 = 0;
- gc->pipe[pn].array.use_texsam = 0;
- gc->pipe[pn].array.use_mask = !!mtex;
- gc->pipe[pn].array.use_masksam = (masksam != SHD_SAM11);
+ if (gc->pipe[pn].array.num == 0)
+ {
+ gc->pipe[pn].region.type = SHD_FONT;
+ gc->pipe[pn].shader.prog = prog;
+ gc->pipe[pn].shader.cur_tex = tex->pt->texture;
+ gc->pipe[pn].shader.cur_texm = mtex ? mtex->pt->texture : 0;
+ gc->pipe[pn].shader.smooth = 0;
+ gc->pipe[pn].shader.blend = 1;
+ gc->pipe[pn].shader.render_op = gc->dc->render_op;
+ gc->pipe[pn].shader.mask_smooth = mask_smooth;
+ gc->pipe[pn].shader.clip = 0;
+ gc->pipe[pn].shader.cx = 0;
+ gc->pipe[pn].shader.cy = 0;
+ gc->pipe[pn].shader.cw = 0;
+ gc->pipe[pn].shader.ch = 0;
+ gc->pipe[pn].array.line = 0;
+ gc->pipe[pn].array.use_vertex = 1;
+ gc->pipe[pn].array.use_color = 1;
+ gc->pipe[pn].array.use_texuv = 1;
+ gc->pipe[pn].array.use_texuv2 = 0;
+ gc->pipe[pn].array.use_texuv3 = 0;
+ gc->pipe[pn].array.use_texsam = 0;
+ gc->pipe[pn].array.use_mask = !!mtex;
+ gc->pipe[pn].array.use_masksam = (masksam != SHD_SAM11);
+ }
pipe_region_expand(gc, pn, x, y, w, h);
PIPE_GROW(gc, pn, 6);
@@ -2532,30 +2542,33 @@ evas_gl_common_context_yuv_push(Evas_Engine_GL_Context *gc,
0, 0, 0, 0, 0,
mask_smooth);
- gc->pipe[pn].region.type = SHD_YUV;
- gc->pipe[pn].shader.prog = prog;
- gc->pipe[pn].shader.cur_tex = tex->pt->texture;
- gc->pipe[pn].shader.cur_texu = tex->ptu->texture;
- gc->pipe[pn].shader.cur_texv = tex->ptv->texture;
- gc->pipe[pn].shader.cur_texm = mtex ? mtex->pt->texture : 0;
- gc->pipe[pn].shader.smooth = smooth;
- gc->pipe[pn].shader.blend = blend;
- gc->pipe[pn].shader.render_op = gc->dc->render_op;
- gc->pipe[pn].shader.mask_smooth = mask_smooth;
- gc->pipe[pn].shader.clip = 0;
- gc->pipe[pn].shader.cx = 0;
- gc->pipe[pn].shader.cy = 0;
- gc->pipe[pn].shader.cw = 0;
- gc->pipe[pn].shader.ch = 0;
- gc->pipe[pn].array.line = 0;
- gc->pipe[pn].array.use_vertex = 1;
- gc->pipe[pn].array.use_color = !nomul;
- gc->pipe[pn].array.use_texuv = 1;
- gc->pipe[pn].array.use_texuv2 = 1;
- gc->pipe[pn].array.use_texuv3 = 1;
- gc->pipe[pn].array.use_mask = !!mtex;
- gc->pipe[pn].array.use_texsam = 0;
- gc->pipe[pn].array.use_masksam = (masksam != SHD_SAM11);
+ if (gc->pipe[pn].array.num == 0)
+ {
+ gc->pipe[pn].region.type = SHD_YUV;
+ gc->pipe[pn].shader.prog = prog;
+ gc->pipe[pn].shader.cur_tex = tex->pt->texture;
+ gc->pipe[pn].shader.cur_texu = tex->ptu->texture;
+ gc->pipe[pn].shader.cur_texv = tex->ptv->texture;
+ gc->pipe[pn].shader.cur_texm = mtex ? mtex->pt->texture : 0;
+ gc->pipe[pn].shader.smooth = smooth;
+ gc->pipe[pn].shader.blend = blend;
+ gc->pipe[pn].shader.render_op = gc->dc->render_op;
+ gc->pipe[pn].shader.mask_smooth = mask_smooth;
+ gc->pipe[pn].shader.clip = 0;
+ gc->pipe[pn].shader.cx = 0;
+ gc->pipe[pn].shader.cy = 0;
+ gc->pipe[pn].shader.cw = 0;
+ gc->pipe[pn].shader.ch = 0;
+ gc->pipe[pn].array.line = 0;
+ gc->pipe[pn].array.use_vertex = 1;
+ gc->pipe[pn].array.use_color = !nomul;
+ gc->pipe[pn].array.use_texuv = 1;
+ gc->pipe[pn].array.use_texuv2 = 1;
+ gc->pipe[pn].array.use_texuv3 = 1;
+ gc->pipe[pn].array.use_mask = !!mtex;
+ gc->pipe[pn].array.use_texsam = 0;
+ gc->pipe[pn].array.use_masksam = (masksam != SHD_SAM11);
+ }
pipe_region_expand(gc, pn, x, y, w, h);
PIPE_GROW(gc, pn, 6);
@@ -2612,30 +2625,33 @@ evas_gl_common_context_yuv_709_push(Evas_Engine_GL_Context *gc,
0, 0, 0, 0, 0,
mask_smooth);
- gc->pipe[pn].region.type = SHD_YUV_709;
- gc->pipe[pn].shader.prog = prog;
- gc->pipe[pn].shader.cur_tex = tex->pt->texture;
- gc->pipe[pn].shader.cur_texu = tex->ptu->texture;
- gc->pipe[pn].shader.cur_texv = tex->ptv->texture;
- gc->pipe[pn].shader.cur_texm = mtex ? mtex->pt->texture : 0;
- gc->pipe[pn].shader.smooth = smooth;
- gc->pipe[pn].shader.blend = blend;
- gc->pipe[pn].shader.render_op = gc->dc->render_op;
- gc->pipe[pn].shader.mask_smooth = mask_smooth;
- gc->pipe[pn].shader.clip = 0;
- gc->pipe[pn].shader.cx = 0;
- gc->pipe[pn].shader.cy = 0;
- gc->pipe[pn].shader.cw = 0;
- gc->pipe[pn].shader.ch = 0;
- gc->pipe[pn].array.line = 0;
- gc->pipe[pn].array.use_vertex = 1;
- gc->pipe[pn].array.use_color = !nomul;
- gc->pipe[pn].array.use_texuv = 1;
- gc->pipe[pn].array.use_texuv2 = 1;
- gc->pipe[pn].array.use_texuv3 = 1;
- gc->pipe[pn].array.use_mask = !!mtex;
- gc->pipe[pn].array.use_texsam = 0;
- gc->pipe[pn].array.use_masksam = (masksam != SHD_SAM11);
+ if (gc->pipe[pn].array.num == 0)
+ {
+ gc->pipe[pn].region.type = SHD_YUV_709;
+ gc->pipe[pn].shader.prog = prog;
+ gc->pipe[pn].shader.cur_tex = tex->pt->texture;
+ gc->pipe[pn].shader.cur_texu = tex->ptu->texture;
+ gc->pipe[pn].shader.cur_texv = tex->ptv->texture;
+ gc->pipe[pn].shader.cur_texm = mtex ? mtex->pt->texture : 0;
+ gc->pipe[pn].shader.smooth = smooth;
+ gc->pipe[pn].shader.blend = blend;
+ gc->pipe[pn].shader.render_op = gc->dc->render_op;
+ gc->pipe[pn].shader.mask_smooth = mask_smooth;
+ gc->pipe[pn].shader.clip = 0;
+ gc->pipe[pn].shader.cx = 0;
+ gc->pipe[pn].shader.cy = 0;
+ gc->pipe[pn].shader.cw = 0;
+ gc->pipe[pn].shader.ch = 0;
+ gc->pipe[pn].array.line = 0;
+ gc->pipe[pn].array.use_vertex = 1;
+ gc->pipe[pn].array.use_color = !nomul;
+ gc->pipe[pn].array.use_texuv = 1;
+ gc->pipe[pn].array.use_texuv2 = 1;
+ gc->pipe[pn].array.use_texuv3 = 1;
+ gc->pipe[pn].array.use_mask = !!mtex;
+ gc->pipe[pn].array.use_texsam = 0;
+ gc->pipe[pn].array.use_masksam = (masksam != SHD_SAM11);
+ }
pipe_region_expand(gc, pn, x, y, w, h);
PIPE_GROW(gc, pn, 6);
@@ -2692,29 +2708,32 @@ evas_gl_common_context_yuy2_push(Evas_Engine_GL_Context *gc,
0, 0, 0, 0, 0,
mask_smooth);
- gc->pipe[pn].region.type = SHD_YUY2;
- gc->pipe[pn].shader.prog = prog;
- gc->pipe[pn].shader.cur_tex = tex->pt->texture;
- gc->pipe[pn].shader.cur_texu = tex->ptuv->texture;
- gc->pipe[pn].shader.cur_texm = mtex ? mtex->pt->texture : 0;
- gc->pipe[pn].shader.smooth = smooth;
- gc->pipe[pn].shader.blend = blend;
- gc->pipe[pn].shader.render_op = gc->dc->render_op;
- gc->pipe[pn].shader.mask_smooth = mask_smooth;
- gc->pipe[pn].shader.clip = 0;
- gc->pipe[pn].shader.cx = 0;
- gc->pipe[pn].shader.cy = 0;
- gc->pipe[pn].shader.cw = 0;
- gc->pipe[pn].shader.ch = 0;
- gc->pipe[pn].array.line = 0;
- gc->pipe[pn].array.use_vertex = 1;
- gc->pipe[pn].array.use_color = !nomul;
- gc->pipe[pn].array.use_texuv = 1;
- gc->pipe[pn].array.use_texuv2 = 1;
- gc->pipe[pn].array.use_texuv3 = 0;
- gc->pipe[pn].array.use_mask = !!mtex;
- gc->pipe[pn].array.use_texsam = 0;
- gc->pipe[pn].array.use_masksam = (masksam != SHD_SAM11);
+ if (gc->pipe[pn].array.num == 0)
+ {
+ gc->pipe[pn].region.type = SHD_YUY2;
+ gc->pipe[pn].shader.prog = prog;
+ gc->pipe[pn].shader.cur_tex = tex->pt->texture;
+ gc->pipe[pn].shader.cur_texu = tex->ptuv->texture;
+ gc->pipe[pn].shader.cur_texm = mtex ? mtex->pt->texture : 0;
+ gc->pipe[pn].shader.smooth = smooth;
+ gc->pipe[pn].shader.blend = blend;
+ gc->pipe[pn].shader.render_op = gc->dc->render_op;
+ gc->pipe[pn].shader.mask_smooth = mask_smooth;
+ gc->pipe[pn].shader.clip = 0;
+ gc->pipe[pn].shader.cx = 0;
+ gc->pipe[pn].shader.cy = 0;
+ gc->pipe[pn].shader.cw = 0;
+ gc->pipe[pn].shader.ch = 0;
+ gc->pipe[pn].array.line = 0;
+ gc->pipe[pn].array.use_vertex = 1;
+ gc->pipe[pn].array.use_color = !nomul;
+ gc->pipe[pn].array.use_texuv = 1;
+ gc->pipe[pn].array.use_texuv2 = 1;
+ gc->pipe[pn].array.use_texuv3 = 0;
+ gc->pipe[pn].array.use_mask = !!mtex;
+ gc->pipe[pn].array.use_texsam = 0;
+ gc->pipe[pn].array.use_masksam = (masksam != SHD_SAM11);
+ }
pipe_region_expand(gc, pn, x, y, w, h);
PIPE_GROW(gc, pn, 6);
@@ -2770,31 +2789,34 @@ evas_gl_common_context_nv12_push(Evas_Engine_GL_Context *gc,
0, 0, 0, 0, 0,
mask_smooth);
- gc->pipe[pn].region.type = SHD_NV12;
- gc->pipe[pn].shader.prog = prog;
- gc->pipe[pn].shader.cur_tex = tex->pt->texture;
- gc->pipe[pn].shader.cur_tex_dyn = tex->pt->dyn.img;
- gc->pipe[pn].shader.cur_texu = tex->ptuv->texture;
- gc->pipe[pn].shader.cur_texu_dyn = tex->ptuv->dyn.img;
- gc->pipe[pn].shader.cur_texm = mtex ? mtex->pt->texture : 0;
- gc->pipe[pn].shader.smooth = smooth;
- gc->pipe[pn].shader.blend = blend;
- gc->pipe[pn].shader.render_op = gc->dc->render_op;
- gc->pipe[pn].shader.mask_smooth = mask_smooth;
- gc->pipe[pn].shader.clip = 0;
- gc->pipe[pn].shader.cx = 0;
- gc->pipe[pn].shader.cy = 0;
- gc->pipe[pn].shader.cw = 0;
- gc->pipe[pn].shader.ch = 0;
- gc->pipe[pn].array.line = 0;
- gc->pipe[pn].array.use_vertex = 1;
- gc->pipe[pn].array.use_color = !nomul;
- gc->pipe[pn].array.use_texuv = 1;
- gc->pipe[pn].array.use_texuv2 = 1;
- gc->pipe[pn].array.use_texuv3 = 0;
- gc->pipe[pn].array.use_mask = !!mtex;
- gc->pipe[pn].array.use_texsam = 0;
- gc->pipe[pn].array.use_masksam = (masksam != SHD_SAM11);
+ if (gc->pipe[pn].array.num == 0)
+ {
+ gc->pipe[pn].region.type = SHD_NV12;
+ gc->pipe[pn].shader.prog = prog;
+ gc->pipe[pn].shader.cur_tex = tex->pt->texture;
+ gc->pipe[pn].shader.cur_tex_dyn = tex->pt->dyn.img;
+ gc->pipe[pn].shader.cur_texu = tex->ptuv->texture;
+ gc->pipe[pn].shader.cur_texu_dyn = tex->ptuv->dyn.img;
+ gc->pipe[pn].shader.cur_texm = mtex ? mtex->pt->texture : 0;
+ gc->pipe[pn].shader.smooth = smooth;
+ gc->pipe[pn].shader.blend = blend;
+ gc->pipe[pn].shader.render_op = gc->dc->render_op;
+ gc->pipe[pn].shader.mask_smooth = mask_smooth;
+ gc->pipe[pn].shader.clip = 0;
+ gc->pipe[pn].shader.cx = 0;
+ gc->pipe[pn].shader.cy = 0;
+ gc->pipe[pn].shader.cw = 0;
+ gc->pipe[pn].shader.ch = 0;
+ gc->pipe[pn].array.line = 0;
+ gc->pipe[pn].array.use_vertex = 1;
+ gc->pipe[pn].array.use_color = !nomul;
+ gc->pipe[pn].array.use_texuv = 1;
+ gc->pipe[pn].array.use_texuv2 = 1;
+ gc->pipe[pn].array.use_texuv3 = 0;
+ gc->pipe[pn].array.use_mask = !!mtex;
+ gc->pipe[pn].array.use_texsam = 0;
+ gc->pipe[pn].array.use_masksam = (masksam != SHD_SAM11);
+ }
pipe_region_expand(gc, pn, x, y, w, h);
PIPE_GROW(gc, pn, 6);
@@ -2855,30 +2877,33 @@ evas_gl_common_context_rgb_a_pair_push(Evas_Engine_GL_Context *gc,
EINA_FALSE, 0, 0, 0, 0,
mask_smooth);
- gc->pipe[pn].region.type = SHD_RGB_A_PAIR;
- gc->pipe[pn].shader.prog = prog;
- gc->pipe[pn].shader.cur_tex = tex->pt->texture;
- gc->pipe[pn].shader.cur_texa = tex->pta->texture;
- gc->pipe[pn].shader.cur_texm = mtex ? mtex->pt->texture : 0;
- gc->pipe[pn].shader.smooth = smooth;
- gc->pipe[pn].shader.blend = EINA_TRUE;
- gc->pipe[pn].shader.render_op = gc->dc->render_op;
- gc->pipe[pn].shader.mask_smooth = mask_smooth;
- gc->pipe[pn].shader.clip = 0;
- gc->pipe[pn].shader.cx = 0;
- gc->pipe[pn].shader.cy = 0;
- gc->pipe[pn].shader.cw = 0;
- gc->pipe[pn].shader.ch = 0;
- gc->pipe[pn].array.line = 0;
- gc->pipe[pn].array.use_vertex = EINA_TRUE;
- gc->pipe[pn].array.use_color = !nomul;
- gc->pipe[pn].array.use_texuv = EINA_TRUE;
- gc->pipe[pn].array.use_texuv2 = 0;
- gc->pipe[pn].array.use_texuv3 = 0;
- gc->pipe[pn].array.use_texa = EINA_TRUE;
- gc->pipe[pn].array.use_texsam = 0;
- gc->pipe[pn].array.use_mask = !!mtex;
- gc->pipe[pn].array.use_masksam = (masksam != SHD_SAM11);
+ if (gc->pipe[pn].array.num == 0)
+ {
+ gc->pipe[pn].region.type = SHD_RGB_A_PAIR;
+ gc->pipe[pn].shader.prog = prog;
+ gc->pipe[pn].shader.cur_tex = tex->pt->texture;
+ gc->pipe[pn].shader.cur_texa = tex->pta->texture;
+ gc->pipe[pn].shader.cur_texm = mtex ? mtex->pt->texture : 0;
+ gc->pipe[pn].shader.smooth = smooth;
+ gc->pipe[pn].shader.blend = EINA_TRUE;
+ gc->pipe[pn].shader.render_op = gc->dc->render_op;
+ gc->pipe[pn].shader.mask_smooth = mask_smooth;
+ gc->pipe[pn].shader.clip = 0;
+ gc->pipe[pn].shader.cx = 0;
+ gc->pipe[pn].shader.cy = 0;
+ gc->pipe[pn].shader.cw = 0;
+ gc->pipe[pn].shader.ch = 0;
+ gc->pipe[pn].array.line = 0;
+ gc->pipe[pn].array.use_vertex = EINA_TRUE;
+ gc->pipe[pn].array.use_color = !nomul;
+ gc->pipe[pn].array.use_texuv = EINA_TRUE;
+ gc->pipe[pn].array.use_texuv2 = 0;
+ gc->pipe[pn].array.use_texuv3 = 0;
+ gc->pipe[pn].array.use_texa = EINA_TRUE;
+ gc->pipe[pn].array.use_texsam = 0;
+ gc->pipe[pn].array.use_mask = !!mtex;
+ gc->pipe[pn].array.use_masksam = (masksam != SHD_SAM11);
+ }
pipe_region_expand(gc, pn, x, y, w, h);
PIPE_GROW(gc, pn, 6);
@@ -3040,43 +3065,46 @@ evas_gl_common_context_image_map_push(Evas_Engine_GL_Context *gc,
smooth,
clip, cx, cy, cw, ch,
mask_smooth);
- gc->pipe[pn].region.type = SHD_MAP;
- gc->pipe[pn].shader.prog = prog;
- gc->pipe[pn].shader.cur_tex = tex->pt->texture;
- gc->pipe[pn].shader.tex_target = GL_TEXTURE_2D;
-
- if (utexture)
- {
- gc->pipe[pn].shader.cur_texu = tex->ptu->texture;
- gc->pipe[pn].shader.cur_texu_dyn = tex->ptu->dyn.img;
- gc->pipe[pn].shader.cur_texv = tex->ptv->texture;
- gc->pipe[pn].shader.cur_texv_dyn = tex->ptv->dyn.img;
- }
- else if (uvtexture)
+ if (gc->pipe[pn].array.num == 0)
{
- gc->pipe[pn].shader.cur_texu = tex->ptuv->texture;
- gc->pipe[pn].shader.cur_texu_dyn = tex->ptuv->dyn.img;
+ gc->pipe[pn].region.type = SHD_MAP;
+ gc->pipe[pn].shader.prog = prog;
+ gc->pipe[pn].shader.cur_tex = tex->pt->texture;
+ gc->pipe[pn].shader.tex_target = GL_TEXTURE_2D;
+
+ if (utexture)
+ {
+ gc->pipe[pn].shader.cur_texu = tex->ptu->texture;
+ gc->pipe[pn].shader.cur_texu_dyn = tex->ptu->dyn.img;
+ gc->pipe[pn].shader.cur_texv = tex->ptv->texture;
+ gc->pipe[pn].shader.cur_texv_dyn = tex->ptv->dyn.img;
+ }
+ else if (uvtexture)
+ {
+ gc->pipe[pn].shader.cur_texu = tex->ptuv->texture;
+ gc->pipe[pn].shader.cur_texu_dyn = tex->ptuv->dyn.img;
+ }
+ gc->pipe[pn].shader.cur_texm = mtex ? mtex->pt->texture : 0;
+ gc->pipe[pn].shader.smooth = smooth;
+ gc->pipe[pn].shader.blend = blend;
+ gc->pipe[pn].shader.render_op = gc->dc->render_op;
+ gc->pipe[pn].shader.mask_smooth = mask_smooth;
+ gc->pipe[pn].shader.clip = clip;
+ gc->pipe[pn].shader.cx = cx;
+ gc->pipe[pn].shader.cy = cy;
+ gc->pipe[pn].shader.cw = cw;
+ gc->pipe[pn].shader.ch = ch;
+ gc->pipe[pn].array.line = 0;
+ gc->pipe[pn].array.use_vertex = 1;
+ gc->pipe[pn].array.use_color = !nomul;
+ gc->pipe[pn].array.use_texuv = 1;
+ gc->pipe[pn].array.use_texuv2 = (utexture || uvtexture) ? 1 : 0;
+ gc->pipe[pn].array.use_texuv3 = (utexture) ? 1 : 0;
+ gc->pipe[pn].array.use_mask = !!mtex;
+ gc->pipe[pn].array.use_texa = use_texa;
+ gc->pipe[pn].array.use_texsam = 0;
+ gc->pipe[pn].array.use_masksam = (masksam != SHD_SAM11);
}
- gc->pipe[pn].shader.cur_texm = mtex ? mtex->pt->texture : 0;
- gc->pipe[pn].shader.smooth = smooth;
- gc->pipe[pn].shader.blend = blend;
- gc->pipe[pn].shader.render_op = gc->dc->render_op;
- gc->pipe[pn].shader.mask_smooth = mask_smooth;
- gc->pipe[pn].shader.clip = clip;
- gc->pipe[pn].shader.cx = cx;
- gc->pipe[pn].shader.cy = cy;
- gc->pipe[pn].shader.cw = cw;
- gc->pipe[pn].shader.ch = ch;
- gc->pipe[pn].array.line = 0;
- gc->pipe[pn].array.use_vertex = 1;
- gc->pipe[pn].array.use_color = !nomul;
- gc->pipe[pn].array.use_texuv = 1;
- gc->pipe[pn].array.use_texuv2 = (utexture || uvtexture) ? 1 : 0;
- gc->pipe[pn].array.use_texuv3 = (utexture) ? 1 : 0;
- gc->pipe[pn].array.use_mask = !!mtex;
- gc->pipe[pn].array.use_texa = use_texa;
- gc->pipe[pn].array.use_texsam = 0;
- gc->pipe[pn].array.use_masksam = (masksam != SHD_SAM11);
pipe_region_expand(gc, pn, x, y, w, h);
PIPE_GROW(gc, pn, 6);
@@ -3238,29 +3266,32 @@ evas_gl_common_filter_displace_push(Evas_Engine_GL_Context *gc,
x, y, w, h, blend, smooth,
0, 0, 0, 0, 0, EINA_FALSE);
- gc->pipe[pn].region.type = SHD_FILTER_DISPLACE;
- gc->pipe[pn].shader.prog = prog;
- gc->pipe[pn].shader.cur_tex = tex->pt->texture;
- gc->pipe[pn].shader.cur_texm = 0;
- gc->pipe[pn].shader.tex_target = GL_TEXTURE_2D;
- gc->pipe[pn].shader.smooth = smooth;
- gc->pipe[pn].shader.mask_smooth = 0;
- gc->pipe[pn].shader.blend = blend;
- gc->pipe[pn].shader.render_op = gc->dc->render_op;
- gc->pipe[pn].shader.clip = 0;
- gc->pipe[pn].shader.cx = 0;
- gc->pipe[pn].shader.cy = 0;
- gc->pipe[pn].shader.cw = 0;
- gc->pipe[pn].shader.ch = 0;
- gc->pipe[pn].array.line = 0;
- gc->pipe[pn].array.use_vertex = 1;
- gc->pipe[pn].array.use_color = !nomul;
- gc->pipe[pn].array.use_texuv = 1;
- gc->pipe[pn].array.use_texuv2 = 0;
- gc->pipe[pn].array.use_texuv3 = 0;
- gc->pipe[pn].array.use_texsam = (sam != SHD_SAM11);
- gc->pipe[pn].array.use_mask = 0;
- gc->pipe[pn].array.use_masksam = 0;
+ if (gc->pipe[pn].array.num == 0)
+ {
+ gc->pipe[pn].region.type = SHD_FILTER_DISPLACE;
+ gc->pipe[pn].shader.prog = prog;
+ gc->pipe[pn].shader.cur_tex = tex->pt->texture;
+ gc->pipe[pn].shader.cur_texm = 0;
+ gc->pipe[pn].shader.tex_target = GL_TEXTURE_2D;
+ gc->pipe[pn].shader.smooth = smooth;
+ gc->pipe[pn].shader.mask_smooth = 0;
+ gc->pipe[pn].shader.blend = blend;
+ gc->pipe[pn].shader.render_op = gc->dc->render_op;
+ gc->pipe[pn].shader.clip = 0;
+ gc->pipe[pn].shader.cx = 0;
+ gc->pipe[pn].shader.cy = 0;
+ gc->pipe[pn].shader.cw = 0;
+ gc->pipe[pn].shader.ch = 0;
+ gc->pipe[pn].array.line = 0;
+ gc->pipe[pn].array.use_vertex = 1;
+ gc->pipe[pn].array.use_color = !nomul;
+ gc->pipe[pn].array.use_texuv = 1;
+ gc->pipe[pn].array.use_texuv2 = 0;
+ gc->pipe[pn].array.use_texuv3 = 0;
+ gc->pipe[pn].array.use_texsam = (sam != SHD_SAM11);
+ gc->pipe[pn].array.use_mask = 0;
+ gc->pipe[pn].array.use_masksam = 0;
+ }
pipe_region_expand(gc, pn, x, y, w, h);
PIPE_GROW(gc, pn, 6);
@@ -3357,29 +3388,32 @@ evas_gl_common_filter_curve_push(Evas_Engine_GL_Context *gc,
x, y, w, h, blend, smooth,
0, 0, 0, 0, 0, EINA_FALSE);
- gc->pipe[pn].region.type = SHD_FILTER_CURVE;
- gc->pipe[pn].shader.prog = prog;
- gc->pipe[pn].shader.cur_tex = tex->pt->texture;
- gc->pipe[pn].shader.cur_texm = 0;
- gc->pipe[pn].shader.tex_target = GL_TEXTURE_2D;
- gc->pipe[pn].shader.smooth = smooth;
- gc->pipe[pn].shader.mask_smooth = 0;
- gc->pipe[pn].shader.blend = blend;
- gc->pipe[pn].shader.render_op = gc->dc->render_op;
- gc->pipe[pn].shader.clip = 0;
- gc->pipe[pn].shader.cx = 0;
- gc->pipe[pn].shader.cy = 0;
- gc->pipe[pn].shader.cw = 0;
- gc->pipe[pn].shader.ch = 0;
- gc->pipe[pn].array.line = 0;
- gc->pipe[pn].array.use_vertex = 1;
- gc->pipe[pn].array.use_color = !nomul;
- gc->pipe[pn].array.use_texuv = 1;
- gc->pipe[pn].array.use_texuv2 = 0;
- gc->pipe[pn].array.use_texuv3 = 0;
- gc->pipe[pn].array.use_texsam = (sam != SHD_SAM11);
- gc->pipe[pn].array.use_mask = 0;
- gc->pipe[pn].array.use_masksam = 0;
+ if (gc->pipe[pn].array.num == 0)
+ {
+ gc->pipe[pn].region.type = SHD_FILTER_CURVE;
+ gc->pipe[pn].shader.prog = prog;
+ gc->pipe[pn].shader.cur_tex = tex->pt->texture;
+ gc->pipe[pn].shader.cur_texm = 0;
+ gc->pipe[pn].shader.tex_target = GL_TEXTURE_2D;
+ gc->pipe[pn].shader.smooth = smooth;
+ gc->pipe[pn].shader.mask_smooth = 0;
+ gc->pipe[pn].shader.blend = blend;
+ gc->pipe[pn].shader.render_op = gc->dc->render_op;
+ gc->pipe[pn].shader.clip = 0;
+ gc->pipe[pn].shader.cx = 0;
+ gc->pipe[pn].shader.cy = 0;
+ gc->pipe[pn].shader.cw = 0;
+ gc->pipe[pn].shader.ch = 0;
+ gc->pipe[pn].array.line = 0;
+ gc->pipe[pn].array.use_vertex = 1;
+ gc->pipe[pn].array.use_color = !nomul;
+ gc->pipe[pn].array.use_texuv = 1;
+ gc->pipe[pn].array.use_texuv2 = 0;
+ gc->pipe[pn].array.use_texuv3 = 0;
+ gc->pipe[pn].array.use_texsam = (sam != SHD_SAM11);
+ gc->pipe[pn].array.use_mask = 0;
+ gc->pipe[pn].array.use_masksam = 0;
+ }
pipe_region_expand(gc, pn, x, y, w, h);
PIPE_GROW(gc, pn, 6);
@@ -3586,29 +3620,32 @@ evas_gl_common_filter_blur_push(Evas_Engine_GL_Context *gc,
sx, sy, dw, dh, blend, smooth,
0, 0, 0, 0, 0, EINA_FALSE);
- gc->pipe[pn].region.type = type;
- gc->pipe[pn].shader.prog = prog;
- gc->pipe[pn].shader.cur_tex = tex->pt->texture;
- gc->pipe[pn].shader.cur_texm = 0;
- gc->pipe[pn].shader.tex_target = GL_TEXTURE_2D;
- gc->pipe[pn].shader.smooth = smooth;
- gc->pipe[pn].shader.mask_smooth = 0;
- gc->pipe[pn].shader.blend = blend;
- gc->pipe[pn].shader.render_op = gc->dc->render_op;
- gc->pipe[pn].shader.clip = 0;
- gc->pipe[pn].shader.cx = 0;
- gc->pipe[pn].shader.cy = 0;
- gc->pipe[pn].shader.cw = 0;
- gc->pipe[pn].shader.ch = 0;
- gc->pipe[pn].array.line = 0;
- gc->pipe[pn].array.use_vertex = 1;
- gc->pipe[pn].array.use_color = !nomul;
- gc->pipe[pn].array.use_texuv = 1;
- gc->pipe[pn].array.use_texuv2 = 0;
- gc->pipe[pn].array.use_texuv3 = 0;
- gc->pipe[pn].array.use_texsam = 0;
- gc->pipe[pn].array.use_mask = 0;
- gc->pipe[pn].array.use_masksam = 0;
+ if (gc->pipe[pn].array.num == 0)
+ {
+ gc->pipe[pn].region.type = type;
+ gc->pipe[pn].shader.prog = prog;
+ gc->pipe[pn].shader.cur_tex = tex->pt->texture;
+ gc->pipe[pn].shader.cur_texm = 0;
+ gc->pipe[pn].shader.tex_target = GL_TEXTURE_2D;
+ gc->pipe[pn].shader.smooth = smooth;
+ gc->pipe[pn].shader.mask_smooth = 0;
+ gc->pipe[pn].shader.blend = blend;
+ gc->pipe[pn].shader.render_op = gc->dc->render_op;
+ gc->pipe[pn].shader.clip = 0;
+ gc->pipe[pn].shader.cx = 0;
+ gc->pipe[pn].shader.cy = 0;
+ gc->pipe[pn].shader.cw = 0;
+ gc->pipe[pn].shader.ch = 0;
+ gc->pipe[pn].array.line = 0;
+ gc->pipe[pn].array.use_vertex = 1;
+ gc->pipe[pn].array.use_color = !nomul;
+ gc->pipe[pn].array.use_texuv = 1;
+ gc->pipe[pn].array.use_texuv2 = 0;
+ gc->pipe[pn].array.use_texuv3 = 0;
+ gc->pipe[pn].array.use_texsam = 0;
+ gc->pipe[pn].array.use_mask = 0;
+ gc->pipe[pn].array.use_masksam = 0;
+ }
pipe_region_expand(gc, pn, dx, dy, dw, dh);
PIPE_GROW(gc, pn, 6);
@@ -3711,29 +3748,32 @@ evas_gl_common_filter_grayscale_push(Evas_Engine_GL_Context *gc,
x, y, w, h, blend, smooth,
0, 0, 0, 0, 0, EINA_FALSE);
- gc->pipe[pn].region.type = type;
- gc->pipe[pn].shader.prog = prog;
- gc->pipe[pn].shader.cur_tex = tex->pt->texture;
- gc->pipe[pn].shader.cur_texm = 0;
- gc->pipe[pn].shader.tex_target = GL_TEXTURE_2D;
- gc->pipe[pn].shader.smooth = smooth;
- gc->pipe[pn].shader.mask_smooth = 0;
- gc->pipe[pn].shader.blend = blend;
- gc->pipe[pn].shader.render_op = gc->dc->render_op;
- gc->pipe[pn].shader.clip = 0;
- gc->pipe[pn].shader.cx = 0;
- gc->pipe[pn].shader.cy = 0;
- gc->pipe[pn].shader.cw = 0;
- gc->pipe[pn].shader.ch = 0;
- gc->pipe[pn].array.line = 0;
- gc->pipe[pn].array.use_vertex = 1;
- gc->pipe[pn].array.use_color = !nomul;
- gc->pipe[pn].array.use_texuv = 1;
- gc->pipe[pn].array.use_texuv2 = 0;
- gc->pipe[pn].array.use_texuv3 = 0;
- gc->pipe[pn].array.use_texsam = 0;
- gc->pipe[pn].array.use_mask = 0;
- gc->pipe[pn].array.use_masksam = 0;
+ if (gc->pipe[pn].array.num == 0)
+ {
+ gc->pipe[pn].region.type = type;
+ gc->pipe[pn].shader.prog = prog;
+ gc->pipe[pn].shader.cur_tex = tex->pt->texture;
+ gc->pipe[pn].shader.cur_texm = 0;
+ gc->pipe[pn].shader.tex_target = GL_TEXTURE_2D;
+ gc->pipe[pn].shader.smooth = smooth;
+ gc->pipe[pn].shader.mask_smooth = 0;
+ gc->pipe[pn].shader.blend = blend;
+ gc->pipe[pn].shader.render_op = gc->dc->render_op;
+ gc->pipe[pn].shader.clip = 0;
+ gc->pipe[pn].shader.cx = 0;
+ gc->pipe[pn].shader.cy = 0;
+ gc->pipe[pn].shader.cw = 0;
+ gc->pipe[pn].shader.ch = 0;
+ gc->pipe[pn].array.line = 0;
+ gc->pipe[pn].array.use_vertex = 1;
+ gc->pipe[pn].array.use_color = !nomul;
+ gc->pipe[pn].array.use_texuv = 1;
+ gc->pipe[pn].array.use_texuv2 = 0;
+ gc->pipe[pn].array.use_texuv3 = 0;
+ gc->pipe[pn].array.use_texsam = 0;
+ gc->pipe[pn].array.use_mask = 0;
+ gc->pipe[pn].array.use_masksam = 0;
+ }
pipe_region_expand(gc, pn, x, y, w, h);
PIPE_GROW(gc, pn, 6);
@@ -3804,29 +3844,32 @@ evas_gl_common_filter_inverse_color_push(Evas_Engine_GL_Context *gc,
x, y, w, h, blend, smooth,
0, 0, 0, 0, 0, EINA_FALSE);
- gc->pipe[pn].region.type = type;
- gc->pipe[pn].shader.prog = prog;
- gc->pipe[pn].shader.cur_tex = tex->pt->texture;
- gc->pipe[pn].shader.cur_texm = 0;
- gc->pipe[pn].shader.tex_target = GL_TEXTURE_2D;
- gc->pipe[pn].shader.smooth = smooth;
- gc->pipe[pn].shader.mask_smooth = 0;
- gc->pipe[pn].shader.blend = blend;
- gc->pipe[pn].shader.render_op = gc->dc->render_op;
- gc->pipe[pn].shader.clip = 0;
- gc->pipe[pn].shader.cx = 0;
- gc->pipe[pn].shader.cy = 0;
- gc->pipe[pn].shader.cw = 0;
- gc->pipe[pn].shader.ch = 0;
- gc->pipe[pn].array.line = 0;
- gc->pipe[pn].array.use_vertex = 1;
- gc->pipe[pn].array.use_color = !nomul;
- gc->pipe[pn].array.use_texuv = 1;
- gc->pipe[pn].array.use_texuv2 = 0;
- gc->pipe[pn].array.use_texuv3 = 0;
- gc->pipe[pn].array.use_texsam = 0;
- gc->pipe[pn].array.use_mask = 0;
- gc->pipe[pn].array.use_masksam = 0;
+ if (gc->pipe[pn].array.num == 0)
+ {
+ gc->pipe[pn].region.type = type;
+ gc->pipe[pn].shader.prog = prog;
+ gc->pipe[pn].shader.cur_tex = tex->pt->texture;
+ gc->pipe[pn].shader.cur_texm = 0;
+ gc->pipe[pn].shader.tex_target = GL_TEXTURE_2D;
+ gc->pipe[pn].shader.smooth = smooth;
+ gc->pipe[pn].shader.mask_smooth = 0;
+ gc->pipe[pn].shader.blend = blend;
+ gc->pipe[pn].shader.render_op = gc->dc->render_op;
+ gc->pipe[pn].shader.clip = 0;
+ gc->pipe[pn].shader.cx = 0;
+ gc->pipe[pn].shader.cy = 0;
+ gc->pipe[pn].shader.cw = 0;
+ gc->pipe[pn].shader.ch = 0;
+ gc->pipe[pn].array.line = 0;
+ gc->pipe[pn].array.use_vertex = 1;
+ gc->pipe[pn].array.use_color = !nomul;
+ gc->pipe[pn].array.use_texuv = 1;
+ gc->pipe[pn].array.use_texuv2 = 0;
+ gc->pipe[pn].array.use_texuv3 = 0;
+ gc->pipe[pn].array.use_texsam = 0;
+ gc->pipe[pn].array.use_mask = 0;
+ gc->pipe[pn].array.use_masksam = 0;
+ }
pipe_region_expand(gc, pn, x, y, w, h);
PIPE_GROW(gc, pn, 6);
@@ -4559,8 +4602,8 @@ shader_array_flush(Evas_Engine_GL_Context *gc)
i,
gc->pipe[i].array.num / 6,
gc->pipe[0].shader.surface,
- gc->pipe[0].shader.surface->w,
- gc->pipe[0].shader.surface->h,
+ gc->pipe[0].shader.surface ? gc->pipe[0].shader.surface->w : 0,
+ gc->pipe[0].shader.surface ? gc->pipe[0].shader.surface->h : 0,
gw, gh,
gc->pipe[i].shader.cur_tex,
types[gc->pipe[i].region.type]