[Mesa-dev] [PATCH 1/4] glsl: Add simple vector type accessor helpers.

Eric Anholt eric at anholt.net
Wed Jun 19 15:43:28 PDT 2013


Kenneth Graunke <kenneth at whitecape.org> writes:

> On 06/18/2013 06:47 AM, Ian Romanick wrote:
>> On 06/18/2013 04:22 AM, Kenneth Graunke wrote:
>>> This patch introduces new functions to quickly grab a pointer to a
>>> vector type.  For example:
>>>
>>>     glsl_type::bvec(4)   returns   glsl_type::bvec4_type
>>>     glsl_type::ivec(3)   returns   glsl_type::ivec3_type
>>>     glsl_type::uvec(2)   returns   glsl_type::uvec2_type
>>>     glsl_type::vec(1)    returns   glsl_type::float_type
>>>
>>> This is less wordy than glsl_type::get_instance(GLSL_TYPE_BOOL, 4, 1),
>>> which can help avoid extra word wrapping.
>>
>> One thing that's annoying about this code is that we have so many ways
>> to get at types.  You can get them from a symbol table, you can get them
>> from the direct pointers, you can get them from pointer math, or you can
>> get them from get_instance.  I'm not sure replacing one with another
>> makes it much better.
>>
>> I remember considering having separate overloads of get_instance for
>> vectors and matrices.  I don't recall why I didn't do it that way.
>>
>>> Signed-off-by: Kenneth Graunke <kenneth at whitecape.org>
>>> ---
>>>   src/glsl/glsl_types.cpp | 52
>>> +++++++++++++++++++++++++++++++++++++++++++++++++
>>>   src/glsl/glsl_types.h   |  9 +++++++++
>>>   2 files changed, 61 insertions(+)
>>>
>>> diff --git a/src/glsl/glsl_types.cpp b/src/glsl/glsl_types.cpp
>>> index df9c5d3..a5491c5 100644
>>> --- a/src/glsl/glsl_types.cpp
>>> +++ b/src/glsl/glsl_types.cpp
>>> @@ -534,6 +534,58 @@ glsl_type::glsl_type(const glsl_type *array,
>>> unsigned length) :
>>>   }
>>>
>>>
>>> +const glsl_type *const
>>> +glsl_type::vec(unsigned components)
>>> +{
>>> +   if (components == 0 || components > 4)
>>> +      return error_type;
>>> +
>>> +   static const glsl_type *const ts[] = {
>>> +      float_type, vec2_type, vec3_type, vec4_type
>>> +   };
>>> +   return ts[components - 1];
>>
>> We could just embed this code in get_instance.  That seems better than
>> adding new methods that are only used in method that's part of the same
>> class.
>
> They're also used in patch 3, outside the class.  That was the 
> motivation for adding them...and I thought it was a bit tidier this way.
>
> But if you'd prefer just putting this in get_instance, that's fine by 
> me...it's what I originally did in v0 of this series anyway.

I really like the new accessors, and always hated get_instance() when
I'm trying to work on simple vectors.

The only bugs I found were the same shadow sampler issues for ES that
Ian caught.  Assuming Ian's issues are fixed, this series is:

Reviewed-by: Eric Anholt <eric at anholt.net>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 197 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20130619/15666ff1/attachment.pgp>


More information about the mesa-dev mailing list