From: sunghyun kim Date: Tue, 25 Jul 2017 12:30:04 +0000 (+0900) Subject: [evasgl] Use gl call immediately related frambuffer without checking X-Git-Tag: accepted/tizen/unified/20170810.172531~13 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F94%2F140594%2F3;p=platform%2Fupstream%2Fefl.git [evasgl] Use gl call immediately related frambuffer without checking A non-NULL return value for eglGetProcAddress() does not guarante that a function is actually supported at runtime. so if eglGetProcAddress() return NULL, it can be problem. this issue is especially occuring in framebuffer call. as a matter of fact, framebuffer is core api from gles 2.0, so it can be used immediately without checking Change-Id: Iaec4d0f24e1c9c0d947c593688d2c09691fbf2c2 --- 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 5aeea7d..ddd5c8a 100644 --- a/src/modules/evas/engines/gl_common/evas_gl_common.h +++ b/src/modules/evas/engines/gl_common/evas_gl_common.h @@ -716,10 +716,6 @@ void evas_gl_common_texture_shared_back(Evas_Engine_GL_Context *gc, void evas_gl_common_line_draw(Evas_Engine_GL_Context *gc, int x1, int y1, int x2, int y2); -extern void (*glsym_glGenFramebuffers) (GLsizei a, GLuint *b); -extern void (*glsym_glBindFramebuffer) (GLenum a, GLuint b); -extern void (*glsym_glFramebufferTexture2D) (GLenum a, GLenum b, GLenum c, GLuint d, GLint e); -extern void (*glsym_glDeleteFramebuffers) (GLsizei a, const GLuint *b); extern void (*glsym_glGetProgramBinary) (GLuint a, GLsizei b, GLsizei *c, GLenum *d, void *e); extern void (*glsym_glProgramBinary) (GLuint a, GLenum b, const void *c, GLint d); extern void (*glsym_glProgramParameteri) (GLuint a, GLuint b, GLint d); @@ -882,10 +878,10 @@ __evas_gl_errdyn(int err, const char *file, const char *func, int line, const ch # define glGetShaderiv(...) GL_ERROR_TRACE(glGetShaderiv, glGetShaderiv, #__VA_ARGS__, __VA_ARGS__) # define glShaderSource(...) GL_ERROR_TRACE(glShaderSource, glShaderSource, #__VA_ARGS__, __VA_ARGS__) # define glCompileShader(...) GL_ERROR_TRACE(glCompileShader, glCompileShader, #__VA_ARGS__, __VA_ARGS__) -# define glsym_glGenFramebuffers(...) GL_ERROR_TRACE(glGenFramebuffers, glsym_glGenFramebuffers, #__VA_ARGS__, __VA_ARGS__) -# define glsym_glBindFramebuffer(...) GL_ERROR_TRACE(glBindFramebuffer, glsym_glBindFramebuffer, #__VA_ARGS__, __VA_ARGS__) -# define glsym_glFramebufferTexture2D(...) GL_ERROR_TRACE(glFramebufferTexture2D, glsym_glFramebufferTexture2D, #__VA_ARGS__, __VA_ARGS__) -# define glsym_glDeleteFramebuffers(...) GL_ERROR_TRACE(glDeleteFramebuffers, glsym_glDeleteFramebuffers, #__VA_ARGS__, __VA_ARGS__) +# define glGenFramebuffers(...) GL_ERROR_TRACE(glGenFramebuffers, glGenFramebuffers, #__VA_ARGS__, __VA_ARGS__) +# define glBindFramebuffer(...) GL_ERROR_TRACE(glBindFramebuffer, glBindFramebuffer, #__VA_ARGS__, __VA_ARGS__) +# define glFramebufferTexture2D(...) GL_ERROR_TRACE(glFramebufferTexture2D, glFramebufferTexture2D, #__VA_ARGS__, __VA_ARGS__) +# define glDeleteFramebuffers(...) GL_ERROR_TRACE(glDeleteFramebuffers, glDeleteFramebuffers, #__VA_ARGS__, __VA_ARGS__) # define glsym_glGetProgramBinary(...) GL_ERROR_TRACE(glGetProgramBinary, glsym_glGetProgramBinary, #__VA_ARGS__, __VA_ARGS__) # define glsym_glProgramBinary(...) GL_ERROR_TRACE(glProgramBinary, glsym_glProgramBinary, #__VA_ARGS__, __VA_ARGS__) # define glsym_glProgramParameteri(...) GL_ERROR_TRACE(glProgramParameteri, glsym_glProgramParameteri, #__VA_ARGS__, __VA_ARGS__) 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 e90e45e..e8bdc0b 100644 --- a/src/modules/evas/engines/gl_common/evas_gl_context.c +++ b/src/modules/evas/engines/gl_common/evas_gl_context.c @@ -20,10 +20,6 @@ typedef void *(*glsym_func_void_ptr) (); typedef GLboolean (*glsym_func_boolean) (); typedef const char *(*glsym_func_const_char_ptr) (); -void (*glsym_glGenFramebuffers) (GLsizei a, GLuint *b) = NULL; -void (*glsym_glBindFramebuffer) (GLenum a, GLuint b) = NULL; -void (*glsym_glFramebufferTexture2D) (GLenum a, GLenum b, GLenum c, GLuint d, GLint e) = NULL; -void (*glsym_glDeleteFramebuffers) (GLsizei a, const GLuint *b) = NULL; void (*glsym_glGetProgramBinary) (GLuint a, GLsizei b, GLsizei *c, GLenum *d, void *e) = NULL; void (*glsym_glProgramBinary) (GLuint a, GLenum b, const void *c, GLint d) = NULL; void (*glsym_glProgramParameteri) (GLuint a, GLuint b, GLint d) = NULL; @@ -99,46 +95,6 @@ evas_gl_symbols(void *(*GetProcAddress)(const char *name)) *a = *b; \ *b = tmp; -#ifdef GL_GLES - FINDSYM(glsym_glGenFramebuffers, "glGenFramebuffers", glsym_func_void); - FINDSYM2(glsym_glGenFramebuffers, "glGenFramebuffers", glsym_func_void); - FALLBAK(glsym_glGenFramebuffers, glsym_func_void); -#else - FINDSYM(glsym_glGenFramebuffers, "glGenFramebuffersEXT", glsym_func_void); - FINDSYM(glsym_glGenFramebuffers, "glGenFramebuffersARB", glsym_func_void); - FINDSYM(glsym_glGenFramebuffers, "glGenFramebuffers", glsym_func_void); - // nvidia tegra3 drivers seem to not expose via getprocaddress, but dlsym finds it - FINDSYM2(glsym_glGenFramebuffers, "glGenFramebuffers", glsym_func_void); - FALLBAK(glsym_glGenFramebuffers, glsym_func_void); -#endif - -#ifdef GL_GLES - FINDSYM(glsym_glBindFramebuffer, "glBindFramebuffer", glsym_func_void); - FINDSYM2(glsym_glBindFramebuffer, "glBindFramebuffer", glsym_func_void); - FALLBAK(glsym_glBindFramebuffer, glsym_func_void); -#else - FINDSYM(glsym_glBindFramebuffer, "glBindFramebufferEXT", glsym_func_void); - FINDSYM(glsym_glBindFramebuffer, "glBindFramebufferARB", glsym_func_void); - FINDSYM(glsym_glBindFramebuffer, "glBindFramebuffer", glsym_func_void); - // nvidia tegra3 drivers seem to not expose via getprocaddress, but dlsym finds it - FINDSYM2(glsym_glBindFramebuffer, "glBindFramebuffer", glsym_func_void); - FALLBAK(glsym_glBindFramebuffer, glsym_func_void); -#endif - - FINDSYM(glsym_glFramebufferTexture2D, "glFramebufferTexture2DEXT", glsym_func_void); - FINDSYM(glsym_glFramebufferTexture2D, "glFramebufferTexture2DARB", glsym_func_void); - FINDSYM(glsym_glFramebufferTexture2D, "glFramebufferTexture2D", glsym_func_void); - // nvidia tegra3 drivers seem to not expose via getprocaddress, but dlsym finds it - FINDSYM2(glsym_glFramebufferTexture2D, "glFramebufferTexture2D", glsym_func_void); - FALLBAK(glsym_glFramebufferTexture2D, glsym_func_void); - - FINDSYM(glsym_glDeleteFramebuffers, "glDeleteFramebuffersEXT", glsym_func_void); - FINDSYM(glsym_glDeleteFramebuffers, "glDeleteFramebuffersARB", glsym_func_void); - FINDSYM(glsym_glDeleteFramebuffers, "glDeleteFramebuffers", glsym_func_void); - // nvidia tegra3 drivers seem to not expose via getprocaddress, but dlsym finds it - FINDSYM2(glsym_glDeleteFramebuffers, "glDeleteFramebuffers", glsym_func_void); - FALLBAK(glsym_glDeleteFramebuffers, glsym_func_void); - FINDSYM(glsym_glGetProgramBinary, "glGetProgramBinaryOES", glsym_func_void); FINDSYM(glsym_glGetProgramBinary, "glGetProgramBinaryKHR", glsym_func_void); FINDSYM(glsym_glGetProgramBinary, "glGetProgramBinaryEXT", glsym_func_void); @@ -1291,9 +1247,9 @@ evas_gl_common_context_target_surface_set(Evas_Engine_GL_Context *gc, # endif #endif if (gc->pipe[0].shader.surface == gc->def_surface) - GL_TH_CALL(glBindFramebuffer, glsym_glBindFramebuffer, GL_FRAMEBUFFER, 0); + GL_TH(glBindFramebuffer, GL_FRAMEBUFFER, 0); else - GL_TH_CALL(glBindFramebuffer, glsym_glBindFramebuffer, GL_FRAMEBUFFER, surface->tex->pt->fb); + GL_TH(glBindFramebuffer, GL_FRAMEBUFFER, surface->tex->pt->fb); _evas_gl_common_viewport_set(gc, 0, 0); } diff --git a/src/modules/evas/engines/gl_common/evas_gl_texture.c b/src/modules/evas/engines/gl_common/evas_gl_texture.c index e033e3c..7656f39 100644 --- a/src/modules/evas/engines/gl_common/evas_gl_texture.c +++ b/src/modules/evas/engines/gl_common/evas_gl_texture.c @@ -683,9 +683,9 @@ _pool_tex_render_new(Evas_Engine_GL_Context *gc, int w, int h, int intformat, in if (ok) { - GL_TH_CALL(glGenFramebuffers, glsym_glGenFramebuffers, 1, &(pt->fb)); - GL_TH_CALL(glBindFramebuffer, glsym_glBindFramebuffer, GL_FRAMEBUFFER, pt->fb); - GL_TH_CALL(glFramebufferTexture2D, glsym_glFramebufferTexture2D, + GL_TH(glGenFramebuffers, 1, &(pt->fb)); + GL_TH(glBindFramebuffer, GL_FRAMEBUFFER, pt->fb); + GL_TH(glFramebufferTexture2D, GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, pt->texture, 0); // note: should check fbo completeness } @@ -699,7 +699,7 @@ _pool_tex_render_new(Evas_Engine_GL_Context *gc, int w, int h, int intformat, in GL_TH(glFramebufferRenderbuffer, GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, pt->stencil); } - GL_TH_CALL(glBindFramebuffer, glsym_glBindFramebuffer, GL_FRAMEBUFFER, fnum); + GL_TH(glBindFramebuffer, GL_FRAMEBUFFER, fnum); if (gc->state.current.tex_target) GL_TH(glBindTexture, gc->state.current.tex_target, gc->state.current.cur_tex); else @@ -1023,7 +1023,7 @@ evas_gl_texture_pool_empty(Evas_GL_Texture_Pool *pt) } if (pt->fb) { - GL_TH_CALL(glDeleteFramebuffers, glsym_glDeleteFramebuffers, 1, &(pt->fb)); + GL_TH(glDeleteFramebuffers, 1, &(pt->fb)); pt->fb = 0; } EINA_LIST_FREE(pt->allocations, apt) diff --git a/src/modules/evas/engines/gl_generic/evas_engine.c b/src/modules/evas/engines/gl_generic/evas_engine.c index 802749e..b991700 100644 --- a/src/modules/evas/engines/gl_generic/evas_engine.c +++ b/src/modules/evas/engines/gl_generic/evas_engine.c @@ -1890,7 +1890,7 @@ eng_gl_surface_read_pixels(void *data EINA_UNUSED, void *surface, GL_TH(glGetIntegerv, GL_FRAMEBUFFER_BINDING, &fbo); if (fbo != (GLint) im->tex->pt->fb) - GL_TH_CALL(glBindFramebuffer, glsym_glBindFramebuffer, GL_FRAMEBUFFER, im->tex->pt->fb); + GL_TH(glBindFramebuffer, GL_FRAMEBUFFER, im->tex->pt->fb); GL_TH(glPixelStorei, GL_PACK_ALIGNMENT, 4); // With GLX we will try to read BGRA even if the driver reports RGBA @@ -1920,7 +1920,7 @@ eng_gl_surface_read_pixels(void *data EINA_UNUSED, void *surface, } if (fbo != (GLint) im->tex->pt->fb) - GL_TH_CALL(glBindFramebuffer, glsym_glBindFramebuffer, GL_FRAMEBUFFER, fbo); + GL_TH(glBindFramebuffer, GL_FRAMEBUFFER, fbo); return EINA_TRUE; }