[Mesa-dev] [PATCH 1/5] darwin: Suppress type conversion warnings for GLhandleARB

Jose Fonseca jfonseca at vmware.com
Fri Jun 19 02:24:50 PDT 2015


On 19/06/15 04:46, Ian Romanick wrote:
> On 06/17/2015 10:53 PM, Julien Isorce wrote:
>> From: Jon TURNEY <jon.turney at dronecode.org.uk>
>>
>> On darwin, GLhandleARB is defined as a void *, not the unsigned int it is on
>> linux.
>>
>> For the moment, apply a cast to supress the warning
>>
>> Possibly this is safe, as for the mesa software renderer the shader program
>> handle is not a real pointer, but a integer handle
>>
>> Probably this is not the right thing to do, and we should pay closer attention
>> to how the GLhandlerARB type is used.
>
> In Mesa, glBindAttribLocation (which takes GLuint) and
> glBindAttribLocationARB (which takes GLhandleARB) are *the same
> function*.  The same applies to pretty much all the other GLhandleARB
> functions.


Properly fixing this is a nightmare, but I think that short term 
workaround is feasible.

This is the generated glapitemp.h:

   KEYWORD1 void KEYWORD2 NAME(BindAttribLocationARB)(GLhandleARB 
program, GLuint index, const GLcharARB * name)
   {
       (void) program; (void) index; (void) name;
      DISPATCH(BindAttribLocation, (program, index, name), (F, 
"glBindAttribLocationARB(%d, %d, %p);\n", program, index, (const void *) 
name));
   }

Provided that GLhandlerARB is defined as `unsigned long` during Mesa 
build on MacOSX (to avoid these int<->void *) conversions [1], the 
compiler should implicitly cast the 64bits GLhandlerARB program to an 
32-bits GLuint.

So, when an app calls glBindAttribLocationARB it will be dispatched to 
_mesa_BindAttribLocation, and the program truncated. So it should all 
just work.

Ditto for when GLhandleARB appears as return value.


The only problem is when GLhandleARB appears as a pointer, as there is 
only one such instance:

   GLAPI void APIENTRY glGetAttachedObjectsARB (GLhandleARB 
containerObj, GLsizei maxCount, GLsizei *count, GLhandleARB *obj);

But we do have a separate entry-point for this 
(_mesa_GetAttachedObjectsARB) so again, we're all good.


So, Jon/Julien's patch seems perfectly workable -- all really left to do 
is to silence  GLhandleARB <-> GLuint conversions.


Jose


[1] Apitrace also defines GLhandleARB as unsigned long internally to 
avoid this 
https://github.com/apitrace/apitrace/blob/master/thirdparty/khronos/GL/glext.patch



More information about the mesa-dev mailing list