[Mesa-dev] [PATCH 2/3] glsl: translate transform feedback varyings into low-level representation

Marek Olšák maraeo at gmail.com
Fri Nov 4 16:43:10 PDT 2011


Hi Paul,

I won't comment on the patch 1, because I didn't write it, I was just
preserving history.

On Fri, Nov 4, 2011 at 10:00 PM, Paul Berry <stereotype441 at gmail.com> wrote:
[snip]
>> +bool parse_tfeedback_decl(const void *mem_ctx, const char *input,
>> +                          struct tfeedback_decl *decl)
>> +{
>> +   /* We don't have to be pedantic about what is a valid GLSL variable
>> name,
>> +    * because any variable with an invalid name can't exist in the IR
>> anyway.
>> +    */
>> +
>> +   const char *bracket = strrchr(input, '[');
>> +
>> +   if (bracket) {
>> +      decl->name = ralloc_strndup(mem_ctx, input, bracket - input);
>> +      if (sscanf(bracket, "[%u]", &decl->array_index) == 1) {
>> +         decl->is_array = true;
>> +         return true; /* Found: "var[i]" */
>> +      }
>> +   } else {
>> +      decl->name = ralloc_strdup(mem_ctx, input);
>> +      return true;
>> +   }
>> +
>> +   return false;
>> +}
>
> For non-arrays, this function doesn't assign to decl->is_array or
> decl->array_index.  That's a problem, because its caller
> (ir_set_transform_feedback_outs::ir_set_transform_feedback_outs()) passes
> uninitialized memory for decl.  We could fix the problem by having
> ir_set_transform_feedback_outs::ir_set_transform_feedback_outs() initialize
> the memory first, but I would prefer if we fixed the problem by always
> assigning to all fields of decl, since we're effectively treating it as an
> output of this function.

Yeah, that was unintentional.

Regarding the other comments, I don't know the GLSL compiler so well.
I had forked ir_set_program_inouts and was basing upon that. Now that
I think about it, it makes more sense to do it like you say. :)

Concerning this:

varying mat4 r;
glTransformFeedbackVaryingsEXT(.. "r[1]" ..);

The EXT spec doesn't state whether this is legal. It says nothing
about matrices, actually.

[snip]
>
> The patch series doesn't add any code that calls this function.  Is that
> planned for a future patch?
>

The function is already used here:
http://cgit.freedesktop.org/~mareko/mesa/log/?h=transform-feedback

It's a work in progress, but EXT_transform_feedback already works
quite well and ARB_transform_feedback2 too except
glDrawTransformFeedback, which isn't fully implemented yet. Despite
your remarks, the GLSL linker works pretty good for me, so I am going
to take a break from it for a while.

Feel free to take over all 3 patches and implement it properly, as I
might not have time to get to it again soon.

Marek


More information about the mesa-dev mailing list