On 21 July 2012 17:36, Chad Versace <chad.vers...@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 <e...@anholt.net> > CC: Paul Berry <stereotype...@gmail.com> > Signed-off-by: Chad Versace <chad.vers...@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 <stereotype...@gmail.com>
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev