[Mesa-dev] [PATCH 14/15] intel: Refactor intel_screen_make_configs
Ian Romanick
idr at freedesktop.org
Mon Jul 23 13:35:46 PDT 2012
On 07/21/2012 05:36 PM, Chad Versace wrote:
> Transform the code from clever, obfuscated, and imperative to
> straight-forward and table-driven.
Does the output of glxinfo change? It's somewhat advantageous for the
IDs associated with a specific set of values to remain the same. We
have a lot of bug reports, for example, that list specific IDs. It
makes it a lot easier to reproduce the bugs that way.
> CC: Ian Romanick <idr at freedesktop.org>
> Signed-off-by: Chad Versace <chad.versace at linux.intel.com>
> ---
> src/mesa/drivers/dri/intel/intel_screen.c | 167 +++++++++++++++++-------------
> 1 file changed, 97 insertions(+), 70 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/intel/intel_screen.c b/src/mesa/drivers/dri/intel/intel_screen.c
> index 9bb42dd..61daea7 100644
> --- a/src/mesa/drivers/dri/intel/intel_screen.c
> +++ b/src/mesa/drivers/dri/intel/intel_screen.c
> @@ -851,85 +851,112 @@ intel_detect_swizzling(struct intel_screen *screen)
> 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
> + struct config_params {
> + GLenum color_format;
> + GLenum color_type;
> + const uint8_t depth_sizes[4];
> + const uint8_t stencil_sizes[4];
Do you really mean const here?
> + unsigned num_depth_stencil_sizes;
> + unsigned num_back_buffer_modes;
> + unsigned num_msaa_modes;
> + bool enable_accum;
> };
>
> - 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;
> + static const GLenum back_buffer_modes[] = {
> + GLX_SWAP_UNDEFINED_OML, GLX_NONE, GLX_SWAP_COPY_OML,
> + };
>
> - depth_bits[0] = 0;
> - stencil_bits[0] = 0;
> + static const uint8_t msaa_samples[] = {0};
>
> - /* Generate a rich set of useful configs that do not include an
> - * accumulation buffer.
> + /* 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.
> */
> - 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.
> + struct config_params params[] = {
It seems like this should be const instead of the pair of fields in the
structure.
> + /* Configs without accumulation buffer. */
> + {
> + .color_format = GL_RGB,
> + .color_type = GL_UNSIGNED_SHORT_5_6_5,
> + .depth_sizes = {0, 16},
> + .stencil_sizes = {0, 0},
> + .num_depth_stencil_sizes = 2,
> + .num_back_buffer_modes = 3,
> + .num_msaa_modes = 1,
> + .enable_accum = false,
> + },
> + {
> + .color_format = GL_BGR,
> + .color_type = GL_UNSIGNED_INT_8_8_8_8_REV,
> + .depth_sizes = {0, 24},
> + .stencil_sizes = {0, 8},
> + .num_depth_stencil_sizes = 2,
> + .num_back_buffer_modes = 3,
> + .num_msaa_modes = 1,
> + .enable_accum = false,
> + },
> + {
> + .color_format = GL_BGRA,
> + .color_type = GL_UNSIGNED_INT_8_8_8_8_REV,
> + .depth_sizes = {0, 24},
> + .stencil_sizes = {0, 8},
> + .num_depth_stencil_sizes = 2,
> + .num_back_buffer_modes = 3,
> + .num_msaa_modes = 1,
> + .enable_accum = false,
> + },
> +
> + /* Configs with accumulation buffer.
> + *
> + * We generate the minimum possible set of configs that include an
> + * accumulation buffer.
> */
> - 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);
> - }
> + {
> + .color_format = GL_RGB,
> + .color_type = GL_UNSIGNED_SHORT_5_6_5,
> + .depth_sizes = {16},
> + .stencil_sizes = {0},
> + .num_depth_stencil_sizes = 1,
> + .num_back_buffer_modes = 1,
> + .num_msaa_modes = 1,
> + .enable_accum = true,
> + },
> + {
> + .color_format = GL_BGR,
> + .color_type = GL_UNSIGNED_INT_8_8_8_8_REV,
> + .depth_sizes = {24},
> + .stencil_sizes = {8},
> + .num_depth_stencil_sizes = 1,
> + .num_back_buffer_modes = 1,
> + .num_msaa_modes = 1,
> + .enable_accum = true,
> + },
> + {
> + .color_format = GL_BGRA,
> + .color_type = GL_UNSIGNED_INT_8_8_8_8_REV,
> + .depth_sizes = {24},
> + .stencil_sizes = {8},
> + .num_depth_stencil_sizes = 1,
> + .num_back_buffer_modes = 1,
> + .num_msaa_modes = 1,
> + .enable_accum = true,
> + },
> + };
>
> - /* Generate the minimum possible set of configs that include an
> - * accumulation buffer.
> - */
> - for (color = 0; color < ARRAY_SIZE(fb_format); color++) {
> - __DRIconfig **new_configs;
> + __DRIconfig **configs = NULL;
>
> - 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;
> - }
> + for (int i = 0; i < ARRAY_SIZE(params); ++i) {
> + __DRIconfig **new_configs =
> + driCreateConfigs(params[i].color_format,
> + params[i].color_type,
> + params[i].depth_sizes,
> + params[i].stencil_sizes,
> + params[i].num_depth_stencil_sizes,
> + back_buffer_modes,
> + params[i].num_back_buffer_modes,
> + msaa_samples,
> + params[i].num_msaa_modes,
> + params[i].enable_accum);
>
> - 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
>
More information about the mesa-dev
mailing list