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

Jose Fonseca jfonseca at vmware.com
Sun Jun 28 05:22:58 PDT 2015


On 25/06/15 23:18, Julien Isorce wrote:
>
>
> On 19 June 2015 at 10:24, Jose Fonseca <jfonseca at vmware.com
> <mailto:jfonseca at vmware.com>> wrote:
>
>     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
>             <mailto: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
>
>
> Hi, where exactly ? or do you mean we just need to apply the patch [1]
> you pointed ?
>
>     (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.
>
>
> That's a good news.
> So Jose concretely what needs to be done ? Just apply the patch [1] you
> pointed or apply cast everywhere ?
>
> All conversions are in the 3 files, src/mesa/main/dlist.c,
> src/mesa/main/shaderapi.c and src/mesa/main/shader_query.cpp, am I right ?
>
> I did not notice before, but without any change on upstream code, it
> gives an error only when compiling c++ files. For c files it is a warning:
>
> main/shaderapi.*c*:1148:23: warning: incompatible pointer to integer
> conversion passing 'GLhandleARB' (aka 'void *') to parameter of type
> 'GLuint' (aka 'unsigned int') [-Wint-conversion] attach_shader(ctx,
> program, shader);
>
> main/shader_query.*cpp*:72:7: error: no matching function for call to
> '_mesa_lookup_shader_program_err'**"glBindAttribLocation");../../src/mesa/main/shaderobj.h:89:1:
> note: candidate function not viable: cannot convert argument of
> incomplete type 'GLhandleARB' (aka 'void *') to 'GLuint' (aka 'unsigned
> int')_mesa_lookup_shader_program_err(struct gl_context *ctx, GLuint name,
>
> Thx
>
>
>
>     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
>
>

I mean something like this:

diff --git a/configure.ac b/configure.ac
index af61aa2..afcfbf6 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1353,7 +1353,7 @@ if test "x$enable_dri" = xyes; then
          fi
          ;;
      darwin*)
-        DEFINES="$DEFINES -DGLX_ALIAS_UNSUPPORTED"
+        DEFINES="$DEFINES -DGLX_ALIAS_UNSUPPORTED -DBUILDING_MESA"
          if test "x$with_dri_drivers" = "xyes"; then
              with_dri_drivers="swrast"
          fi
diff --git a/include/GL/glext.h b/include/GL/glext.h
index a3873a6..1f52871 100644
--- a/include/GL/glext.h
+++ b/include/GL/glext.h
@@ -3879,7 +3879,12 @@ GLAPI void APIENTRY glMinSampleShadingARB 
(GLfloat value);
  #ifndef GL_ARB_shader_objects
  #define GL_ARB_shader_objects 1
  #ifdef __APPLE__
+#ifdef BUILDING_MESA
+// Avoid uint <-> void *  warnings
+typedef unsigned long GLhandleARB;
+#else
  typedef void *GLhandleARB;
+#endif
  #else
  typedef unsigned int GLhandleARB;
  #endif


Jose


More information about the mesa-dev mailing list