On Wed, 26 Oct 2011 14:08:47 +0900 "Sung W. Park" <[email protected]> said:

> Hi all,
> 
> I'm attaching a patch for the initial version of the GL Fastpath addition to
> evas gl backend.
> 
> Working on different mobile devices, we've noticed that the cost of context
> switch (MakeCurrent) in GL can be very expensive depending on the driver
> implementation.  To minimize the poorly written driver's context switch
> overhead, I've implemented a state tracking layer on top of the driver
> implemented GL.
> 
> Essentially, this layer wraps all the GL/Glue(GLX/EGL) APIs and manages its
> own state changes.  Internally, only one real GL context is created and
> logical contexts are created every time a user requests context creation.
> The logical contexts keep track of its states and sets only the necessary
> states (the ones that are different than the current ones)
> when there is a MakeCurrent request.  The real MakeCurrent gets called when
> there is a Surface/Window change request.
> 
> The GL library is dlopened and all the APIs are dlsym'ed and wrapped
> accordingly.  All the GL functions are in evas_gl_core.{h,c}.
> 
> Here's a very simply flow of the code.
>    - all the APIs are exported as function pointers (*glsym_glBegin),
>      (*glsm_eglCreatContext), and etc.
>    - all the native GL/Glue(GLX/EGL) APIs are dlsym'ed as _sym_glBegin,
>      _sym_eglCreateContext, and etc.
>    - all the fastpath APIs are implmemnted as fpgl_glBegin,
>      fpgl_eglCreateContext, and etc.
>    - if faspath is seletected, the exported APIs are set accordingly
>      ie. glsym_glBegin = fpgl_glBegin;
>    - default mode is the regular gl symbols are directly set.
>      ie. glsym_glBegin = _sym_glBegin;
> 
> I have an Environment variable where you can set it to three different Modes
> 
> EVAS_GL_FASTPATH = 0    // Default mode. Regular GL symbols are directly
> loaded EVAS_GL_FASTPATH = 1    // Fastpath mode. Takes the path described
> above. EVAS_GL_FASTPATH = 2    // Wrapped mode.  All the regular GL functions
> are wrapped once.  This can be used for various purposes
> 
> Since all the GL symbols are now loaded in this library, I took out all
> the gl symbol loading parts in the evas gl backend as you'll see in the patch.
> The changes to the engine and the backend itself is pretty minor.
> 
> There are still some known issues to hammer out but I thought we're at a good
> place for an initial version so that my source doesn't diverge too much.
> 
> Known Issues and To Do's
> * Current GL Fastpath version doesn't support multiple threads.  Instead of
>   having one global real context, I would need to do it for each thread. I'll
>   get on this soon.

this is.. unfortunately... important :( not currently, but in future it will be.

> * Issues running Evas GL on certain conditions.  When running the elementary
>   test (with gl engine), if you run ELMGLview test that runs in ON_DEMAND
> mode, everything works fine. BUT, when you run the ELMGLView test in ALWAYS
>   mode, the subsequent elm tests shows blank screen. When you destroy the
>   GLView window, everything else comes on fine.

smells of a context tracking bug to me.

> * Resource protection code.  This actually applies to Evas GL code in general
>   as well. Since all the resources are shared among all the contexts that get
>   created, I would like to eventually have a resource protecting mechanism
> that prevents access to resources outside of its context unless specifically
>   specified.

how do you know which context a resource belongs to? eg a texture. afre you
going to forbid 2 ctx's to set the same texture id as src texture for ops?
sounds silly.

> I'm attaching three files
>    - evas_gl_core.h, evas_gl_core.c, fastpath.patch
> 
> To get the code running...
>    - copy evas_gl_core.{c,h} to src/modules/engine/gl_common/
>    - apply the fastpath.patch
>    - compile/install evas
>    - to run with fastpath GL (ie. % EVAS_GL_FASTPATH=1 ./evasgl_sample1)
> 
> 
> Let me know if you have questions or comments.

big problem. it breaks the gl engine as-is:

 2:46PM ~ > ELM_ENGINE=gl elementary_test 
Initializing OpenGL APIs...
API OPT: 0 Default API path enabled...
ERR<16397>:evas-gl_x11 evas_x_main.c:802 eng_best_visual_get()
glsym_glXChooseFBConfig returned no configs ERR<16397>:evas-gl_x11
evas_x_main.c:802 eng_best_visual_get() glsym_glXChooseFBConfig returned no
configs ERR<16397>:evas-gl_x11 evas_x_main.c:802 eng_best_visual_get()
glsym_glXChooseFBConfig returned no configs ERR<16397>:ecore_evas
ecore_evas_x.c:176 _ecore_evas_x_gl_window_new() evas_engine_info_set() for
engine 'opengl_x11' failed. ERR<16397>:ecore_evas ecore_evas_x.c:3197
ecore_evas_gl_x11_options_new() evas_engine_info_set() init engine 'opengl_x11'
failed. CRI<16397>:elementary elm_win.c:1461 elm_win_add() OpenGL engine
creation failed. Trying default.

:(


-- 
------------- Codito, ergo sum - "I code, therefore I am" --------------
The Rasterman (Carsten Haitzler)    [email protected]


------------------------------------------------------------------------------
RSA(R) Conference 2012
Save $700 by Nov 18
Register now
http://p.sf.net/sfu/rsa-sfdev2dev1
_______________________________________________
enlightenment-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to