[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