[Mesa-dev] [PATCH 3/7] egl/android: tweak droid_add_configs_for_visuals()

Eric Engestrom eric at engestrom.ch
Thu Aug 25 21:36:50 UTC 2016


On Thu, Aug 25, 2016 at 05:23:42PM +0100, Emil Velikov wrote:
> From: Emil Velikov <emil.velikov at collabora.com>
> 
> Iterate over the driver_configs first in order to cut down the number of
> getConfigAttrib() calls by a factor of 5.
> 
> While we're here, also drop the sentinel of the visuals array. We
> already know its size so we can use that and save a few bytes.
> 
> Signed-off-by: Emil Velikov <emil.velikov at collabora.com>
> ---
>  src/egl/drivers/dri2/platform_android.c | 40 +++++++++++++++++----------------
>  1 file changed, 21 insertions(+), 19 deletions(-)
> 
> diff --git a/src/egl/drivers/dri2/platform_android.c b/src/egl/drivers/dri2/platform_android.c
> index a2c1adb..0d9dfe9 100644
> --- a/src/egl/drivers/dri2/platform_android.c
> +++ b/src/egl/drivers/dri2/platform_android.c
> @@ -759,7 +759,6 @@ droid_add_configs_for_visuals(_EGLDriver *drv, _EGLDisplay *dpy)
>        { HAL_PIXEL_FORMAT_RGB_888,   { 0xff, 0xff00, 0xff0000, 0x0 } },
>        { HAL_PIXEL_FORMAT_RGB_565,   { 0xf800, 0x7e0, 0x1f, 0x0 } },
>        { HAL_PIXEL_FORMAT_BGRA_8888, { 0xff0000, 0xff00, 0xff, 0xff000000 } },
> -      { 0, { 0, 0, 0, 0 } }
>     };
>     EGLint config_attrs[] = {
>       EGL_NATIVE_VISUAL_ID,   0,
> @@ -768,38 +767,41 @@ droid_add_configs_for_visuals(_EGLDriver *drv, _EGLDisplay *dpy)
>       EGL_RECORDABLE_ANDROID, EGL_TRUE,
>       EGL_NONE
>     };
> +   unsigned int format_count[ARRAY_SIZE(visuals)] = {};
>     int count, i, j;
>  
>     count = 0;
> -   for (i = 0; visuals[i].format; i++) {
> -      int format_count = 0;
> +   for (i = 0; dri2_dpy->driver_configs[i]; i++) {
> +      const EGLint surface_type = EGL_WINDOW_BIT | EGL_PBUFFER_BIT;
> +      struct dri2_egl_config *dri2_conf;
> +      unsigned int double_buffered = 0;
>  
> -      config_attrs[1] = visuals[i].format;
> -      config_attrs[3] = visuals[i].format;
> +      dri2_dpy->core->getConfigAttrib(dri2_dpy->driver_configs[i],
> +         __DRI_ATTRIB_DOUBLE_BUFFER, &double_buffered);
>  
> -      for (j = 0; dri2_dpy->driver_configs[j]; j++) {
> -         const EGLint surface_type = EGL_WINDOW_BIT | EGL_PBUFFER_BIT;
> -         struct dri2_egl_config *dri2_conf;
> -         unsigned int double_buffered = 0;
> +      /* support only double buffered configs */
> +      if (!double_buffered)
> +         continue;
>  
> -         dri2_dpy->core->getConfigAttrib(dri2_dpy->driver_configs[j],
> -            __DRI_ATTRIB_DOUBLE_BUFFER, &double_buffered);
> +      for (j = 0; ARRAY_SIZE(visuals); j++) {

Again...

> +         int format_count = 0;
>  
> -         /* support only double buffered configs */
> -         if (!double_buffered)
> -            continue;
> +         config_attrs[1] = visuals[j].format;
> +         config_attrs[3] = visuals[j].format;
>  
> -         dri2_conf = dri2_add_config(dpy, dri2_dpy->driver_configs[j],
> -               count + 1, surface_type, config_attrs, visuals[i].rgba_masks);
> +         dri2_conf = dri2_add_config(dpy, dri2_dpy->driver_configs[i],
> +               count + 1, surface_type, config_attrs, visuals[j].rgba_masks);
>           if (dri2_conf) {
>              count++;
> -            format_count++;
> +            format_count[j]++;
>           }
>        }
> +   }
>  
> -      if (!format_count) {
> +   for (i = 0; ARRAY_SIZE(format_count); i++) {

...and again...

and you do the same in the other patches :)

> +      if (!format_count[i]) {
>           _eglLog(_EGL_DEBUG, "No DRI config supports native format 0x%x",
> -               visuals[i].format);
> +                 visuals[i].format);
>        }
>     }
>  
> -- 
> 2.9.0


More information about the mesa-dev mailing list