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

Kenneth Graunke kenneth at whitecape.org
Sun Oct 7 21:33:27 PDT 2012


On 10/07/2012 08:33 PM, Ian Romanick wrote:
> 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?

You're right...didn't notice that.  Definitely leave it as-is.



More information about the mesa-dev mailing list