On Fri, 15 May 2015 12:12:39 -0500 Derek Foreman <der...@osg.samsung.com> wrote:
> Currently we pass either a single format or no formats to the gl renderer > create and output_create functions. We extend this to any number of > formats so we can allow fallback formats if we don't get our first pick. > > Reviewed-By: Bryce Harrington <br...@osg.samsung.com> > Reviewed-By: Pekka Paalanen <pekka.paala...@collabora.co.uk> > Signed-off-by: Derek Foreman <der...@osg.samsung.com> > --- > src/compositor-drm.c | 5 ++-- > src/compositor-fbdev.c | 4 +-- > src/compositor-wayland.c | 12 ++++---- > src/compositor-x11.c | 5 ++-- > src/gl-renderer.c | 71 > ++++++++++++++++++++++++++++++++---------------- > src/gl-renderer.h | 6 ++-- > 6 files changed, 66 insertions(+), 37 deletions(-) > > diff --git a/src/gl-renderer.c b/src/gl-renderer.c > index ae3122f..248c8aa 100644 > --- a/src/gl-renderer.c > +++ b/src/gl-renderer.c > @@ -1898,14 +1898,38 @@ log_egl_config_info(EGLDisplay egldpy, EGLConfig > eglconfig) > } > > static int > +match_config_to_visual(EGLDisplay egl_display, > + EGLint visual_id, > + EGLConfig *configs, > + int count) > +{ > + int i; > + > + for (i = 0; i < count; ++i) { > + EGLint id; > + > + if (!eglGetConfigAttrib(egl_display, > + configs[i], EGL_NATIVE_VISUAL_ID, > + &id)) > + continue; > + > + if (id == visual_id) > + return i; > + } > + > + weston_log("Unable to find an appropriate EGL config.\n"); You are calling this function in a loop until it does not return -1 or all formats are through, so the error message doesn't really fit. Something like "Visual 0xblahblah not matched with an EGLConfig" might be better. > + return -1; > +} > + > +static int > egl_choose_config(struct gl_renderer *gr, const EGLint *attribs, > - const EGLint *visual_id, > + const EGLint *visual_id, const int n_ids, > EGLConfig *config_out) > { > EGLint count = 0; > EGLint matched = 0; > EGLConfig *configs; > - int i; > + int i, config_index = -1; > > if (!eglGetConfigs(gr->egl_display, NULL, 0, &count) || count < 1) > return -1; > @@ -1915,31 +1939,27 @@ egl_choose_config(struct gl_renderer *gr, const > EGLint *attribs, > return -1; > > if (!eglChooseConfig(gr->egl_display, attribs, configs, > - count, &matched)) > + count, &matched) || !matched) > goto out; > > - for (i = 0; i < matched; ++i) { > - EGLint id; > + if (!visual_id) > + config_index = 0; > > - if (visual_id) { > - if (!eglGetConfigAttrib(gr->egl_display, > - configs[i], EGL_NATIVE_VISUAL_ID, > - &id)) > - continue; > + for (i = 0; config_index == -1 && i < n_ids; i++) > + config_index = match_config_to_visual(gr->egl_display, > + visual_id[i], > + configs, > + matched); > > - if (id != 0 && id != *visual_id) > - continue; > - } > - > - *config_out = configs[i]; > - > - free(configs); > - return 0; > - } > + if (config_index != -1) > + *config_out = configs[config_index]; > > out: > free(configs); > - return -1; > + if (config_index == -1) The error message you wrote would be more at home here, but it seems all the callers already report it. > + return -1; > + > + return 0; > } You can fix the error message in a follow-up, so that I can push these now. I think these two patches are proper for post RC1 as reasonable bug fixes. Pushed. b33877a..c4cfe85 master -> master Might also want to fix the error message that says [08:53:48.703] failed to choose EGL config [08:53:48.703] EGL error state: EGL_SUCCESS (0x3000) [08:53:48.705] failed to initialize egl to be less confusing. ;-) Thanks, pq _______________________________________________ wayland-devel mailing list wayland-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/wayland-devel