[Mesa-dev] [PATCH 2/6] meta: Rearrange shader creation in setup_glsl_generate_mipmap

Kenneth Graunke kenneth at whitecape.org
Fri Oct 5 17:36:37 PDT 2012


On 10/05/2012 03:56 PM, Ian Romanick wrote:
> From: Ian Romanick <ian.d.romanick at intel.com>
>
> The diff looks weird, but this moves the code from the first 'if
> (ctx->Const.GLSLVersion < 130)' block down into the second block.  It
> also moves some variable decalarations closer to their use.
>
> NOTE: This is a candidate for the 9.0 branch.
>
> Signed-off-by: Ian Romanick <ian.d.romanick at intel.com>
> ---
>   src/mesa/drivers/common/meta.c | 85 +++++++++++++++++++++---------------------
>   1 file changed, 43 insertions(+), 42 deletions(-)
>
> diff --git a/src/mesa/drivers/common/meta.c b/src/mesa/drivers/common/meta.c
> index 0c9ee59..10dc495 100644
> --- a/src/mesa/drivers/common/meta.c
> +++ b/src/mesa/drivers/common/meta.c
> @@ -3047,7 +3047,6 @@ setup_glsl_generate_mipmap(struct gl_context *ctx,
>      };
>      struct glsl_sampler *sampler;
>      const char *vs_source;
> -   const char *fs_template;
>
>      static const char *vs_int_source =
>         "#version 130\n"
> @@ -3070,11 +3069,41 @@ setup_glsl_generate_mipmap(struct gl_context *ctx,
>         "   out_color = texture(tex2d, texCoords.xy);\n"
>         "}\n";
>      char *fs_source;
> -   const char *extension_mode;
>      GLuint vs, fs;
>      void *mem_ctx;
>
> +   /* Check if already initialized */
> +   if (mipmap->ArrayObj == 0) {
> +
> +      /* create vertex array object */
> +      _mesa_GenVertexArrays(1, &mipmap->ArrayObj);
> +      _mesa_BindVertexArray(mipmap->ArrayObj);
> +
> +      /* create vertex array buffer */
> +      _mesa_GenBuffersARB(1, &mipmap->VBO);
> +      _mesa_BindBufferARB(GL_ARRAY_BUFFER_ARB, mipmap->VBO);
> +
> +      /* setup vertex arrays */
> +      _mesa_VertexAttribPointerARB(0, 2, GL_FLOAT, GL_FALSE,
> +                                   sizeof(struct vertex), OFFSET(x));
> +      _mesa_VertexAttribPointerARB(1, 3, GL_FLOAT, GL_FALSE,
> +                                   sizeof(struct vertex), OFFSET(tex));
> +   }
> +
> +   /* Generate a fragment shader program appropriate for the texture target */
> +   sampler = setup_texture_sampler(target, mipmap);
> +   assert(sampler != NULL);
> +   if (sampler->shader_prog != 0) {
> +      mipmap->ShaderProg = sampler->shader_prog;
> +      return;
> +   }
> +
> +   mem_ctx = ralloc_context(NULL);
> +

I would combine this with the declaration:

    void *mem_ctx = ralloc_context(NULL);

Otherwise, this looks okay.  Coalescing the two if-statements seems like 
a good idea.  It does also let you kill both mistakes with a single line 
in the next patch.

For the series:
Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>

This also replaces Oliver's series.

>      if (ctx->Const.GLSLVersion < 130) {
> +      const char *fs_template;
> +      const char *extension_mode;
> +
>         vs_source =
>            "attribute vec2 position;\n"
>            "attribute vec3 textureCoords;\n"
> @@ -3092,7 +3121,18 @@ setup_glsl_generate_mipmap(struct gl_context *ctx,
>            "{\n"
>            "   gl_FragColor = %s(texSampler, %s);\n"
>            "}\n";
> -   } else {
> +
> +      extension_mode = ((target == GL_TEXTURE_1D_ARRAY) ||
> +                        (target == GL_TEXTURE_2D_ARRAY)) ?
> +                       "require" : "disable";
> +
> +      fs_source = ralloc_asprintf(mem_ctx, fs_template,
> +                                  extension_mode, sampler->type,
> +                                  sampler->func, sampler->texcoords);
> +   }
> +   else {
> +      const char *fs_template;
> +
>         vs_source =
>            "#version 130\n"
>            "in vec2 position;\n"
> @@ -3113,46 +3153,7 @@ setup_glsl_generate_mipmap(struct gl_context *ctx,
>            "{\n"
>            "   out_color = texture(texSampler, %s);\n"
>            "}\n";
> -    }
> -
> -   /* Check if already initialized */
> -   if (mipmap->ArrayObj == 0) {
> -
> -      /* create vertex array object */
> -      _mesa_GenVertexArrays(1, &mipmap->ArrayObj);
> -      _mesa_BindVertexArray(mipmap->ArrayObj);
> -
> -      /* create vertex array buffer */
> -      _mesa_GenBuffersARB(1, &mipmap->VBO);
> -      _mesa_BindBufferARB(GL_ARRAY_BUFFER_ARB, mipmap->VBO);
> -
> -      /* setup vertex arrays */
> -      _mesa_VertexAttribPointerARB(0, 2, GL_FLOAT, GL_FALSE,
> -                                   sizeof(struct vertex), OFFSET(x));
> -      _mesa_VertexAttribPointerARB(1, 3, GL_FLOAT, GL_FALSE,
> -                                   sizeof(struct vertex), OFFSET(tex));
> -   }
>
> -   /* Generate a fragment shader program appropriate for the texture target */
> -   sampler = setup_texture_sampler(target, mipmap);
> -   assert(sampler != NULL);
> -   if (sampler->shader_prog != 0) {
> -      mipmap->ShaderProg = sampler->shader_prog;
> -      return;
> -   }
> -
> -   mem_ctx = ralloc_context(NULL);
> -
> -   if (ctx->Const.GLSLVersion < 130) {
> -      extension_mode = ((target == GL_TEXTURE_1D_ARRAY) ||
> -                        (target == GL_TEXTURE_2D_ARRAY)) ?
> -                       "require" : "disable";
> -
> -      fs_source = ralloc_asprintf(mem_ctx, fs_template,
> -                                  extension_mode, sampler->type,
> -                                  sampler->func, sampler->texcoords);
> -   }
> -   else {
>         fs_source = ralloc_asprintf(mem_ctx, fs_template,
>                                     sampler->type, "vec4",
>                                     sampler->texcoords);
>



More information about the mesa-dev mailing list