On 2018-03-07 11:26 PM, Carsten Haitzler (The Rasterman) wrote:
On Wed, 07 Mar 2018 13:25:27 -0800 Derek Foreman <der...@osg.samsung.com> said:

this brings back memories of problems with checking for extension symbols
before a context is set up. the context may change the symbols (procaddress
returned functions) as for example the same symbol for gles1.1 might vary for
2.0 and then 3.0 ...

i know we've had these issue because that that's why the checks happen after
context init.

are you sure this is right?

I think so, but I'm not sure all of this stuff is working as intended.

As far as I can tell from the spec, we need an initialized display to query these strings (or NO_DISPLAY to query client extensions, which we really should be doing too). It's the GL_EXTENSIONS, not EGL that need a bound context.

It was my commit that split up and moved the gl symbols for this engine in commit eda81c6dffd84f so I think I was overly zealous there. I think before that maybe were were using an invalid/no display and getting just the client strings, which are quite different. (We actually should be using client strings to determine if we can use eglGetPlatformDisplay)

I've tested here and I get exactly the same string before and after the recent change on my intel hardware. Haven't checked all the procaddress pointers.

Other compositors do the same thing (weston), so I think it's right this way.

What we probably should be doing is:
query egl client extensions
create display (with platform base if it's in client exts)
init display
query egl extensions
create context (perhaps using IMG's priority ext)
makecurrent
query gl extensions

but I'm having a really hard time understanding the guts of evas_gl_symbols() as it seems to expect the EGL_EXTENSIONS string to be passed in (it looks for EGL_KHR_image_base), but it also looks for stuff like GL_OES_mapbuffer which would be in the gl extension string you can't get until you have a context bound.

So am I supposed to call this function twice, once with EGL extensions and once with GL extensions? or strcat the strings (which means I have to call after my context is bound?) or ??

Thanks,
Derek

derekf pushed a commit to branch master.

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

commit f8658d25fa604f885ee23b20e94a2892d340bceb
Author: Derek Foreman <der...@osg.samsung.com>
Date:   Wed Mar 7 13:11:45 2018 -0600

     gl_drm: Move the gl symbol check to immediately after display init
We don't actually need a context first, just an initialized display.
---
  src/modules/evas/engines/gl_drm/evas_outbuf.c | 4 ++--
  1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/modules/evas/engines/gl_drm/evas_outbuf.c
b/src/modules/evas/engines/gl_drm/evas_outbuf.c index aff5de87bf..b1235355cc
100644
--- a/src/modules/evas/engines/gl_drm/evas_outbuf.c
+++ b/src/modules/evas/engines/gl_drm/evas_outbuf.c
@@ -226,6 +226,8 @@ _evas_outbuf_egl_setup(Outbuf *ob)
          return EINA_FALSE;
       }
+ eng_gl_symbols(ob->egl.disp);
+
     if (!eglGetConfigs(ob->egl.disp, NULL, 0, &ncfg) || (ncfg == 0))
       {
          ERR("eglGetConfigs() fail. code=%#x", eglGetError());
@@ -334,8 +336,6 @@ _evas_outbuf_egl_setup(Outbuf *ob)
          goto err;
       }
- eng_gl_symbols(ob->egl.disp);
-
     ob->gl_context = glsym_evas_gl_common_context_new();
     if (!ob->gl_context) goto err;
--






------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to