[Mesa-dev] [PATCH 2/2] mesa: add typesize validation to resource functions

Tapani Pälli tapani.palli at intel.com
Fri Aug 11 11:23:25 UTC 2017



On 08/11/2017 01:18 PM, Tapani Pälli wrote:
> 
> 
> On 08/11/2017 01:02 PM, Timothy Arceri wrote:
>>
>>
>> On 11/08/17 17:45, Tapani Pälli wrote:
>>> This makes development/changes to program resource code more safe.
>>> Patch also makes helper functions static.
>>>
>>> Signed-off-by: Tapani Pälli <tapani.palli at intel.com>
>>> ---
>>>   src/mesa/main/shader_query.cpp | 3 ++-
>>>   1 file changed, 2 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/src/mesa/main/shader_query.cpp 
>>> b/src/mesa/main/shader_query.cpp
>>> index f2bdcaa..d1fc5e9 100644
>>> --- a/src/mesa/main/shader_query.cpp
>>> +++ b/src/mesa/main/shader_query.cpp
>>> @@ -49,8 +49,9 @@ program_resource_location(struct 
>>> gl_program_resource *res,
>>>    * Warning! this is not type safe so be *very* careful when using 
>>> these.
>>>    */
>>>   #define DECL_RESOURCE_FUNC(name, type) \
>>> -const type * RESOURCE_ ## name (gl_program_resource *res) { \
>>> +static const type * RESOURCE_ ## name (gl_program_resource *res) { \
>>>      assert(res->Data); \
>>> +   assert(res->TypeSize == sizeof(type));\
>>
>> I'm not really a fan of adding members and passing them around just 
>> for the sake of debug builds.
> 
> Fair enough, this was meant to bring some additional safety as one can 
> use the functions with wrong type without any errors (there was actual 
> bug about this when adding the initial code where wrong type was used 
> with some resource and it was very hard to track down, cannot seem to 
> find it now though).
> 
>> What exactly is the problem you are running into? Can it be solved by 
>> using the existing members?
>>
>> Could you just do this instead?
>>
>> #define DECL_RESOURCE_FUNC(name, type, data_type) \
>> const type * RESOURCE_ ## name (gl_program_resource *res) { \
>>     assert(res->Type == type); \
>>     assert(res->Data); \
>>     return (type *) res->Data; \
>> }
>>
>> DECL_RESOURCE_FUNC(ATC, GL_ATOMIC_COUNTER_BUFFER,
>>                     gl_active_atomic_buffer);
>>
>>
>>
>>>      return (type *) res->Data; \
>>>   }
>>>
> 
> Sure, this looks fine approach to me, will make it more safe!

Or well .. I'll think about it and experiment a bit. This would mean 
introducing more of the helper funcs (not really big problem?), since 
now at least RESOURCE_VAR and RESOURCE_UNI cover multiple types.

// Tapani


More information about the mesa-dev mailing list