This is an automated email from the git hooks/post-receive script.

git pushed a commit to reference refs/pull/114/head
in repository efl.

View the commit online.

commit 190f7fc9dbd4af3d1c52a8dc2fb2355bfb0f9ce5
Author: Cedric BAIL <[email protected]>
AuthorDate: Fri Aug 14 14:57:07 2026 -0600

    evas: drop the span pipe path and fix the new files' licence headers
    
    Two things a review of the branch turned up.
    
    The span path no longer draws through an Evas pipe entry - it renders
    into the vector object's own framebuffer and so cannot share one - which
    left evas_gl_common_context_span_push(), _span_pipe_find_or_alloc(), the
    SHD_SPAN dispatch in shader_array_flush(), span_shader_pipe_flush() and
    its weak stub, and the per-pipe span_vertex_data and span_* shader fields
    all unreachable. Worse, the variant classifier the direct path uses
    carried a comment saying it mirrored the dead push function, so there
    were two copies of that logic to keep in step and only one of them ran.
    Remove the lot. The shared gl_common files shrink accordingly, from +374
    to +145 lines against master in evas_gl_context.c and +73 to +51 in
    evas_gl_common.h, which matters for a file every GL engine builds.
    
    The nine new files also carried an SPDX-License-Identifier of
    LGPL-2.1-only. COPYING puts src/modules/evas under BSD and ector under
    FTL/GPL, so that was both wrong and more restrictive than the trees it
    was applied to, and EFL carries no SPDX headers anywhere else - adopting
    them is a project decision, not something to arrive inside a feature
    branch. The evas engine sources now carry no per-file header, matching
    their neighbours, and the two ector tests carry the same LGPL boilerplate
    as the rest of that suite.
    
    All ten VG expedite tests pass at a 2/255 per-channel tolerance;
    ector-suite and evas-suite pass.
    
    Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
---
 .../engines/gl_common/evas_ector_gl_span_types.h   |   1 -
 .../evas/engines/gl_common/evas_gl_common.h        |  25 +--
 .../evas/engines/gl_common/evas_gl_context.c       | 229 ---------------------
 .../engines/gl_generic/evas_ector_gl_grad_atlas.c  |   1 -
 .../engines/gl_generic/evas_ector_gl_grad_atlas.h  |   1 -
 .../evas/engines/gl_generic/evas_ector_gl_span.c   |   1 -
 .../evas/engines/gl_generic/evas_ector_gl_span.h   |  19 +-
 .../engines/gl_generic/evas_ector_gl_span_shader.c |  23 +--
 .../engines/gl_generic/evas_ector_log_restore.h    |   1 -
 src/modules/evas/engines/gl_generic/evas_engine.c  |   3 +-
 src/tests/ector/suite/ector_test_grad_atlas.c      |  18 +-
 src/tests/ector/suite/ector_test_span_collector.c  |  18 +-
 12 files changed, 41 insertions(+), 299 deletions(-)

diff --git a/src/modules/evas/engines/gl_common/evas_ector_gl_span_types.h b/src/modules/evas/engines/gl_common/evas_ector_gl_span_types.h
index 6e858d607d..4c4d8a79d3 100644
--- a/src/modules/evas/engines/gl_common/evas_ector_gl_span_types.h
+++ b/src/modules/evas/engines/gl_common/evas_ector_gl_span_types.h
@@ -1,4 +1,3 @@
-/* SPDX-License-Identifier: LGPL-2.1-only */
 /*
  * Shared type definitions for the span-buffer GL batching path.
  *
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 12c067457c..8e1d136139 100644
--- a/src/modules/evas/engines/gl_common/evas_gl_common.h
+++ b/src/modules/evas/engines/gl_common/evas_gl_common.h
@@ -272,8 +272,7 @@ enum _Shader_Type {
    SHD_FILTER_BLUR_X,
    SHD_FILTER_BLUR_Y,
    SHD_FILTER_GRAYSCALE,
-   SHD_FILTER_INVERSE_COLOR,
-   SHD_SPAN
+   SHD_FILTER_INVERSE_COLOR
 };
 
 #define ARRAY_BUFFER_USE 500
@@ -296,7 +295,7 @@ typedef struct _Span_Channel_Params {
    float    grad_ra, grad_rdx, grad_rdy; /* radial: quadratic params */
 } Span_Channel_Params;
 
-/* Full parameter set for evas_gl_common_context_span_push(). */
+/* Full parameter set for one span quad; see span_pass_draw(). */
 typedef struct _Span_Pipe_Params {
    int      pool_w, pool_h;
        /* pool texture dimensions */
@@ -366,15 +365,6 @@ struct _Evas_Engine_GL_Context
          GLuint           cur_tex, cur_texu, cur_texv, cur_texa, cur_texm;
          int              tex_target;
          int              cx, cy, cw, ch;
-         /* SHD_SPAN: span-lookup shader parameters.
-          * Only the 6 fields used by the merge predicate and flush survive;
-          * all per-shape data now lives in the per-vertex span_vertex_data buffer. */
-         GLuint   span_fill_tex;       /* pool GL texture for fill spans (0 = none) */
-         GLuint   span_stroke_tex;     /* pool GL texture for stroke spans (0 = none) */
-         GLuint   span_grad_atlas_tex; /* gradient ramp atlas GL texture name */
-         GLuint   span_mask_tex;       /* mask FBO texture (0 = no mask) */
-         float    span_inv_tw;         /* 1.0 / pool_width (shared, same pool) */
-         float    span_inv_th;         /* 1.0 / pool_height */
          signed char      render_op;
          Eina_Bool        smooth      : 2;
          Eina_Bool        blend       : 2;
@@ -400,17 +390,9 @@ struct _Evas_Engine_GL_Context
          int            filter_data_count; // number of vec2
          GLfloat       *filter_data;
          Evas_GL_Image *im;
-         /* Span-buffer attribute batching.
-          * Heap-grown interleaved buffer of Span_Vertex_<variant> structs.
-          * 6 vertices per quad (two triangles).  Sole source of truth for
-          * span_shader_pipe_flush; array.vertex is not used by span pipes. */
-         void          *span_vertex_data;       /* heap-grown; NULL until first push */
-         size_t         span_vertex_data_size;  /* bytes allocated */
-         size_t         span_vertex_data_used;  /* bytes filled */
          GLuint         buffer;
          int            buffer_alloc;
          int            buffer_use;
-         Span_Variant   span_variant;           /* SOLID / SOLID_MASK / GRADIENT / GRADIENT_MASK */
          Eina_Bool      line        : 1;
          Eina_Bool      use_vertex  : 1; // true for all non-span pipes
          Eina_Bool      use_color   : 1;
@@ -670,9 +652,6 @@ void              evas_gl_common_context_rectangle_push(Evas_Engine_GL_Context *
                                                         int r, int g, int b, int a,
                                                         Evas_GL_Texture *mtex, int mx, int my, int mw, int mh,
                                                         Eina_Bool mask_smooth, Eina_Bool mask_color);
-void              evas_gl_common_context_span_push(Evas_Engine_GL_Context *gc,
-                                                   const Span_Pipe_Params *p,
-                                                   const GLfloat ndc_quad[8]);
 /* Fill the six interleaved vertices of one span quad.  Exported so that the
  * VG pass can build a batch without going through a pipe entry: it renders
  * into its own FBO, so putting it in the pipe forced a target switch - and
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 ece5dd1ed2..91c812d7ff 100644
--- a/src/modules/evas/engines/gl_common/evas_gl_context.c
+++ b/src/modules/evas/engines/gl_common/evas_gl_context.c
@@ -11,15 +11,6 @@
 
 #define PRG_INVALID NULL
 
-/* Span-lookup shader pipe flush — implemented in evas_ector_gl_span_shader.c
- * (compiled into gl_generic).  The weak default is a no-op so that other
- * engine modules that do not include the span shader (gl_x11, etc.) still
- * link cleanly; for those modules SHD_SPAN pipes are never created. */
-void __attribute__((weak))
-span_shader_pipe_flush(Evas_Engine_GL_Context *gc EINA_UNUSED,
-                       int pipe_idx EINA_UNUSED)
-{
-}
 
 static int tbm_sym_done = 0;
 int _evas_engine_GL_common_log_dom = -1;
@@ -1459,24 +1450,6 @@ evas_gl_common_context_free(Evas_Engine_GL_Context *gc)
              PIPE_FREE(gc->pipe[i].array.mask);
              PIPE_FREE(gc->pipe[i].array.masksam);
              FREE(gc->pipe[i].array.filter_data);
-             if (gc->pipe[i].array.span_vertex_data)
-               {
-                  free(gc->pipe[i].array.span_vertex_data);
-                  gc->pipe[i].array.span_vertex_data      = NULL;
-                  gc->pipe[i].array.span_vertex_data_size = 0;
-                  gc->pipe[i].array.span_vertex_data_used = 0;
-               }
-             /* Delete the span VBO when the MapBuffer-gated loop above did
-              * not run.  When glsym_glMapBuffer is present, the loop at
-              * lines ~1442-1446 already deletes every pipe's array.buffer
-              * (image/font and span share that field), so this block is
-              * a no-op there.  When MapBuffer is absent the loop is
-              * skipped, and the span path (which uses plain glBufferData
-              * rather than glMapBuffer) needs this fallback to avoid
-              * leaking the VBO. */
-             if (gc->pipe[i].array.buffer &&
-                 !(glsym_glMapBuffer && glsym_glUnmapBuffer))
-               glDeleteBuffers(1, &gc->pipe[i].array.buffer);
           }
      }
 
@@ -2089,18 +2062,6 @@ evas_gl_common_context_rectangle_push(Evas_Engine_GL_Context *gc,
    PUSH_6_COLORS(pn, r, g, b, a);
 }
 
-/* Dummy Evas_GL_Program used as a stable non-NULL key for SHD_SPAN pipes.
- * shader_array_flush() detects SHD_SPAN by region.type before touching
- * this program, so prog = 0 is intentional and never passed to glUseProgram
- * from the standard flush path. */
-static Evas_GL_Program _span_prog_dummy;
-
-/* Fill 6 vertices of the per-variant interleaved struct from Span_Pipe_Params
- * and pre-computed NDC quad corners.  pos varies per vertex; all other fields
- * are replicated identically across the 6 vertices of a quad.
- *
- * NDC quad order: TL(0), TR(1), BR(2), BL(3) — two triangles: 0,1,2 + 0,2,3.
- */
 /* Write one side's gradient attributes.  A side that is not actually a
  * gradient travels as SPAN_GRAD_TYPE_SOLID with its colour in abc_y, so that
  * a mixed fill/stroke shape needs one program rather than two. */
@@ -2242,171 +2203,6 @@ evas_gl_common_span_fill_vertices(void *out_buf, Span_Variant variant,
      }
 }
 
-/* Find an existing mergeable pipe entry or allocate a new one.
- *
- * The merge predicate collapses from ~44 per-shape fields to 6:
- *   region.type == SHD_SPAN, span_variant, span_fill_tex,
- *   span_stroke_tex, span_grad_atlas_tex, span_mask_tex.
- * All other per-shape data is now embedded in the span_vertex_data buffer
- * as per-vertex attributes, so it no longer participates in the predicate.
- *
- * Returns pipe index, or -1 if the pipe array is full (caller must flush). */
-static int
-_span_pipe_find_or_alloc(Evas_Engine_GL_Context *gc,
-                         const Span_Pipe_Params *p,
-                         Span_Variant variant,
-                         float _inv_tw, float _inv_th)
-{
-   int pn = gc->state.top_pipe;
-   size_t vsize = span_vertex_size(variant);
-
-#define _S gc->pipe[pn].shader
-   if (gc->pipe[pn].array.num > 0)
-     {
-        Eina_Bool can_merge =
-           (gc->pipe[pn].region.type == SHD_SPAN            &&
-            gc->pipe[pn].array.span_variant == variant      &&
-            _S.span_fill_tex       == p->fill.tex           &&
-            _S.span_stroke_tex     == p->stroke.tex         &&
-            _S.span_grad_atlas_tex == p->grad_atlas_tex     &&
-            _S.span_mask_tex       == p->mask_tex)
-           ? EINA_TRUE : EINA_FALSE;
-
-        /* 1024-quad cap: even a matching entry is full if it's at capacity. */
-        if (can_merge &&
-            gc->pipe[pn].array.span_vertex_data_used / vsize
-                >= (size_t)SPAN_PIPE_MAX_QUADS * 6)
-          can_merge = EINA_FALSE;
-
-        if (!can_merge)
-          {
-             pn = gc->state.top_pipe + 1;
-             if (pn >= gc->shared->info.tune.pipes.max)
-               return -1; /* caller must flush and retry */
-             gc->state.top_pipe = pn;
-          }
-     }
-#undef _S
-
-   /* Store the pool reciprocals: frame-constant scalars uploaded as uniforms
-    * at flush time.  The 6 merge-predicate fields (variant, fill_tex,
-    * stroke_tex, grad_atlas_tex, mask_tex, region.type) are written by the
-    * caller after this returns, since they only need to be set on the path
-    * that allocates a fresh entry. */
-   gc->pipe[pn].shader.span_inv_tw    = _inv_tw;
-   gc->pipe[pn].shader.span_inv_th    = _inv_th;
-
-   return pn;
-}
-
-void
-evas_gl_common_context_span_push(Evas_Engine_GL_Context *gc,
-                                 const Span_Pipe_Params *p,
-                                 const GLfloat ndc_quad[8])
-{
-   /* Precompute reciprocals once for the merge predicate. */
-   float _inv_tw = 1.0f / (float)p->pool_w;
-   float _inv_th = 1.0f / (float)p->pool_h;
-
-   /* Classify each bound side as solid or gradient.  An unbound side
-    * (tex == 0) is "none" and does not influence variant selection.
-    * Span_Data_Type values: 1=Solid, 2=LinearGradient, 3=RadialGradient.
-    * SPAN_FILL_TYPE_GRADIENT_MIN == 2 (defined in evas_ector_gl_span_types.h). */
-   const int fill_is_grad   = (p->fill.tex   && p->fill.type   >= SPAN_FILL_TYPE_GRADIENT_MIN);
-   const int stroke_is_grad = (p->stroke.tex && p->stroke.type >= SPAN_FILL_TYPE_GRADIENT_MIN);
-   const int fill_is_solid  = (p->fill.tex   && !fill_is_grad);
-   const int stroke_is_solid = (p->stroke.tex && !stroke_is_grad);
-
-   /* A mixed shape - gradient one side, plain colour the other - used to be
-    * split into two pushes, because the two had separate programs and so
-    * could not share a pipe entry.  That doubled the draw calls for a very
-    * ordinary shape.  The gradient program now carries a plain colour as
-    * SPAN_GRAD_TYPE_SOLID, so one entry covers both sides. */
-   (void)fill_is_solid;
-   (void)stroke_is_solid;
-
-   Span_Variant variant;
-   if (fill_is_grad || stroke_is_grad)
-     variant = (p->mask_tex != 0) ? SPAN_VARIANT_GRADIENT_MASK
-                                   : SPAN_VARIANT_GRADIENT;
-   else
-     variant = (p->mask_tex != 0) ? SPAN_VARIANT_SOLID_MASK
-                                   : SPAN_VARIANT_SOLID;
-
-   int pn;
- again:
-   pn = _span_pipe_find_or_alloc(gc, p, variant, _inv_tw, _inv_th);
-   if (pn < 0)
-     {
-        shader_array_flush(gc);
-        goto again;
-     }
-
-#define _S gc->pipe[pn].shader
-   /* Initialise pipe entry metadata and the 5 predicate fields.
-    * Per-shape data goes directly into the span_vertex_data buffer below. */
-   gc->pipe[pn].region.type       = SHD_SPAN;
-   gc->pipe[pn].shader.prog       = &_span_prog_dummy;
-   gc->pipe[pn].shader.cur_tex    = p->fill.tex ? p->fill.tex : p->stroke.tex;
-   gc->pipe[pn].shader.blend      = EINA_TRUE;
-   gc->pipe[pn].shader.render_op  = EVAS_RENDER_BLEND;
-   gc->pipe[pn].shader.clip       = 0;
-   gc->pipe[pn].shader.smooth     = 0;
-
-   /* The 5 merge-predicate fields (inv_tw/th initialised by _span_pipe_find_or_alloc). */
-   _S.span_fill_tex       = p->fill.tex;
-   _S.span_stroke_tex     = p->stroke.tex;
-   _S.span_grad_atlas_tex = p->grad_atlas_tex;
-   _S.span_mask_tex       = p->mask_tex;
-#undef _S
-
-   gc->pipe[pn].array.line        = 0;
-   gc->pipe[pn].array.use_vertex  = 0;
-   gc->pipe[pn].array.use_color   = 0;
-   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_mask    = 0;
-   gc->pipe[pn].array.use_masksam = 0;
-
-   pipe_region_expand(gc, pn, p->x, p->y, p->w, p->h);
-   /* Span pipes carry all geometry in span_vertex_data; array.vertex is not
-    * used.  Bump array.num directly so the flush trigger fires (num > 0).
-    * Set havestuff so shader_array_flush does not bail early on span-only frames. */
-   gc->havestuff = EINA_TRUE;
-   gc->pipe[pn].array.num += 6;
-
-   /* Fill the per-variant interleaved vertex buffer — this is the source of
-    * truth for span_shader_pipe_flush starting in Task 4. */
-   {
-      const size_t vsize  = span_vertex_size(variant);
-      const size_t needed = gc->pipe[pn].array.span_vertex_data_used + 6 * vsize;
-      if (gc->pipe[pn].array.span_vertex_data_size < needed)
-        {
-           size_t new_size = gc->pipe[pn].array.span_vertex_data_size;
-           if (new_size == 0) new_size = vsize * 6;
-           while (new_size < needed) new_size *= 2;
-           void *grown = realloc(gc->pipe[pn].array.span_vertex_data, new_size);
-           if (!grown)
-             {
-                /* OOM: drop this push.  array.num was already bumped by PIPE_GROW;
-                 * flush will see the count but span_vertex_data_used is short.
-                 * span_shader_pipe_flush guards on span_vertex_data != NULL. */
-                return;
-             }
-           gc->pipe[pn].array.span_vertex_data      = grown;
-           gc->pipe[pn].array.span_vertex_data_size = new_size;
-        }
-      void *write_ptr = (char *)gc->pipe[pn].array.span_vertex_data
-                      + gc->pipe[pn].array.span_vertex_data_used;
-      evas_gl_common_span_fill_vertices(write_ptr, variant, p, ndc_quad);
-      gc->pipe[pn].array.span_vertex_data_used += 6 * vsize;
-      gc->pipe[pn].array.span_variant            = variant;
-   }
-}
-
 #define SWAP(a, b, tmp) \
    tmp = *a; \
    *a = *b; \
@@ -4344,29 +4140,6 @@ shader_array_flush(Evas_Engine_GL_Context *gc)
         pipe_done++;
         gc->flushnum++;
 
-        /* SHD_SPAN pipes are handled entirely by the span-lookup shader path.
-         * They bypass the Evas shader program system because they own their
-         * own GLSL programs compiled and managed by evas_ector_gl_span_shader.c.
-         * After the flush the Evas program state cache must be invalidated
-         * (gc->state.current.prog = NULL) so the next non-span pipe re-binds
-         * its own program. */
-        if (gc->pipe[i].region.type == SHD_SPAN)
-          {
-             span_shader_pipe_flush(gc, i);
-             /* Reset both num and alloc so the next push re-allocates
-              * arrays with the correct use_* flags.  Without this, a
-              * reused pipe keeps the old alloc count and array_alloc()
-              * skips allocation — leaving texuv etc. as NULL when a
-              * subsequent IMAGE push expects them. */
-             gc->pipe[i].array.num = 0;
-             gc->pipe[i].array.alloc = 0;
-             /* Reset span_vertex_data_used so the buffer is reused
-              * from the start on the next flush cycle (size stays
-              * allocated as a high-water mark). */
-             gc->pipe[i].array.span_vertex_data_used = 0;
-             continue;
-          }
-
         if (prog != gc->state.current.prog)
           {
              glUseProgram(prog->prog);
@@ -4722,7 +4495,6 @@ shader_array_flush(Evas_Engine_GL_Context *gc)
           }
 
         // use_vertex is always true here.  Span pipes take the early-return path
-        // above (they use span_vertex_data + a VBO via span_shader_pipe_flush,
         // not array.vertex).  Non-span pipes always populate array.vertex via
         // PIPE_GROW.
         glVertexAttribPointer(SHAD_VERTEX, VERTEX_CNT, GL_FLOAT, GL_FALSE, 0, vertex_ptr);
@@ -5065,7 +4837,6 @@ shader_array_flush(Evas_Engine_GL_Context *gc)
 
         gc->pipe[i].array.num = 0;
         gc->pipe[i].array.alloc = 0;
-        gc->pipe[i].array.span_vertex_data_used = 0;
 
         if (glsym_glMapBuffer && glsym_glUnmapBuffer)
           {
diff --git a/src/modules/evas/engines/gl_generic/evas_ector_gl_grad_atlas.c b/src/modules/evas/engines/gl_generic/evas_ector_gl_grad_atlas.c
index 2389ffae74..a548d48435 100644
--- a/src/modules/evas/engines/gl_generic/evas_ector_gl_grad_atlas.c
+++ b/src/modules/evas/engines/gl_generic/evas_ector_gl_grad_atlas.c
@@ -1,4 +1,3 @@
-/* SPDX-License-Identifier: LGPL-2.1-only */
 #ifdef HAVE_CONFIG_H
 # include "config.h"
 #endif
diff --git a/src/modules/evas/engines/gl_generic/evas_ector_gl_grad_atlas.h b/src/modules/evas/engines/gl_generic/evas_ector_gl_grad_atlas.h
index acd38a578a..f15ae91e91 100644
--- a/src/modules/evas/engines/gl_generic/evas_ector_gl_grad_atlas.h
+++ b/src/modules/evas/engines/gl_generic/evas_ector_gl_grad_atlas.h
@@ -1,4 +1,3 @@
-/* SPDX-License-Identifier: LGPL-2.1-only */
 #ifndef EVAS_ECTOR_GL_GRAD_ATLAS_H
 #define EVAS_ECTOR_GL_GRAD_ATLAS_H
 
diff --git a/src/modules/evas/engines/gl_generic/evas_ector_gl_span.c b/src/modules/evas/engines/gl_generic/evas_ector_gl_span.c
index f826ca9951..f019d3908b 100644
--- a/src/modules/evas/engines/gl_generic/evas_ector_gl_span.c
+++ b/src/modules/evas/engines/gl_generic/evas_ector_gl_span.c
@@ -1,4 +1,3 @@
-/* SPDX-License-Identifier: LGPL-2.1-only */
 /*
  * Span-buffer collector for the Ector GL engine.
  *
diff --git a/src/modules/evas/engines/gl_generic/evas_ector_gl_span.h b/src/modules/evas/engines/gl_generic/evas_ector_gl_span.h
index 62bd2e09c8..5554ee1153 100644
--- a/src/modules/evas/engines/gl_generic/evas_ector_gl_span.h
+++ b/src/modules/evas/engines/gl_generic/evas_ector_gl_span.h
@@ -1,4 +1,3 @@
-/* SPDX-License-Identifier: LGPL-2.1-only */
 /*
  * Span-buffer collector for the Ector GL engine.
  *
@@ -424,27 +423,11 @@ Eina_Bool span_path_usable(void);
  */
 void span_shader_shutdown(void);
 
-/* span_shader_pipe_flush() uses Evas_Engine_GL_Context which is only
+/* span_pass_draw() uses Evas_Engine_GL_Context which is only
  * available when evas_gl_common.h has been included before this header.
  * Guard the declaration so non-GL translation units (e.g., unit tests)
  * can still include this header without the full GL context definition. */
 #ifdef EVAS_GL_COMMON_H
-/**
- * Flush one SHD_SPAN pipe entry from the Evas GL shader_array_flush() loop.
- *
- * Called by shader_array_flush() in evas_gl_context.c when a pipe with
- * region.type == SHD_SPAN is encountered.  The function reads vertex data
- * and span shader parameters from gc->pipe[pipe_idx] and issues a single
- * glDrawArrays call through the span-lookup GLSL program.
- *
- * A weak default no-op stub is provided in evas_gl_context.c so that engine
- * modules that do not include the span shader (e.g., pure gl_x11 without
- * VG support) still link cleanly.
- *
- * @param gc        Evas GL context.
- * @param pipe_idx  Index of the pipe being flushed.
- */
-void span_shader_pipe_flush(Evas_Engine_GL_Context *gc, int pipe_idx);
 
 /**
  * Render one VG object's span quads straight into @p target's framebuffer.
diff --git a/src/modules/evas/engines/gl_generic/evas_ector_gl_span_shader.c b/src/modules/evas/engines/gl_generic/evas_ector_gl_span_shader.c
index 07bceb8d08..51c46740e8 100644
--- a/src/modules/evas/engines/gl_generic/evas_ector_gl_span_shader.c
+++ b/src/modules/evas/engines/gl_generic/evas_ector_gl_span_shader.c
@@ -1,4 +1,3 @@
-/* SPDX-License-Identifier: LGPL-2.1-only */
 /*
  * Span-lookup GLSL shaders for the Ector GL engine.
  *
@@ -1581,12 +1580,11 @@ done:
 }
 
 /* ------------------------------------------------------------------ */
-/* Evas pipe integration: span_shader_pipe_flush                       */
+/* Span drawing                                                        */
 /* ------------------------------------------------------------------ */
 
-/* Which program a quad needs.  Mirrors evas_gl_common_context_span_push();
- * a plain colour rides in the gradient variant, so only a genuine gradient
- * on either side selects it. */
+/* Which program a quad needs.  A plain colour rides in the gradient variant,
+ * so only a genuine gradient on either side selects it. */
 static Span_Variant
 _span_variant_of(const Span_Pipe_Params *p)
 {
@@ -1710,21 +1708,6 @@ _span_draw_batch(Evas_Engine_GL_Context *gc, Span_Variant variant,
    gc->state.current.ch         = 0;
 }
 
-void
-span_shader_pipe_flush(Evas_Engine_GL_Context *gc, int pipe_idx)
-{
-   _span_draw_batch(gc,
-                    gc->pipe[pipe_idx].array.span_variant,
-                    gc->pipe[pipe_idx].array.span_vertex_data,
-                    gc->pipe[pipe_idx].array.span_vertex_data_used,
-                    gc->pipe[pipe_idx].array.num,
-                    gc->pipe[pipe_idx].shader.span_fill_tex,
-                    gc->pipe[pipe_idx].shader.span_stroke_tex,
-                    gc->pipe[pipe_idx].shader.span_grad_atlas_tex,
-                    gc->pipe[pipe_idx].shader.span_mask_tex,
-                    gc->pipe[pipe_idx].shader.span_inv_tw,
-                    gc->pipe[pipe_idx].shader.span_inv_th);
-}
 
 /* ------------------------------------------------------------------ */
 /* Direct VG pass                                                      */
diff --git a/src/modules/evas/engines/gl_generic/evas_ector_log_restore.h b/src/modules/evas/engines/gl_generic/evas_ector_log_restore.h
index a6673c9e30..9a59206b1b 100644
--- a/src/modules/evas/engines/gl_generic/evas_ector_log_restore.h
+++ b/src/modules/evas/engines/gl_generic/evas_ector_log_restore.h
@@ -1,4 +1,3 @@
-/* SPDX-License-Identifier: LGPL-2.1-only */
 /*
  * Restore Evas log macros after ector_software_private.h clobbers them.
  * ector_private.h redefines ERR/WRN/etc. to use _ector_log_dom_global
diff --git a/src/modules/evas/engines/gl_generic/evas_engine.c b/src/modules/evas/engines/gl_generic/evas_engine.c
index 59b727c65c..49f3480e7b 100644
--- a/src/modules/evas/engines/gl_generic/evas_engine.c
+++ b/src/modules/evas/engines/gl_generic/evas_engine.c
@@ -3489,8 +3489,7 @@ eng_ector_end(void *engine,
                                        }
                                   }
 
-                                /* Pre-convert canvas-space quad to NDC for
-                                 * span_vertex_data.
+                                /* Pre-convert the canvas-space quad to NDC.
                                  *
                                  * NDC must be divided by the TARGET SURFACE
                                  * dimensions, not gc->w/gc->h.  When VG content
diff --git a/src/tests/ector/suite/ector_test_grad_atlas.c b/src/tests/ector/suite/ector_test_grad_atlas.c
index bfc54b89c4..d12e21e7a7 100644
--- a/src/tests/ector/suite/ector_test_grad_atlas.c
+++ b/src/tests/ector/suite/ector_test_grad_atlas.c
@@ -1,4 +1,20 @@
-/* SPDX-License-Identifier: LGPL-2.1-only */
+/* ECTOR - EFL retained mode drawing library
+ * Copyright (C) 2026 Cedric Bail
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library;
+ * if not, see <http://www.gnu.org/licenses/>.
+ */
 /*
  * Unit tests for the gradient ramp atlas.
  *
diff --git a/src/tests/ector/suite/ector_test_span_collector.c b/src/tests/ector/suite/ector_test_span_collector.c
index bfb8c446da..69c8262ec0 100644
--- a/src/tests/ector/suite/ector_test_span_collector.c
+++ b/src/tests/ector/suite/ector_test_span_collector.c
@@ -1,4 +1,20 @@
-/* SPDX-License-Identifier: LGPL-2.1-only */
+/* ECTOR - EFL retained mode drawing library
+ * Copyright (C) 2026 Cedric Bail
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library;
+ * if not, see <http://www.gnu.org/licenses/>.
+ */
 /*
  * Unit tests for the span-buffer collector (1-texel gap-encoded format).
  *

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.

Reply via email to