[Mesa-dev] [PATCH 13/15] intel: Refactor creation of DRI2 configs

Paul Berry stereotype441 at gmail.com
Mon Jul 23 15:38:14 PDT 2012


On 21 July 2012 17:36, Chad Versace <chad.versace at linux.intel.com> wrote:

> DRI2 configs were constructed in intelInitScreen2. That function already
> does too much, so move verbatim the code for creating configs to a new
> function, intel_screen_make_configs.
>
> CC: Eric Anholt <eric at anholt.net>
> CC: Paul Berry <stereotype441 at gmail.com>
> Signed-off-by: Chad Versace <chad.versace at linux.intel.com>
> ---
>  src/mesa/drivers/dri/intel/intel_screen.c | 189
> ++++++++++++++++--------------
>  1 file changed, 98 insertions(+), 91 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/intel/intel_screen.c
> b/src/mesa/drivers/dri/intel/intel_screen.c
> index 958ff9f..9bb42dd 100644
> --- a/src/mesa/drivers/dri/intel/intel_screen.c
> +++ b/src/mesa/drivers/dri/intel/intel_screen.c
> @@ -848,6 +848,103 @@ intel_detect_swizzling(struct intel_screen *screen)
>        return true;
>  }
>
> +static __DRIconfig**
> +intel_screen_make_configs(__DRIscreen *dri_screen)
> +{
> +   static const GLenum back_buffer_modes[] = {
> +       GLX_NONE, GLX_SWAP_UNDEFINED_OML, GLX_SWAP_COPY_OML
> +   };
> +
> +   GLenum fb_format[3];
> +   GLenum fb_type[3];
> +   uint8_t depth_bits[4], stencil_bits[4], msaa_samples_array[1];
> +   int color;
> +   __DRIconfig **configs = NULL;
> +
> +   msaa_samples_array[0] = 0;
> +
> +   fb_format[0] = GL_RGB;
> +   fb_type[0] = GL_UNSIGNED_SHORT_5_6_5;
> +
> +   fb_format[1] = GL_BGR;
> +   fb_type[1] = GL_UNSIGNED_INT_8_8_8_8_REV;
> +
> +   fb_format[2] = GL_BGRA;
> +   fb_type[2] = GL_UNSIGNED_INT_8_8_8_8_REV;
> +
> +   depth_bits[0] = 0;
> +   stencil_bits[0] = 0;
> +
> +   /* Generate a rich set of useful configs that do not include an
> +    * accumulation buffer.
> +    */
> +   for (color = 0; color < ARRAY_SIZE(fb_format); color++) {
> +      __DRIconfig **new_configs;
> +      int depth_factor;
> +
> +      /* Starting with DRI2 protocol version 1.1 we can request a
> depth/stencil
> +       * buffer that has a different number of bits per pixel than the
> color
> +       * buffer.  This isn't yet supported here.
> +       */
> +      if (fb_type[color] == GL_UNSIGNED_SHORT_5_6_5) {
> +         depth_bits[1] = 16;
> +         stencil_bits[1] = 0;
> +      } else {
> +         depth_bits[1] = 24;
> +         stencil_bits[1] = 8;
> +      }
> +
> +      depth_factor = 2;
> +
> +      new_configs = driCreateConfigs(fb_format[color], fb_type[color],
> +                                     depth_bits,
> +                                     stencil_bits,
> +                                     depth_factor,
> +                                     back_buffer_modes,
> +                                     ARRAY_SIZE(back_buffer_modes),
> +                                     msaa_samples_array,
> +                                     ARRAY_SIZE(msaa_samples_array),
> +                                     false);
> +      if (configs == NULL)
> +         configs = new_configs;
> +      else
> +         configs = driConcatConfigs(configs, new_configs);
> +   }
> +
> +   /* Generate the minimum possible set of configs that include an
> +    * accumulation buffer.
> +    */
> +   for (color = 0; color < ARRAY_SIZE(fb_format); color++) {
> +      __DRIconfig **new_configs;
> +
> +      if (fb_type[color] == GL_UNSIGNED_SHORT_5_6_5) {
> +         depth_bits[0] = 16;
> +         stencil_bits[0] = 0;
> +      } else {
> +         depth_bits[0] = 24;
> +         stencil_bits[0] = 8;
> +      }
> +
> +      new_configs = driCreateConfigs(fb_format[color], fb_type[color],
> +                                     depth_bits, stencil_bits, 1,
> +                                     back_buffer_modes + 1, 1,
> +                                     msaa_samples_array, 1,
> +                                     true);
> +      if (configs == NULL)
> +         configs = new_configs;
> +      else
> +         configs = driConcatConfigs(configs, new_configs);
> +   }
> +
> +   if (configs == NULL) {
> +      fprintf(stderr, "[%s:%u] Error creating FBConfig!\n", __func__,
> +              __LINE__);
> +      return NULL;
> +   }
> +
> +   return configs;
> +}
> +
>  /**
>   * This is the driver specific part of the createNewScreen entry point.
>   * Called when using DRI2.
> @@ -858,17 +955,8 @@ static const
>  __DRIconfig **intelInitScreen2(__DRIscreen *psp)
>  {
>     struct intel_screen *intelScreen;
> -   GLenum fb_format[3];
> -   GLenum fb_type[3];
>     unsigned int api_mask;
>
> -   static const GLenum back_buffer_modes[] = {
> -       GLX_NONE, GLX_SWAP_UNDEFINED_OML, GLX_SWAP_COPY_OML
> -   };
> -   uint8_t depth_bits[4], stencil_bits[4], msaa_samples_array[1];
> -   int color;
> -   __DRIconfig **configs = NULL;
> -
>     if (psp->dri2.loader->base.version <= 2 ||
>         psp->dri2.loader->getBuffersWithFormat == NULL) {
>        fprintf(stderr,
> @@ -941,88 +1029,7 @@ __DRIconfig **intelInitScreen2(__DRIscreen *psp)
>
>     psp->extensions = intelScreenExtensions;
>
> -   msaa_samples_array[0] = 0;
> -
> -   fb_format[0] = GL_RGB;
> -   fb_type[0] = GL_UNSIGNED_SHORT_5_6_5;
> -
> -   fb_format[1] = GL_BGR;
> -   fb_type[1] = GL_UNSIGNED_INT_8_8_8_8_REV;
> -
> -   fb_format[2] = GL_BGRA;
> -   fb_type[2] = GL_UNSIGNED_INT_8_8_8_8_REV;
> -
> -   depth_bits[0] = 0;
> -   stencil_bits[0] = 0;
> -
> -   /* Generate a rich set of useful configs that do not include an
> -    * accumulation buffer.
> -    */
> -   for (color = 0; color < ARRAY_SIZE(fb_format); color++) {
> -      __DRIconfig **new_configs;
> -      int depth_factor;
> -
> -      /* Starting with DRI2 protocol version 1.1 we can request a
> depth/stencil
> -       * buffer that has a diffferent number of bits per pixel than the
> color
>

Man, I'm gonna miss that typo... :)


> -       * buffer.  This isn't yet supported here.
> -       */
> -      if (fb_type[color] == GL_UNSIGNED_SHORT_5_6_5) {
> -        depth_bits[1] = 16;
> -        stencil_bits[1] = 0;
> -      } else {
> -        depth_bits[1] = 24;
> -        stencil_bits[1] = 8;
> -      }
> -
> -      depth_factor = 2;
> -
> -      new_configs = driCreateConfigs(fb_format[color], fb_type[color],
> -                                    depth_bits,
> -                                    stencil_bits,
> -                                    depth_factor,
> -                                    back_buffer_modes,
> -                                    ARRAY_SIZE(back_buffer_modes),
> -                                    msaa_samples_array,
> -                                    ARRAY_SIZE(msaa_samples_array),
> -                                    false);
> -      if (configs == NULL)
> -        configs = new_configs;
> -      else
> -        configs = driConcatConfigs(configs, new_configs);
> -   }
> -
> -   /* Generate the minimum possible set of configs that include an
> -    * accumulation buffer.
> -    */
> -   for (color = 0; color < ARRAY_SIZE(fb_format); color++) {
> -      __DRIconfig **new_configs;
> -
> -      if (fb_type[color] == GL_UNSIGNED_SHORT_5_6_5) {
> -        depth_bits[0] = 16;
> -        stencil_bits[0] = 0;
> -      } else {
> -        depth_bits[0] = 24;
> -        stencil_bits[0] = 8;
> -      }
> -
> -      new_configs = driCreateConfigs(fb_format[color], fb_type[color],
> -                                    depth_bits, stencil_bits, 1,
> -                                    back_buffer_modes + 1, 1,
> -                                    msaa_samples_array, 1,
> -                                    true);
> -      if (configs == NULL)
> -        configs = new_configs;
> -      else
> -        configs = driConcatConfigs(configs, new_configs);
> -   }
> -
> -   if (configs == NULL) {
> -      fprintf(stderr, "[%s:%u] Error creating FBConfig!\n", __func__,
> -              __LINE__);
> -      return NULL;
> -   }
> -
> -   return (const __DRIconfig **)configs;
> +   return (const __DRIconfig**) intel_screen_make_configs(psp);
>  }
>
>  struct intel_buffer {
> --
> 1.7.11.2
>
>
This patch is

Reviewed-by: Paul Berry <stereotype441 at gmail.com>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20120723/97b11935/attachment.html>


More information about the mesa-dev mailing list