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

Ian Romanick idr at freedesktop.org
Sun Oct 7 20:33:26 PDT 2012


On 10/05/2012 05:36 PM, Kenneth Graunke wrote:
> 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);

There's an early return that would have to change of the ralloc_context 
was moved to the top, and the declaration can't be moved down because 
this is C.  Having them split, while annoying, seemed the safest route. 
  Right?

> 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