On 25/06/15 23:18, Julien Isorce wrote:
On 19 June 2015 at 10:24, Jose Fonseca <jfons...@vmware.com
<mailto:jfons...@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.tur...@dronecode.org.uk
<mailto:jon.tur...@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
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev