cedric pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=cf818a84be26cd5e2f57cca4b4a8ae9d5b3715f4

commit cf818a84be26cd5e2f57cca4b4a8ae9d5b3715f4
Author: Daekwang Ryu <dkdk....@samsung.com>
Date:   Wed May 17 05:46:51 2017 +0000

    evas_gl: implement EvasGL ES 3.2
    
    add a wrapper function for glFramebufferTexture.
    some bugs were fixed.
    I tested on Ubuntu 14.04(x64) and nVidia 375 driver with VK-GL-CTS
    
    Reviewed-by: Cedric BAIL <cedric.b...@free.fr>
    Differential Revision: https://phab.enlightenment.org/D4831
---
 src/lib/evas/Evas_GL.h                             | 273 ++++++-
 src/modules/evas/engines/gl_common/evas_gl_api.c   | 848 +++++++++++++--------
 .../evas/engines/gl_common/evas_gl_api_gles3_def.h |  47 ++
 3 files changed, 838 insertions(+), 330 deletions(-)

diff --git a/src/lib/evas/Evas_GL.h b/src/lib/evas/Evas_GL.h
index 4f67b1695f..d06e88a053 100644
--- a/src/lib/evas/Evas_GL.h
+++ b/src/lib/evas/Evas_GL.h
@@ -4781,7 +4781,220 @@ typedef struct __GLsync*   GLsync;
 #define GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D9
 #define GL_MAX_VERTEX_ATTRIB_BINDINGS     0x82DA
 #define GL_MAX_VERTEX_ATTRIB_STRIDE       0x82E5
+#endif
 
+/* OpenGLES 3.2 */
+#ifndef __gl32_h_
+#define __gl32_h_ 1
+
+typedef void (*GLDEBUGPROC)(GLenum source,GLenum type,GLuint id,GLenum 
severity,GLsizei length,const GLchar *message,const void *userParam);
+
+#define GL_MULTISAMPLE_LINE_WIDTH_RANGE   0x9381
+#define GL_MULTISAMPLE_LINE_WIDTH_GRANULARITY 0x9382
+#define GL_MULTIPLY                       0x9294
+#define GL_SCREEN                         0x9295
+#define GL_OVERLAY                        0x9296
+#define GL_DARKEN                         0x9297
+#define GL_LIGHTEN                        0x9298
+#define GL_COLORDODGE                     0x9299
+#define GL_COLORBURN                      0x929A
+#define GL_HARDLIGHT                      0x929B
+#define GL_SOFTLIGHT                      0x929C
+#define GL_DIFFERENCE                     0x929E
+#define GL_EXCLUSION                      0x92A0
+#define GL_HSL_HUE                        0x92AD
+#define GL_HSL_SATURATION                 0x92AE
+#define GL_HSL_COLOR                      0x92AF
+#define GL_HSL_LUMINOSITY                 0x92B0
+#define GL_DEBUG_OUTPUT_SYNCHRONOUS       0x8242
+#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH 0x8243
+#define GL_DEBUG_CALLBACK_FUNCTION        0x8244
+#define GL_DEBUG_CALLBACK_USER_PARAM      0x8245
+#define GL_DEBUG_SOURCE_API               0x8246
+#define GL_DEBUG_SOURCE_WINDOW_SYSTEM     0x8247
+#define GL_DEBUG_SOURCE_SHADER_COMPILER   0x8248
+#define GL_DEBUG_SOURCE_THIRD_PARTY       0x8249
+#define GL_DEBUG_SOURCE_APPLICATION       0x824A
+#define GL_DEBUG_SOURCE_OTHER             0x824B
+#define GL_DEBUG_TYPE_ERROR               0x824C
+#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR 0x824D
+#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR  0x824E
+#define GL_DEBUG_TYPE_PORTABILITY         0x824F
+#define GL_DEBUG_TYPE_PERFORMANCE         0x8250
+#define GL_DEBUG_TYPE_OTHER               0x8251
+#define GL_DEBUG_TYPE_MARKER              0x8268
+#define GL_DEBUG_TYPE_PUSH_GROUP          0x8269
+#define GL_DEBUG_TYPE_POP_GROUP           0x826A
+#define GL_DEBUG_SEVERITY_NOTIFICATION    0x826B
+#define GL_MAX_DEBUG_GROUP_STACK_DEPTH    0x826C
+#define GL_DEBUG_GROUP_STACK_DEPTH        0x826D
+#define GL_BUFFER                         0x82E0
+#define GL_SHADER                         0x82E1
+#define GL_PROGRAM                        0x82E2
+#define GL_VERTEX_ARRAY                   0x8074
+#define GL_QUERY                          0x82E3
+#define GL_PROGRAM_PIPELINE               0x82E4
+#define GL_SAMPLER                        0x82E6
+#define GL_MAX_LABEL_LENGTH               0x82E8
+#define GL_MAX_DEBUG_MESSAGE_LENGTH       0x9143
+#define GL_MAX_DEBUG_LOGGED_MESSAGES      0x9144
+#define GL_DEBUG_LOGGED_MESSAGES          0x9145
+#define GL_DEBUG_SEVERITY_HIGH            0x9146
+#define GL_DEBUG_SEVERITY_MEDIUM          0x9147
+#define GL_DEBUG_SEVERITY_LOW             0x9148
+#define GL_DEBUG_OUTPUT                   0x92E0
+#define GL_CONTEXT_FLAG_DEBUG_BIT         0x00000002
+#define GL_STACK_OVERFLOW                 0x0503
+#define GL_STACK_UNDERFLOW                0x0504
+#define GL_GEOMETRY_SHADER                0x8DD9
+#define GL_GEOMETRY_SHADER_BIT            0x00000004
+#define GL_GEOMETRY_VERTICES_OUT          0x8916
+#define GL_GEOMETRY_INPUT_TYPE            0x8917
+#define GL_GEOMETRY_OUTPUT_TYPE           0x8918
+#define GL_GEOMETRY_SHADER_INVOCATIONS    0x887F
+#define GL_LAYER_PROVOKING_VERTEX         0x825E
+#define GL_LINES_ADJACENCY                0x000A
+#define GL_LINE_STRIP_ADJACENCY           0x000B
+#define GL_TRIANGLES_ADJACENCY            0x000C
+#define GL_TRIANGLE_STRIP_ADJACENCY       0x000D
+#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS 0x8DDF
+#define GL_MAX_GEOMETRY_UNIFORM_BLOCKS    0x8A2C
+#define GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS 0x8A32
+#define GL_MAX_GEOMETRY_INPUT_COMPONENTS  0x9123
+#define GL_MAX_GEOMETRY_OUTPUT_COMPONENTS 0x9124
+#define GL_MAX_GEOMETRY_OUTPUT_VERTICES   0x8DE0
+#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS 0x8DE1
+#define GL_MAX_GEOMETRY_SHADER_INVOCATIONS 0x8E5A
+#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS 0x8C29
+#define GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS 0x92CF
+#define GL_MAX_GEOMETRY_ATOMIC_COUNTERS   0x92D5
+#define GL_MAX_GEOMETRY_IMAGE_UNIFORMS    0x90CD
+#define GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS 0x90D7
+#define GL_FIRST_VERTEX_CONVENTION        0x8E4D
+#define GL_LAST_VERTEX_CONVENTION         0x8E4E
+#define GL_UNDEFINED_VERTEX               0x8260
+#define GL_PRIMITIVES_GENERATED           0x8C87
+#define GL_FRAMEBUFFER_DEFAULT_LAYERS     0x9312
+#define GL_MAX_FRAMEBUFFER_LAYERS         0x9317
+#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS 0x8DA8
+#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED 0x8DA7
+#define GL_REFERENCED_BY_GEOMETRY_SHADER  0x9309
+#define GL_PRIMITIVE_BOUNDING_BOX         0x92BE
+#define GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT 0x00000004
+#define GL_CONTEXT_FLAGS                  0x821E
+#define GL_LOSE_CONTEXT_ON_RESET          0x8252
+#define GL_GUILTY_CONTEXT_RESET           0x8253
+#define GL_INNOCENT_CONTEXT_RESET         0x8254
+#define GL_UNKNOWN_CONTEXT_RESET          0x8255
+#define GL_RESET_NOTIFICATION_STRATEGY    0x8256
+#define GL_NO_RESET_NOTIFICATION          0x8261
+#define GL_CONTEXT_LOST                   0x0507
+#define GL_SAMPLE_SHADING                 0x8C36
+#define GL_MIN_SAMPLE_SHADING_VALUE       0x8C37
+#define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET 0x8E5B
+#define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET 0x8E5C
+#define GL_FRAGMENT_INTERPOLATION_OFFSET_BITS 0x8E5D
+#define GL_PATCHES                        0x000E
+#define GL_PATCH_VERTICES                 0x8E72
+#define GL_TESS_CONTROL_OUTPUT_VERTICES   0x8E75
+#define GL_TESS_GEN_MODE                  0x8E76
+#define GL_TESS_GEN_SPACING               0x8E77
+#define GL_TESS_GEN_VERTEX_ORDER          0x8E78
+#define GL_TESS_GEN_POINT_MODE            0x8E79
+#define GL_ISOLINES                       0x8E7A
+#define GL_QUADS                          0x0007
+#define GL_FRACTIONAL_ODD                 0x8E7B
+#define GL_FRACTIONAL_EVEN                0x8E7C
+#define GL_MAX_PATCH_VERTICES             0x8E7D
+#define GL_MAX_TESS_GEN_LEVEL             0x8E7E
+#define GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E7F
+#define GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E80
+#define GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS 0x8E81
+#define GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS 0x8E82
+#define GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS 0x8E83
+#define GL_MAX_TESS_PATCH_COMPONENTS      0x8E84
+#define GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS 0x8E85
+#define GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS 0x8E86
+#define GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS 0x8E89
+#define GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS 0x8E8A
+#define GL_MAX_TESS_CONTROL_INPUT_COMPONENTS 0x886C
+#define GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS 0x886D
+#define GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E1E
+#define GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E1F
+#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS 0x92CD
+#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS 0x92CE
+#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS 0x92D3
+#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS 0x92D4
+#define GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS 0x90CB
+#define GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS 0x90CC
+#define GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS 0x90D8
+#define GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS 0x90D9
+#define GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED 0x8221
+#define GL_IS_PER_PATCH                   0x92E7
+#define GL_REFERENCED_BY_TESS_CONTROL_SHADER 0x9307
+#define GL_REFERENCED_BY_TESS_EVALUATION_SHADER 0x9308
+#define GL_TESS_CONTROL_SHADER            0x8E88
+#define GL_TESS_EVALUATION_SHADER         0x8E87
+#define GL_TESS_CONTROL_SHADER_BIT        0x00000008
+#define GL_TESS_EVALUATION_SHADER_BIT     0x00000010
+#define GL_TEXTURE_BORDER_COLOR           0x1004
+#define GL_CLAMP_TO_BORDER                0x812D
+#define GL_TEXTURE_BUFFER                 0x8C2A
+#define GL_TEXTURE_BUFFER_BINDING         0x8C2A
+#define GL_MAX_TEXTURE_BUFFER_SIZE        0x8C2B
+#define GL_TEXTURE_BINDING_BUFFER         0x8C2C
+#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING 0x8C2D
+#define GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT 0x919F
+#define GL_SAMPLER_BUFFER                 0x8DC2
+#define GL_INT_SAMPLER_BUFFER             0x8DD0
+#define GL_UNSIGNED_INT_SAMPLER_BUFFER    0x8DD8
+#define GL_IMAGE_BUFFER                   0x9051
+#define GL_INT_IMAGE_BUFFER               0x905C
+#define GL_UNSIGNED_INT_IMAGE_BUFFER      0x9067
+#define GL_TEXTURE_BUFFER_OFFSET          0x919D
+#define GL_TEXTURE_BUFFER_SIZE            0x919E
+#define GL_COMPRESSED_RGBA_ASTC_4x4       0x93B0
+#define GL_COMPRESSED_RGBA_ASTC_5x4       0x93B1
+#define GL_COMPRESSED_RGBA_ASTC_5x5       0x93B2
+#define GL_COMPRESSED_RGBA_ASTC_6x5       0x93B3
+#define GL_COMPRESSED_RGBA_ASTC_6x6       0x93B4
+#define GL_COMPRESSED_RGBA_ASTC_8x5       0x93B5
+#define GL_COMPRESSED_RGBA_ASTC_8x6       0x93B6
+#define GL_COMPRESSED_RGBA_ASTC_8x8       0x93B7
+#define GL_COMPRESSED_RGBA_ASTC_10x5      0x93B8
+#define GL_COMPRESSED_RGBA_ASTC_10x6      0x93B9
+#define GL_COMPRESSED_RGBA_ASTC_10x8      0x93BA
+#define GL_COMPRESSED_RGBA_ASTC_10x10     0x93BB
+#define GL_COMPRESSED_RGBA_ASTC_12x10     0x93BC
+#define GL_COMPRESSED_RGBA_ASTC_12x12     0x93BD
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4 0x93D0
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4 0x93D1
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5 0x93D2
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5 0x93D3
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6 0x93D4
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5 0x93D5
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6 0x93D6
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8 0x93D7
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5 0x93D8
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6 0x93D9
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8 0x93DA
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10 0x93DB
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10 0x93DC
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12 0x93DD
+#define GL_TEXTURE_CUBE_MAP_ARRAY         0x9009
+#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY 0x900A
+#define GL_SAMPLER_CUBE_MAP_ARRAY         0x900C
+#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW  0x900D
+#define GL_INT_SAMPLER_CUBE_MAP_ARRAY     0x900E
+#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY 0x900F
+#define GL_IMAGE_CUBE_MAP_ARRAY           0x9054
+#define GL_INT_IMAGE_CUBE_MAP_ARRAY       0x905F
+#define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY 0x906A
+#define GL_TEXTURE_2D_MULTISAMPLE_ARRAY   0x9102
+#define GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY 0x9105
+#define GL_SAMPLER_2D_MULTISAMPLE_ARRAY   0x910B
+#define GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910C
+#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910D
 #endif
 
 /*
@@ -4927,8 +5140,9 @@ typedef unsigned long long EvasGLTime;
  * Version 3: [version 2] + Wayland extensions
  * Version 4: [version 3] + GLES3.0 + GLES3.0 extensions
  * Version 5: [version 4] + GLES3.1
+ * Version 6: [version 5] + GLES3.2
  */
-#define EVAS_GL_API_VERSION 5
+#define EVAS_GL_API_VERSION 6
 
 /**
  * @brief The Evas GL API
@@ -5855,6 +6069,63 @@ EvasGLImage *img = glapi->evasglCreateImageForContext
     void         (*glVertexBindingDivisor) (GLuint bindingindex, GLuint 
divisor);
    /** @} */
 
+   /**
+    * @anchor gles3.2
+    * @name OpenGL-ES 3.2.
+    *
+    * Evas_GL_API version 6.
+    *
+    * The following functions are supported in all OpenGL-ES 3.2 contexts.
+    * @{
+    */
+   /* This defines shows that Evas_GL_API supports GLES3.2 APIs */
+    void         (*glBlendBarrier) (void);
+    void         (*glCopyImageSubData) (GLuint srcName, GLenum srcTarget, 
GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum 
dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei 
srcWidth, GLsizei srcHeight, GLsizei srcDepth);
+    void         (*glDebugMessageControl) (GLenum source, GLenum type, GLenum 
severity, GLsizei count, const GLuint *ids, GLboolean enabled);
+    void         (*glDebugMessageInsert) (GLenum source, GLenum type, GLuint 
id, GLenum severity, GLsizei length, const GLchar *buf);
+    void         (*glDebugMessageCallback) (GLDEBUGPROC callback, const void 
*userParam);
+    GLuint       (*glGetDebugMessageLog) (GLuint count, GLsizei bufSize, 
GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei 
*lengths, GLchar *messageLog);
+    void         (*glPushDebugGroup) (GLenum source, GLuint id, GLsizei 
length, const GLchar *message);
+    void         (*glPopDebugGroup) (void);
+    void         (*glObjectLabel) (GLenum identifier, GLuint name, GLsizei 
length, const GLchar *label);
+    void         (*glGetObjectLabel) (GLenum identifier, GLuint name, GLsizei 
bufSize, GLsizei *length, GLchar *label);
+    void         (*glObjectPtrLabel) (const void *ptr, GLsizei length, const 
GLchar *label);
+    void         (*glGetObjectPtrLabel) (const void *ptr, GLsizei bufSize, 
GLsizei *length, GLchar *label);
+    //void (*glGetPointerv) (GLenum pname, void **params);
+    void         (*glEnablei) (GLenum target, GLuint index);
+    void         (*glDisablei) (GLenum target, GLuint index);
+    void         (*glBlendEquationi) (GLuint buf, GLenum mode);
+    void         (*glBlendEquationSeparatei) (GLuint buf, GLenum modeRGB, 
GLenum modeAlpha);
+    void         (*glBlendFunci) (GLuint buf, GLenum src, GLenum dst);
+    void         (*glBlendFuncSeparatei) (GLuint buf, GLenum srcRGB, GLenum 
dstRGB, GLenum srcAlpha, GLenum dstAlpha);
+    void         (*glColorMaski) (GLuint index, GLboolean r, GLboolean g, 
GLboolean b, GLboolean a);
+    GLboolean    (*glIsEnabledi) (GLenum target, GLuint index);
+    void         (*glDrawElementsBaseVertex) (GLenum mode, GLsizei count, 
GLenum type, const void *indices, GLint basevertex);
+    void         (*glDrawRangeElementsBaseVertex) (GLenum mode, GLuint start, 
GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex);
+    void         (*glDrawElementsInstancedBaseVertex) (GLenum mode, GLsizei 
count, GLenum type, const void *indices, GLsizei instancecount, GLint 
basevertex);
+    void         (*glFramebufferTexture) (GLenum target, GLenum attachment, 
GLuint texture, GLint level);
+    void         (*glPrimitiveBoundingBox) (GLfloat minX, GLfloat minY, 
GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat 
maxW);
+    GLenum       (*glGetGraphicsResetStatus) (void);
+    void         (*glReadnPixels) (GLint x, GLint y, GLsizei width, GLsizei 
height, GLenum format, GLenum type, GLsizei bufSize, void *data);
+    void         (*glGetnUniformfv) (GLuint program, GLint location, GLsizei 
bufSize, GLfloat *params);
+    void         (*glGetnUniformiv) (GLuint program, GLint location, GLsizei 
bufSize, GLint *params);
+    void         (*glGetnUniformuiv) (GLuint program, GLint location, GLsizei 
bufSize, GLuint *params);
+    void         (*glMinSampleShading) (GLfloat value);
+    void         (*glPatchParameteri) (GLenum pname, GLint value);
+    void         (*glTexParameterIiv) (GLenum target, GLenum pname, const 
GLint *params);
+    void         (*glTexParameterIuiv) (GLenum target, GLenum pname, const 
GLuint *params);
+    void         (*glGetTexParameterIiv) (GLenum target, GLenum pname, GLint 
*params);
+    void         (*glGetTexParameterIuiv) (GLenum target, GLenum pname, GLuint 
*params);
+    void         (*glSamplerParameterIiv) (GLuint sampler, GLenum pname, const 
GLint *param);
+    void         (*glSamplerParameterIuiv) (GLuint sampler, GLenum pname, 
const GLuint *param);
+    void         (*glGetSamplerParameterIiv) (GLuint sampler, GLenum pname, 
GLint *params);
+    void         (*glGetSamplerParameterIuiv) (GLuint sampler, GLenum pname, 
GLuint *params);
+    void         (*glTexBuffer) (GLenum target, GLenum internalformat, GLuint 
buffer);
+    void         (*glTexBufferRange) (GLenum target, GLenum internalformat, 
GLuint buffer, GLintptr offset, GLsizeiptr size);
+    void         (*glTexStorage3DMultisample) (GLenum target, GLsizei samples, 
GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean 
fixedsamplelocations);
+
+   /** @} */
+
    /* Future calls will be added down here for expansion, when adding
     * new APIs here, please bump the struct version number (together with
     * the EFL version bump).
diff --git a/src/modules/evas/engines/gl_common/evas_gl_api.c 
b/src/modules/evas/engines/gl_common/evas_gl_api.c
index 05ec7ee02c..1494a881bc 100644
--- a/src/modules/evas/engines/gl_common/evas_gl_api.c
+++ b/src/modules/evas/engines/gl_common/evas_gl_api.c
@@ -800,6 +800,66 @@ _evgl_glFramebufferParameteri(GLenum target, GLenum pname, 
GLint param)
    _gles3_api.glFramebufferParameteri(target, pname, param);
 }
 
+static void
+_evgl_glFramebufferTexture(GLenum target, GLenum attachment, GLuint texture, 
GLint level)
+{
+    EVGL_Resource *rsc;
+    EVGL_Context *ctx;
+
+    if (!(rsc=_evgl_tls_resource_get()))
+      {
+         ERR("Unable to execute GL command. Error retrieving tls");
+         return;
+      }
+
+    if (!rsc->current_eng)
+      {
+         ERR("Unable to retrive Current Engine");
+         return;
+      }
+
+    ctx = rsc->current_ctx;
+    if (!ctx)
+      {
+         ERR("Unable to retrive Current Context");
+         return;
+      }
+
+    if (!_evgl_direct_enabled())
+      {
+         if (ctx->version == EVAS_GL_GLES_2_X)
+           {
+              if (target == GL_FRAMEBUFFER && ctx->current_fbo == 0)
+                {
+                   SET_GL_ERROR(GL_INVALID_OPERATION);
+                   return;
+                }
+           }
+         else if (ctx->version == EVAS_GL_GLES_3_X)
+           {
+              if (target == GL_DRAW_FRAMEBUFFER || target == GL_FRAMEBUFFER)
+                {
+                   if (ctx->current_draw_fbo == 0)
+                     {
+                        SET_GL_ERROR(GL_INVALID_OPERATION);
+                        return;
+                     }
+                }
+              else if (target == GL_READ_FRAMEBUFFER)
+                {
+                   if (ctx->current_read_fbo == 0)
+                     {
+                        SET_GL_ERROR(GL_INVALID_OPERATION);
+                        return;
+                     }
+                }
+           }
+      }
+
+   _gles3_api.glFramebufferTexture(target, attachment, texture, level);
+}
+
+
 static void
 _evgl_glFramebufferTexture2D(GLenum target, GLenum attachment, GLenum 
textarget, GLuint texture, GLint level)
 {
@@ -2724,114 +2784,54 @@ _normal_gles3_api_get(Evas_GL_API *funcs, int 
minor_version)
 
 // GLES 3.0 NEW APIs
 #define ORD(name) EVAS_API_OVERRIDE(name, funcs, evgl_gles3_)
-   ORD(glBeginQuery);
-   ORD(glBeginTransformFeedback);
-   ORD(glBindBufferBase);
-   ORD(glBindBufferRange);
-   ORD(glBindSampler);
-   ORD(glBindTransformFeedback);
-   ORD(glBindVertexArray);
-   ORD(glBlitFramebuffer);
-   ORD(glClearBufferfi);
-   ORD(glClearBufferfv);
-   ORD(glClearBufferiv);
-   ORD(glClearBufferuiv);
-   ORD(glClientWaitSync);
-   ORD(glCompressedTexImage3D);
-   ORD(glCompressedTexSubImage3D);
-   ORD(glCopyBufferSubData);
-   ORD(glCopyTexSubImage3D);
-   ORD(glDeleteQueries);
-   ORD(glDeleteSamplers);
-   ORD(glDeleteSync);
-   ORD(glDeleteTransformFeedbacks);
-   ORD(glDeleteVertexArrays);
-   ORD(glDrawArraysInstanced);
-   ORD(glDrawBuffers);
-   ORD(glDrawElementsInstanced);
-   ORD(glDrawRangeElements);
-   ORD(glEndQuery);
-   ORD(glEndTransformFeedback);
-   ORD(glFenceSync);
-   ORD(glFlushMappedBufferRange);
-   ORD(glFramebufferTextureLayer);
-   ORD(glGenQueries);
-   ORD(glGenSamplers);
-   ORD(glGenTransformFeedbacks);
-   ORD(glGenVertexArrays);
-   ORD(glGetActiveUniformBlockiv);
-   ORD(glGetActiveUniformBlockName);
-   ORD(glGetActiveUniformsiv);
-   ORD(glGetBufferParameteri64v);
-   ORD(glGetBufferPointerv);
-   ORD(glGetFragDataLocation);
-   ORD(glGetInteger64i_v);
-   ORD(glGetInteger64v);
-   ORD(glGetIntegeri_v);
-   ORD(glGetInternalformativ);
-   ORD(glGetProgramBinary);
-   ORD(glGetQueryiv);
-   ORD(glGetQueryObjectuiv);
-   ORD(glGetSamplerParameterfv);
-   ORD(glGetSamplerParameteriv);
-   ORD(glGetStringi);
-   ORD(glGetSynciv);
-   ORD(glGetTransformFeedbackVarying);
-   ORD(glGetUniformBlockIndex);
-   ORD(glGetUniformIndices);
-   ORD(glGetUniformuiv);
-   ORD(glGetVertexAttribIiv);
-   ORD(glGetVertexAttribIuiv);
-   ORD(glInvalidateFramebuffer);
-   ORD(glInvalidateSubFramebuffer);
-   ORD(glIsQuery);
-   ORD(glIsSampler);
-   ORD(glIsSync);
-   ORD(glIsTransformFeedback);
-   ORD(glIsVertexArray);
-   ORD(glMapBufferRange);
-   ORD(glPauseTransformFeedback);
-   ORD(glProgramBinary);
-   ORD(glProgramParameteri);
-   ORD(glReadBuffer);
-   ORD(glRenderbufferStorageMultisample);
-   ORD(glResumeTransformFeedback);
-   ORD(glSamplerParameterf);
-   ORD(glSamplerParameterfv);
-   ORD(glSamplerParameteri);
-   ORD(glSamplerParameteriv);
-   ORD(glTexImage3D);
-   ORD(glTexStorage2D);
-   ORD(glTexStorage3D);
-   ORD(glTexSubImage3D);
-   ORD(glTransformFeedbackVaryings);
-   ORD(glUniform1ui);
-   ORD(glUniform1uiv);
-   ORD(glUniform2ui);
-   ORD(glUniform2uiv);
-   ORD(glUniform3ui);
-   ORD(glUniform3uiv);
-   ORD(glUniform4ui);
-   ORD(glUniform4uiv);
-   ORD(glUniformBlockBinding);
-   ORD(glUniformMatrix2x3fv);
-   ORD(glUniformMatrix3x2fv);
-   ORD(glUniformMatrix2x4fv);
-   ORD(glUniformMatrix4x2fv);
-   ORD(glUniformMatrix3x4fv);
-   ORD(glUniformMatrix4x3fv);
-   ORD(glUnmapBuffer);
-   ORD(glVertexAttribDivisor);
-   ORD(glVertexAttribI4i);
-   ORD(glVertexAttribI4iv);
-   ORD(glVertexAttribI4ui);
-   ORD(glVertexAttribI4uiv);
-   ORD(glVertexAttribIPointer);
-   ORD(glWaitSync);
-
-   if (minor_version > 0)
-     {
-        //GLES 3.1
+   switch (minor_version)
+     {
+      case 2:
+        ORD(glBlendBarrier);
+        ORD(glCopyImageSubData);
+        ORD(glDebugMessageControl);
+        ORD(glDebugMessageInsert);
+        ORD(glDebugMessageCallback);
+        ORD(glGetDebugMessageLog);
+        ORD(glPushDebugGroup);
+        ORD(glPopDebugGroup);
+        ORD(glObjectLabel);
+        ORD(glGetObjectLabel);
+        ORD(glObjectPtrLabel);
+        ORD(glGetObjectPtrLabel);
+        ORD(glGetPointerv);
+        ORD(glEnablei);
+        ORD(glDisablei);
+        ORD(glBlendEquationi);
+        ORD(glBlendEquationSeparatei);
+        ORD(glBlendFunci);
+        ORD(glBlendFuncSeparatei);
+        ORD(glColorMaski);
+        ORD(glIsEnabledi);
+        ORD(glDrawElementsBaseVertex);
+        ORD(glDrawRangeElementsBaseVertex);
+        ORD(glDrawElementsInstancedBaseVertex);
+        ORD(glFramebufferTexture);
+        ORD(glPrimitiveBoundingBox);
+        ORD(glGetGraphicsResetStatus);
+        ORD(glReadnPixels);
+        ORD(glGetnUniformfv);
+        ORD(glGetnUniformiv);
+        ORD(glGetnUniformuiv);
+        ORD(glMinSampleShading);
+        ORD(glPatchParameteri);
+        ORD(glTexParameterIiv);
+        ORD(glTexParameterIuiv);
+        ORD(glGetTexParameterIiv);
+        ORD(glGetTexParameterIuiv);
+        ORD(glSamplerParameterIiv);
+        ORD(glSamplerParameterIuiv);
+        ORD(glGetSamplerParameterIiv);
+        ORD(glGetSamplerParameterIuiv);
+        ORD(glTexBuffer);
+        ORD(glTexBufferRange);
+        ORD(glTexStorage3DMultisample);
+      case 1:
         ORD(glDispatchCompute);
         ORD(glDispatchComputeIndirect);
         ORD(glDrawArraysIndirect);
@@ -2900,6 +2900,111 @@ _normal_gles3_api_get(Evas_GL_API *funcs, int 
minor_version)
         ORD(glVertexAttribIFormat);
         ORD(glVertexAttribBinding);
         ORD(glVertexBindingDivisor);
+      case 0:
+        ORD(glBeginQuery);
+        ORD(glBeginTransformFeedback);
+        ORD(glBindBufferBase);
+        ORD(glBindBufferRange);
+        ORD(glBindSampler);
+        ORD(glBindTransformFeedback);
+        ORD(glBindVertexArray);
+        ORD(glBlitFramebuffer);
+        ORD(glClearBufferfi);
+        ORD(glClearBufferfv);
+        ORD(glClearBufferiv);
+        ORD(glClearBufferuiv);
+        ORD(glClientWaitSync);
+        ORD(glCompressedTexImage3D);
+        ORD(glCompressedTexSubImage3D);
+        ORD(glCopyBufferSubData);
+        ORD(glCopyTexSubImage3D);
+        ORD(glDeleteQueries);
+        ORD(glDeleteSamplers);
+        ORD(glDeleteSync);
+        ORD(glDeleteTransformFeedbacks);
+        ORD(glDeleteVertexArrays);
+        ORD(glDrawArraysInstanced);
+        ORD(glDrawBuffers);
+        ORD(glDrawElementsInstanced);
+        ORD(glDrawRangeElements);
+        ORD(glEndQuery);
+        ORD(glEndTransformFeedback);
+        ORD(glFenceSync);
+        ORD(glFlushMappedBufferRange);
+        ORD(glFramebufferTextureLayer);
+        ORD(glGenQueries);
+        ORD(glGenSamplers);
+        ORD(glGenTransformFeedbacks);
+        ORD(glGenVertexArrays);
+        ORD(glGetActiveUniformBlockiv);
+        ORD(glGetActiveUniformBlockName);
+        ORD(glGetActiveUniformsiv);
+        ORD(glGetBufferParameteri64v);
+        ORD(glGetBufferPointerv);
+        ORD(glGetFragDataLocation);
+        ORD(glGetInteger64i_v);
+        ORD(glGetInteger64v);
+        ORD(glGetIntegeri_v);
+        ORD(glGetInternalformativ);
+        ORD(glGetProgramBinary);
+        ORD(glGetQueryiv);
+        ORD(glGetQueryObjectuiv);
+        ORD(glGetSamplerParameterfv);
+        ORD(glGetSamplerParameteriv);
+        ORD(glGetStringi);
+        ORD(glGetSynciv);
+        ORD(glGetTransformFeedbackVarying);
+        ORD(glGetUniformBlockIndex);
+        ORD(glGetUniformIndices);
+        ORD(glGetUniformuiv);
+        ORD(glGetVertexAttribIiv);
+        ORD(glGetVertexAttribIuiv);
+        ORD(glInvalidateFramebuffer);
+        ORD(glInvalidateSubFramebuffer);
+        ORD(glIsQuery);
+        ORD(glIsSampler);
+        ORD(glIsSync);
+        ORD(glIsTransformFeedback);
+        ORD(glIsVertexArray);
+        ORD(glMapBufferRange);
+        ORD(glPauseTransformFeedback);
+        ORD(glProgramBinary);
+        ORD(glProgramParameteri);
+        ORD(glReadBuffer);
+        ORD(glRenderbufferStorageMultisample);
+        ORD(glResumeTransformFeedback);
+        ORD(glSamplerParameterf);
+        ORD(glSamplerParameterfv);
+        ORD(glSamplerParameteri);
+        ORD(glSamplerParameteriv);
+        ORD(glTexImage3D);
+        ORD(glTexStorage2D);
+        ORD(glTexStorage3D);
+        ORD(glTexSubImage3D);
+        ORD(glTransformFeedbackVaryings);
+        ORD(glUniform1ui);
+        ORD(glUniform1uiv);
+        ORD(glUniform2ui);
+        ORD(glUniform2uiv);
+        ORD(glUniform3ui);
+        ORD(glUniform3uiv);
+        ORD(glUniform4ui);
+        ORD(glUniform4uiv);
+        ORD(glUniformBlockBinding);
+        ORD(glUniformMatrix2x3fv);
+        ORD(glUniformMatrix3x2fv);
+        ORD(glUniformMatrix2x4fv);
+        ORD(glUniformMatrix4x2fv);
+        ORD(glUniformMatrix3x4fv);
+        ORD(glUniformMatrix4x3fv);
+        ORD(glUnmapBuffer);
+        ORD(glVertexAttribDivisor);
+        ORD(glVertexAttribI4i);
+        ORD(glVertexAttribI4iv);
+        ORD(glVertexAttribI4ui);
+        ORD(glVertexAttribI4uiv);
+        ORD(glVertexAttribIPointer);
+        ORD(glWaitSync);
      }
 
 #undef ORD
@@ -3057,115 +3162,54 @@ _debug_gles3_api_get(Evas_GL_API *funcs, int 
minor_version)
    ORD(glBindFramebuffer);
    ORD(glBindRenderbuffer);
 
-   // GLES 3.0 new APIs
-   ORD(glBeginQuery);
-   ORD(glBeginTransformFeedback);
-   ORD(glBindBufferBase);
-   ORD(glBindBufferRange);
-   ORD(glBindSampler);
-   ORD(glBindTransformFeedback);
-   ORD(glBindVertexArray);
-   ORD(glBlitFramebuffer);
-   ORD(glClearBufferfi);
-   ORD(glClearBufferfv);
-   ORD(glClearBufferiv);
-   ORD(glClearBufferuiv);
-   ORD(glClientWaitSync);
-   ORD(glCompressedTexImage3D);
-   ORD(glCompressedTexSubImage3D);
-   ORD(glCopyBufferSubData);
-   ORD(glCopyTexSubImage3D);
-   ORD(glDeleteQueries);
-   ORD(glDeleteSamplers);
-   ORD(glDeleteSync);
-   ORD(glDeleteTransformFeedbacks);
-   ORD(glDeleteVertexArrays);
-   ORD(glDrawArraysInstanced);
-   ORD(glDrawBuffers);
-   ORD(glDrawElementsInstanced);
-   ORD(glDrawRangeElements);
-   ORD(glEndQuery);
-   ORD(glEndTransformFeedback);
-   ORD(glFenceSync);
-   ORD(glFlushMappedBufferRange);
-   ORD(glFramebufferTextureLayer);
-   ORD(glGenQueries);
-   ORD(glGenSamplers);
-   ORD(glGenTransformFeedbacks);
-   ORD(glGenVertexArrays);
-   ORD(glGetActiveUniformBlockiv);
-   ORD(glGetActiveUniformBlockName);
-   ORD(glGetActiveUniformsiv);
-   ORD(glGetBufferParameteri64v);
-   ORD(glGetBufferPointerv);
-   ORD(glGetFragDataLocation);
-   ORD(glGetInteger64i_v);
-   ORD(glGetInteger64v);
-   ORD(glGetIntegeri_v);
-   ORD(glGetInternalformativ);
-   ORD(glGetProgramBinary);
-   ORD(glGetQueryiv);
-   ORD(glGetQueryObjectuiv);
-   ORD(glGetSamplerParameterfv);
-   ORD(glGetSamplerParameteriv);
-   ORD(glGetStringi);
-   ORD(glGetSynciv);
-   ORD(glGetTransformFeedbackVarying);
-   ORD(glGetUniformBlockIndex);
-   ORD(glGetUniformIndices);
-   ORD(glGetUniformuiv);
-   ORD(glGetVertexAttribIiv);
-   ORD(glGetVertexAttribIuiv);
-   ORD(glInvalidateFramebuffer);
-   ORD(glInvalidateSubFramebuffer);
-   ORD(glIsQuery);
-   ORD(glIsSampler);
-   ORD(glIsSync);
-   ORD(glIsTransformFeedback);
-   ORD(glIsVertexArray);
-   ORD(glMapBufferRange);
-   ORD(glPauseTransformFeedback);
-   ORD(glProgramBinary);
-   ORD(glProgramParameteri);
-   ORD(glReadBuffer);
-   ORD(glRenderbufferStorageMultisample);
-   ORD(glResumeTransformFeedback);
-   ORD(glSamplerParameterf);
-   ORD(glSamplerParameterfv);
-   ORD(glSamplerParameteri);
-   ORD(glSamplerParameteriv);
-   ORD(glTexImage3D);
-   ORD(glTexStorage2D);
-   ORD(glTexStorage3D);
-   ORD(glTexSubImage3D);
-   ORD(glTransformFeedbackVaryings);
-   ORD(glUniform1ui);
-   ORD(glUniform1uiv);
-   ORD(glUniform2ui);
-   ORD(glUniform2uiv);
-   ORD(glUniform3ui);
-   ORD(glUniform3uiv);
-   ORD(glUniform4ui);
-   ORD(glUniform4uiv);
-   ORD(glUniformBlockBinding);
-   ORD(glUniformMatrix2x3fv);
-   ORD(glUniformMatrix3x2fv);
-   ORD(glUniformMatrix2x4fv);
-   ORD(glUniformMatrix4x2fv);
-   ORD(glUniformMatrix3x4fv);
-   ORD(glUniformMatrix4x3fv);
-   ORD(glUnmapBuffer);
-   ORD(glVertexAttribDivisor);
-   ORD(glVertexAttribI4i);
-   ORD(glVertexAttribI4iv);
-   ORD(glVertexAttribI4ui);
-   ORD(glVertexAttribI4uiv);
-   ORD(glVertexAttribIPointer);
-   ORD(glWaitSync);
-
-   if (minor_version > 0)
-     {
-        //GLES 3.1
+   switch (minor_version)
+     {
+      case 2:
+        ORD(glBlendBarrier);
+        ORD(glCopyImageSubData);
+        ORD(glDebugMessageControl);
+        ORD(glDebugMessageInsert);
+        ORD(glDebugMessageCallback);
+        ORD(glGetDebugMessageLog);
+        ORD(glPushDebugGroup);
+        ORD(glPopDebugGroup);
+        ORD(glObjectLabel);
+        ORD(glGetObjectLabel);
+        ORD(glObjectPtrLabel);
+        ORD(glGetObjectPtrLabel);
+        ORD(glGetPointerv);
+        ORD(glEnablei);
+        ORD(glDisablei);
+        ORD(glBlendEquationi);
+        ORD(glBlendEquationSeparatei);
+        ORD(glBlendFunci);
+        ORD(glBlendFuncSeparatei);
+        ORD(glColorMaski);
+        ORD(glIsEnabledi);
+        ORD(glDrawElementsBaseVertex);
+        ORD(glDrawRangeElementsBaseVertex);
+        ORD(glDrawElementsInstancedBaseVertex);
+        ORD(glFramebufferTexture);
+        ORD(glPrimitiveBoundingBox);
+        ORD(glGetGraphicsResetStatus);
+        ORD(glReadnPixels);
+        ORD(glGetnUniformfv);
+        ORD(glGetnUniformiv);
+        ORD(glGetnUniformuiv);
+        ORD(glMinSampleShading);
+        ORD(glPatchParameteri);
+        ORD(glTexParameterIiv);
+        ORD(glTexParameterIuiv);
+        ORD(glGetTexParameterIiv);
+        ORD(glGetTexParameterIuiv);
+        ORD(glSamplerParameterIiv);
+        ORD(glSamplerParameterIuiv);
+        ORD(glGetSamplerParameterIiv);
+        ORD(glGetSamplerParameterIuiv);
+        ORD(glTexBuffer);
+        ORD(glTexBufferRange);
+        ORD(glTexStorage3DMultisample);
+      case 1:
         ORD(glDispatchCompute);
         ORD(glDispatchComputeIndirect);
         ORD(glDrawArraysIndirect);
@@ -3234,6 +3278,111 @@ _debug_gles3_api_get(Evas_GL_API *funcs, int 
minor_version)
         ORD(glVertexAttribIFormat);
         ORD(glVertexAttribBinding);
         ORD(glVertexBindingDivisor);
+      case 0:
+        ORD(glBeginQuery);
+        ORD(glBeginTransformFeedback);
+        ORD(glBindBufferBase);
+        ORD(glBindBufferRange);
+        ORD(glBindSampler);
+        ORD(glBindTransformFeedback);
+        ORD(glBindVertexArray);
+        ORD(glBlitFramebuffer);
+        ORD(glClearBufferfi);
+        ORD(glClearBufferfv);
+        ORD(glClearBufferiv);
+        ORD(glClearBufferuiv);
+        ORD(glClientWaitSync);
+        ORD(glCompressedTexImage3D);
+        ORD(glCompressedTexSubImage3D);
+        ORD(glCopyBufferSubData);
+        ORD(glCopyTexSubImage3D);
+        ORD(glDeleteQueries);
+        ORD(glDeleteSamplers);
+        ORD(glDeleteSync);
+        ORD(glDeleteTransformFeedbacks);
+        ORD(glDeleteVertexArrays);
+        ORD(glDrawArraysInstanced);
+        ORD(glDrawBuffers);
+        ORD(glDrawElementsInstanced);
+        ORD(glDrawRangeElements);
+        ORD(glEndQuery);
+        ORD(glEndTransformFeedback);
+        ORD(glFenceSync);
+        ORD(glFlushMappedBufferRange);
+        ORD(glFramebufferTextureLayer);
+        ORD(glGenQueries);
+        ORD(glGenSamplers);
+        ORD(glGenTransformFeedbacks);
+        ORD(glGenVertexArrays);
+        ORD(glGetActiveUniformBlockiv);
+        ORD(glGetActiveUniformBlockName);
+        ORD(glGetActiveUniformsiv);
+        ORD(glGetBufferParameteri64v);
+        ORD(glGetBufferPointerv);
+        ORD(glGetFragDataLocation);
+        ORD(glGetInteger64i_v);
+        ORD(glGetInteger64v);
+        ORD(glGetIntegeri_v);
+        ORD(glGetInternalformativ);
+        ORD(glGetProgramBinary);
+        ORD(glGetQueryiv);
+        ORD(glGetQueryObjectuiv);
+        ORD(glGetSamplerParameterfv);
+        ORD(glGetSamplerParameteriv);
+        ORD(glGetStringi);
+        ORD(glGetSynciv);
+        ORD(glGetTransformFeedbackVarying);
+        ORD(glGetUniformBlockIndex);
+        ORD(glGetUniformIndices);
+        ORD(glGetUniformuiv);
+        ORD(glGetVertexAttribIiv);
+        ORD(glGetVertexAttribIuiv);
+        ORD(glInvalidateFramebuffer);
+        ORD(glInvalidateSubFramebuffer);
+        ORD(glIsQuery);
+        ORD(glIsSampler);
+        ORD(glIsSync);
+        ORD(glIsTransformFeedback);
+        ORD(glIsVertexArray);
+        ORD(glMapBufferRange);
+        ORD(glPauseTransformFeedback);
+        ORD(glProgramBinary);
+        ORD(glProgramParameteri);
+        ORD(glReadBuffer);
+        ORD(glRenderbufferStorageMultisample);
+        ORD(glResumeTransformFeedback);
+        ORD(glSamplerParameterf);
+        ORD(glSamplerParameterfv);
+        ORD(glSamplerParameteri);
+        ORD(glSamplerParameteriv);
+        ORD(glTexImage3D);
+        ORD(glTexStorage2D);
+        ORD(glTexStorage3D);
+        ORD(glTexSubImage3D);
+        ORD(glTransformFeedbackVaryings);
+        ORD(glUniform1ui);
+        ORD(glUniform1uiv);
+        ORD(glUniform2ui);
+        ORD(glUniform2uiv);
+        ORD(glUniform3ui);
+        ORD(glUniform3uiv);
+        ORD(glUniform4ui);
+        ORD(glUniform4uiv);
+        ORD(glUniformBlockBinding);
+        ORD(glUniformMatrix2x3fv);
+        ORD(glUniformMatrix3x2fv);
+        ORD(glUniformMatrix2x4fv);
+        ORD(glUniformMatrix4x2fv);
+        ORD(glUniformMatrix3x4fv);
+        ORD(glUniformMatrix4x3fv);
+        ORD(glUnmapBuffer);
+        ORD(glVertexAttribDivisor);
+        ORD(glVertexAttribI4i);
+        ORD(glVertexAttribI4iv);
+        ORD(glVertexAttribI4ui);
+        ORD(glVertexAttribI4uiv);
+        ORD(glVertexAttribIPointer);
+        ORD(glWaitSync);
      }
 
 #undef ORD
@@ -3259,118 +3408,54 @@ _evgl_load_gles3_apis(void *dl_handle, Evas_GL_API 
*funcs, int minor_version,
    // Used to update extensions
    ORD(glGetString);
 
-   // GLES 3.0 new APIs
-   ORD(glBeginQuery);
-   ORD(glBeginTransformFeedback);
-   ORD(glBindBufferBase);
-   ORD(glBindBufferRange);
-   ORD(glBindSampler);
-   ORD(glBindTransformFeedback);
-   ORD(glBindVertexArray);
-   ORD(glBlitFramebuffer);
-   ORD(glClearBufferfi);
-   ORD(glClearBufferfv);
-   ORD(glClearBufferiv);
-   ORD(glClearBufferuiv);
-   ORD(glClientWaitSync);
-   ORD(glCompressedTexImage3D);
-   ORD(glCompressedTexSubImage3D);
-   ORD(glCopyBufferSubData);
-   ORD(glCopyTexSubImage3D);
-   ORD(glDeleteQueries);
-   ORD(glDeleteSamplers);
-   ORD(glDeleteSync);
-   ORD(glDeleteTransformFeedbacks);
-   ORD(glDeleteVertexArrays);
-   ORD(glDrawArraysInstanced);
-   ORD(glDrawBuffers);
-   ORD(glDrawElementsInstanced);
-   ORD(glDrawRangeElements);
-   ORD(glEndQuery);
-   ORD(glEndTransformFeedback);
-   ORD(glFenceSync);
-   ORD(glFlushMappedBufferRange);
-   ORD(glFramebufferTextureLayer);
-   ORD(glGenQueries);
-   ORD(glGenSamplers);
-   ORD(glGenTransformFeedbacks);
-   ORD(glGenVertexArrays);
-   ORD(glGetActiveUniformBlockiv);
-   ORD(glGetActiveUniformBlockName);
-   ORD(glGetActiveUniformsiv);
-   ORD(glGetBufferParameteri64v);
-   ORD(glGetBufferPointerv);
-   ORD(glGetFragDataLocation);
-   ORD(glGetInteger64i_v);
-   ORD(glGetInteger64v);
-   ORD(glGetIntegeri_v);
-   ORD(glGetInternalformativ);
-   ORD(glGetProgramBinary);
-   ORD(glGetQueryiv);
-   ORD(glGetQueryObjectuiv);
-   ORD(glGetSamplerParameterfv);
-   ORD(glGetSamplerParameteriv);
-   ORD(glGetStringi);
-   ORD(glGetSynciv);
-   ORD(glGetTransformFeedbackVarying);
-   ORD(glGetUniformBlockIndex);
-   ORD(glGetUniformIndices);
-   ORD(glGetUniformuiv);
-   ORD(glGetVertexAttribIiv);
-   ORD(glGetVertexAttribIuiv);
-   ORD(glInvalidateFramebuffer);
-   ORD(glInvalidateSubFramebuffer);
-   ORD(glIsQuery);
-   ORD(glIsSampler);
-   ORD(glIsSync);
-   ORD(glIsTransformFeedback);
-   ORD(glIsVertexArray);
-   ORD(glMapBufferRange);
-   ORD(glPauseTransformFeedback);
-   ORD(glProgramBinary);
-   ORD(glProgramParameteri);
-   ORD(glReadBuffer);
-   ORD(glRenderbufferStorageMultisample);
-   ORD(glResumeTransformFeedback);
-   ORD(glSamplerParameterf);
-   ORD(glSamplerParameterfv);
-   ORD(glSamplerParameteri);
-   ORD(glSamplerParameteriv);
-   ORD(glTexImage3D);
-   ORD(glTexStorage2D);
-   ORD(glTexStorage3D);
-   ORD(glTexSubImage3D);
-   ORD(glTransformFeedbackVaryings);
-   ORD(glUniform1ui);
-   ORD(glUniform1uiv);
-   ORD(glUniform2ui);
-   ORD(glUniform2uiv);
-   ORD(glUniform3ui);
-   ORD(glUniform3uiv);
-   ORD(glUniform4ui);
-   ORD(glUniform4uiv);
-   ORD(glUniformBlockBinding);
-   ORD(glUniformMatrix2x3fv);
-   ORD(glUniformMatrix3x2fv);
-   ORD(glUniformMatrix2x4fv);
-   ORD(glUniformMatrix4x2fv);
-   ORD(glUniformMatrix3x4fv);
-   ORD(glUniformMatrix4x3fv);
-   ORD(glUnmapBuffer);
-   ORD(glVertexAttribDivisor);
-   ORD(glVertexAttribI4i);
-   ORD(glVertexAttribI4iv);
-   ORD(glVertexAttribI4ui);
-   ORD(glVertexAttribI4uiv);
-   ORD(glVertexAttribIPointer);
-   ORD(glWaitSync);
-
-   if (minor_version > 0)
-     {
-        // OpenGL ES 3.0 is supported, return true even if 3.1 isn't there
-        ret_value = EINA_TRUE;
-
-        // OpenGL ES 3.1
+   switch (minor_version)
+     {
+      case 2:
+        ORD(glBlendBarrier);
+        ORD(glCopyImageSubData);
+        ORD(glDebugMessageControl);
+        ORD(glDebugMessageInsert);
+        ORD(glDebugMessageCallback);
+        ORD(glGetDebugMessageLog);
+        ORD(glPushDebugGroup);
+        ORD(glPopDebugGroup);
+        ORD(glObjectLabel);
+        ORD(glGetObjectLabel);
+        ORD(glObjectPtrLabel);
+        ORD(glGetObjectPtrLabel);
+        ORD(glGetPointerv);
+        ORD(glEnablei);
+        ORD(glDisablei);
+        ORD(glBlendEquationi);
+        ORD(glBlendEquationSeparatei);
+        ORD(glBlendFunci);
+        ORD(glBlendFuncSeparatei);
+        ORD(glColorMaski);
+        ORD(glIsEnabledi);
+        ORD(glDrawElementsBaseVertex);
+        ORD(glDrawRangeElementsBaseVertex);
+        ORD(glDrawElementsInstancedBaseVertex);
+        ORD(glFramebufferTexture);
+        ORD(glPrimitiveBoundingBox);
+        ORD(glGetGraphicsResetStatus);
+        ORD(glReadnPixels);
+        ORD(glGetnUniformfv);
+        ORD(glGetnUniformiv);
+        ORD(glGetnUniformuiv);
+        ORD(glMinSampleShading);
+        ORD(glPatchParameteri);
+        ORD(glTexParameterIiv);
+        ORD(glTexParameterIuiv);
+        ORD(glGetTexParameterIiv);
+        ORD(glGetTexParameterIuiv);
+        ORD(glSamplerParameterIiv);
+        ORD(glSamplerParameterIuiv);
+        ORD(glGetSamplerParameterIiv);
+        ORD(glGetSamplerParameterIuiv);
+        ORD(glTexBuffer);
+        ORD(glTexBufferRange);
+        ORD(glTexStorage3DMultisample);
+      case 1:
         ORD(glDispatchCompute);
         ORD(glDispatchComputeIndirect);
         ORD(glDrawArraysIndirect);
@@ -3439,6 +3524,111 @@ _evgl_load_gles3_apis(void *dl_handle, Evas_GL_API 
*funcs, int minor_version,
         ORD(glVertexAttribIFormat);
         ORD(glVertexAttribBinding);
         ORD(glVertexBindingDivisor);
+      case 0:
+        ORD(glBeginQuery);
+        ORD(glBeginTransformFeedback);
+        ORD(glBindBufferBase);
+        ORD(glBindBufferRange);
+        ORD(glBindSampler);
+        ORD(glBindTransformFeedback);
+        ORD(glBindVertexArray);
+        ORD(glBlitFramebuffer);
+        ORD(glClearBufferfi);
+        ORD(glClearBufferfv);
+        ORD(glClearBufferiv);
+        ORD(glClearBufferuiv);
+        ORD(glClientWaitSync);
+        ORD(glCompressedTexImage3D);
+        ORD(glCompressedTexSubImage3D);
+        ORD(glCopyBufferSubData);
+        ORD(glCopyTexSubImage3D);
+        ORD(glDeleteQueries);
+        ORD(glDeleteSamplers);
+        ORD(glDeleteSync);
+        ORD(glDeleteTransformFeedbacks);
+        ORD(glDeleteVertexArrays);
+        ORD(glDrawArraysInstanced);
+        ORD(glDrawBuffers);
+        ORD(glDrawElementsInstanced);
+        ORD(glDrawRangeElements);
+        ORD(glEndQuery);
+        ORD(glEndTransformFeedback);
+        ORD(glFenceSync);
+        ORD(glFlushMappedBufferRange);
+        ORD(glFramebufferTextureLayer);
+        ORD(glGenQueries);
+        ORD(glGenSamplers);
+        ORD(glGenTransformFeedbacks);
+        ORD(glGenVertexArrays);
+        ORD(glGetActiveUniformBlockiv);
+        ORD(glGetActiveUniformBlockName);
+        ORD(glGetActiveUniformsiv);
+        ORD(glGetBufferParameteri64v);
+        ORD(glGetBufferPointerv);
+        ORD(glGetFragDataLocation);
+        ORD(glGetInteger64i_v);
+        ORD(glGetInteger64v);
+        ORD(glGetIntegeri_v);
+        ORD(glGetInternalformativ);
+        ORD(glGetProgramBinary);
+        ORD(glGetQueryiv);
+        ORD(glGetQueryObjectuiv);
+        ORD(glGetSamplerParameterfv);
+        ORD(glGetSamplerParameteriv);
+        ORD(glGetStringi);
+        ORD(glGetSynciv);
+        ORD(glGetTransformFeedbackVarying);
+        ORD(glGetUniformBlockIndex);
+        ORD(glGetUniformIndices);
+        ORD(glGetUniformuiv);
+        ORD(glGetVertexAttribIiv);
+        ORD(glGetVertexAttribIuiv);
+        ORD(glInvalidateFramebuffer);
+        ORD(glInvalidateSubFramebuffer);
+        ORD(glIsQuery);
+        ORD(glIsSampler);
+        ORD(glIsSync);
+        ORD(glIsTransformFeedback);
+        ORD(glIsVertexArray);
+        ORD(glMapBufferRange);
+        ORD(glPauseTransformFeedback);
+        ORD(glProgramBinary);
+        ORD(glProgramParameteri);
+        ORD(glReadBuffer);
+        ORD(glRenderbufferStorageMultisample);
+        ORD(glResumeTransformFeedback);
+        ORD(glSamplerParameterf);
+        ORD(glSamplerParameterfv);
+        ORD(glSamplerParameteri);
+        ORD(glSamplerParameteriv);
+        ORD(glTexImage3D);
+        ORD(glTexStorage2D);
+        ORD(glTexStorage3D);
+        ORD(glTexSubImage3D);
+        ORD(glTransformFeedbackVaryings);
+        ORD(glUniform1ui);
+        ORD(glUniform1uiv);
+        ORD(glUniform2ui);
+        ORD(glUniform2uiv);
+        ORD(glUniform3ui);
+        ORD(glUniform3uiv);
+        ORD(glUniform4ui);
+        ORD(glUniform4uiv);
+        ORD(glUniformBlockBinding);
+        ORD(glUniformMatrix2x3fv);
+        ORD(glUniformMatrix3x2fv);
+        ORD(glUniformMatrix2x4fv);
+        ORD(glUniformMatrix4x2fv);
+        ORD(glUniformMatrix3x4fv);
+        ORD(glUniformMatrix4x3fv);
+        ORD(glUnmapBuffer);
+        ORD(glVertexAttribDivisor);
+        ORD(glVertexAttribI4i);
+        ORD(glVertexAttribI4iv);
+        ORD(glVertexAttribI4ui);
+        ORD(glVertexAttribI4uiv);
+        ORD(glVertexAttribIPointer);
+        ORD(glWaitSync);
      }
 #undef ORD
 
diff --git a/src/modules/evas/engines/gl_common/evas_gl_api_gles3_def.h 
b/src/modules/evas/engines/gl_common/evas_gl_api_gles3_def.h
index 8d852d67ac..ebd8c5ec22 100644
--- a/src/modules/evas/engines/gl_common/evas_gl_api_gles3_def.h
+++ b/src/modules/evas/engines/gl_common/evas_gl_api_gles3_def.h
@@ -4,6 +4,8 @@ _EVASGL_FUNCTION_PRIVATE_BEGIN_VOID( glReadBuffer, (GLenum 
src), (src))
 //GLES 3.1
 _EVASGL_FUNCTION_PRIVATE_BEGIN_VOID( glFramebufferParameteri, (GLenum target, 
GLenum pname, GLint param), (target, pname, param))
 _EVASGL_FUNCTION_PRIVATE_BEGIN_VOID( glGetFramebufferParameteriv, (GLenum 
target, GLenum pname, GLint *params), (target, pname, params))
+//GLES 3.2
+_EVASGL_FUNCTION_PRIVATE_BEGIN_VOID( glFramebufferTexture, (GLenum target, 
GLenum attachment, GLuint texture, GLint level), (target, attachment, texture, 
level))
 
 _EVASGL_FUNCTION_BEGIN_VOID( glBeginQuery, (GLenum target, GLuint id), 
(target, id))
 _EVASGL_FUNCTION_BEGIN_VOID( glBeginTransformFeedback, (GLenum primitiveMode), 
(primitiveMode))
@@ -175,3 +177,48 @@ _EVASGL_FUNCTION_BEGIN_VOID( glVertexAttribFormat, (GLuint 
attribindex, GLint si
 _EVASGL_FUNCTION_BEGIN_VOID( glVertexAttribIFormat, (GLuint attribindex, GLint 
size, GLenum type, GLuint relativeoffset), (attribindex, size, type, 
relativeoffset))
 _EVASGL_FUNCTION_BEGIN_VOID( glVertexAttribBinding, (GLuint attribindex, 
GLuint bindingindex), (attribindex, bindingindex))
 _EVASGL_FUNCTION_BEGIN_VOID( glVertexBindingDivisor, (GLuint bindingindex, 
GLuint divisor), (bindingindex, divisor))
+
+//GLES 3.2
+_EVASGL_FUNCTION_BEGIN_VOID( glBlendBarrier, (void), ())
+_EVASGL_FUNCTION_BEGIN_VOID( glCopyImageSubData, (GLuint srcName, GLenum 
srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, 
GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei 
srcWidth, GLsizei srcHeight, GLsizei srcDepth), (srcName, srcTarget, srcLevel, 
srcX, srcY, srcZ, dstName, dstTarget, dstLevel, dstX, dstY, dstZ, srcWidth, 
srcHeight, srcDepth))
+_EVASGL_FUNCTION_BEGIN_VOID( glDebugMessageControl, (GLenum source, GLenum 
type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled), 
(source, type, severity, count, ids, enabled))
+_EVASGL_FUNCTION_BEGIN_VOID( glDebugMessageInsert, (GLenum source, GLenum 
type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf), (source, 
type, id, severity, length, buf))
+_EVASGL_FUNCTION_BEGIN_VOID( glDebugMessageCallback, (void (*callback)(GLenum 
source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar 
*message,const void *userParam), const void *userParam), (callback, userParam))
+_EVASGL_FUNCTION_BEGIN (GLuint, glGetDebugMessageLog, (GLuint count, GLsizei 
bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, 
GLsizei *lengths, GLchar *messageLog), (count, bufSize, sources, types, ids, 
severities, lengths, messageLog))
+_EVASGL_FUNCTION_BEGIN_VOID( glPushDebugGroup, (GLenum source, GLuint id, 
GLsizei length, const GLchar *message),(source, id, length, message))
+_EVASGL_FUNCTION_BEGIN_VOID( glPopDebugGroup, (void), ())
+_EVASGL_FUNCTION_BEGIN_VOID( glObjectLabel, (GLenum identifier, GLuint name, 
GLsizei length, const GLchar *label),(identifier, name, length, label))
+_EVASGL_FUNCTION_BEGIN_VOID( glGetObjectLabel, (GLenum identifier, GLuint 
name, GLsizei bufSize, GLsizei *length, GLchar *label), (identifier, name, 
bufSize, length, label))
+_EVASGL_FUNCTION_BEGIN_VOID( glObjectPtrLabel, (const void *ptr, GLsizei 
length, const GLchar *label), (ptr, length, label))
+_EVASGL_FUNCTION_BEGIN_VOID( glGetObjectPtrLabel, (const void *ptr, GLsizei 
bufSize, GLsizei *length, GLchar *label), (ptr, bufSize, length, label))
+_EVASGL_FUNCTION_BEGIN_VOID( glGetPointerv, (GLenum pname, void **params), 
(pname, params))
+_EVASGL_FUNCTION_BEGIN_VOID( glEnablei, (GLenum target, GLuint index), 
(target, index))
+_EVASGL_FUNCTION_BEGIN_VOID( glDisablei, (GLenum target, GLuint index), 
(target, index))
+_EVASGL_FUNCTION_BEGIN_VOID( glBlendEquationi, (GLuint buf, GLenum mode), 
(buf, mode))
+_EVASGL_FUNCTION_BEGIN_VOID( glBlendEquationSeparatei, (GLuint buf, GLenum 
modeRGB, GLenum modeAlpha), (buf, modeRGB, modeAlpha))
+_EVASGL_FUNCTION_BEGIN_VOID( glBlendFunci, (GLuint buf, GLenum src, GLenum 
dst), (buf, src, dst))
+_EVASGL_FUNCTION_BEGIN_VOID( glBlendFuncSeparatei, (GLuint buf, GLenum srcRGB, 
GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha), (buf, srcRGB, dstRGB, 
srcAlpha, dstAlpha))
+_EVASGL_FUNCTION_BEGIN_VOID( glColorMaski, (GLuint index, GLboolean r, 
GLboolean g, GLboolean b, GLboolean a), (index, r, g, b, a))
+_EVASGL_FUNCTION_BEGIN(GLboolean, glIsEnabledi, (GLenum target, GLuint index), 
(target, index))
+_EVASGL_FUNCTION_BEGIN_VOID( glDrawElementsBaseVertex, (GLenum mode, GLsizei 
count, GLenum type, const void *indices, GLint basevertex), (mode, count, type, 
indices, basevertex))
+_EVASGL_FUNCTION_BEGIN_VOID( glDrawRangeElementsBaseVertex, (GLenum mode, 
GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, 
GLint basevertex), (mode, start, end, count, type, indices, basevertex))
+_EVASGL_FUNCTION_BEGIN_VOID( glDrawElementsInstancedBaseVertex, (GLenum mode, 
GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint 
basevertex), (mode, count, type, indices, instancecount, basevertex))
+_EVASGL_FUNCTION_BEGIN_VOID( glPrimitiveBoundingBox, (GLfloat minX, GLfloat 
minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, 
GLfloat maxW), (minX, minY, minZ, minW, maxX, maxY, maxZ, maxW))
+_EVASGL_FUNCTION_BEGIN(GLenum, glGetGraphicsResetStatus, (void), ())
+_EVASGL_FUNCTION_BEGIN_VOID( glReadnPixels, (GLint x, GLint y, GLsizei width, 
GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data), (x, 
y, width, height, format, type, bufSize, data))
+_EVASGL_FUNCTION_BEGIN_VOID( glGetnUniformfv, (GLuint program, GLint location, 
GLsizei bufSize, GLfloat *params), (program, location, bufSize, params))
+_EVASGL_FUNCTION_BEGIN_VOID( glGetnUniformiv, (GLuint program, GLint location, 
GLsizei bufSize, GLint *params), (program, location, bufSize, params))
+_EVASGL_FUNCTION_BEGIN_VOID( glGetnUniformuiv, (GLuint program, GLint 
location, GLsizei bufSize, GLuint *params), (program, location, bufSize, 
params))
+_EVASGL_FUNCTION_BEGIN_VOID( glMinSampleShading, (GLfloat value), (value))
+_EVASGL_FUNCTION_BEGIN_VOID( glPatchParameteri, (GLenum pname, GLint value), 
(pname, value))
+_EVASGL_FUNCTION_BEGIN_VOID( glTexParameterIiv, (GLenum target, GLenum pname, 
const GLint *params), (target, pname, params))
+_EVASGL_FUNCTION_BEGIN_VOID( glTexParameterIuiv, (GLenum target, GLenum pname, 
const GLuint *params), (target, pname, params))
+_EVASGL_FUNCTION_BEGIN_VOID( glGetTexParameterIiv, (GLenum target, GLenum 
pname, GLint *params), (target, pname, params))
+_EVASGL_FUNCTION_BEGIN_VOID( glGetTexParameterIuiv, (GLenum target, GLenum 
pname, GLuint *params), (target, pname, params))
+_EVASGL_FUNCTION_BEGIN_VOID( glSamplerParameterIiv, (GLuint sampler, GLenum 
pname, const GLint *param), (sampler, pname, param))
+_EVASGL_FUNCTION_BEGIN_VOID( glSamplerParameterIuiv, (GLuint sampler, GLenum 
pname, const GLuint *param), (sampler, pname, param))
+_EVASGL_FUNCTION_BEGIN_VOID( glGetSamplerParameterIiv, (GLuint sampler, GLenum 
pname, GLint *params), (sampler, pname, params))
+_EVASGL_FUNCTION_BEGIN_VOID( glGetSamplerParameterIuiv, (GLuint sampler, 
GLenum pname, GLuint *params), (sampler, pname, params))
+_EVASGL_FUNCTION_BEGIN_VOID( glTexBuffer, (GLenum target, GLenum 
internalformat, GLuint buffer), (target, internalformat, buffer))
+_EVASGL_FUNCTION_BEGIN_VOID( glTexBufferRange, (GLenum target, GLenum 
internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size), (target, 
internalformat, buffer, offset, size))
+_EVASGL_FUNCTION_BEGIN_VOID( glTexStorage3DMultisample, (GLenum target, 
GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei 
depth, GLboolean fixedsamplelocations), (target, samples, internalformat, 
width, height, depth, fixedsamplelocations))

-- 


Reply via email to