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