On Tue, Jun 7, 2011 at 12:25 PM, Jeremy Huddleston <jerem...@apple.com> wrote:
> I'm having trouble understanding why GLX_INDIRECT_RENDERING changes what is 
> built into glapi.  I assumed that glapi was agnostic to the actual 
> implementation, so why does glapi care about GLX_INDIRECT_RENDERING?
> I'm trying to build mesa with support for (only) indirect rendering on 
> darwin.  libGL (src/glx, not src/glx/apple) builds fine, but libOSMesa fails 
> to build due to missing symbols.  I'm guessing osmesa.c needs the same 
> GLX_INDIRECT_RENDERING hunk as in src/gallium/targets/libgl-xlib/xlib.c 
> (6678f597e7c9ba784c9af0c86cfc6821558bcaa7) and src/mesa/drivers/x11/glxapi.c 
> (888429360a30090b9ecd17bfd160a88141195235), but I'd like to know *why* this 
> is happening, so I have a better understanding of how to make an 
> indirect+applegl mesa.
In indirect rendering, glGenTextures and glGenTexturesEXT, for
example, use different opcodes.  However, those functions are assigned
the same dispatch offset in glapi.  If glapi defines both of them,
they will be dispatched to the same function, using the same opcode.

As a workaround, when GLX_INDIRECT_RENDERING is defined, glapi no
longer defines glGenTexturesEXT.  Those link to libglapi.a are
supposed to define the function.  Since libglapi.a still references
glGenTexturesEXT (in _glapi_get_proc_address), not defining the
function will result in link errors.  Same to other functions.

> Thanks,
> Jeremy
>
> /bin/sh ../../../../bin/mklib -o OSMesa -linker 'g++' -ldflags '' \
>                -major 7 -minor 11 -patch 0 \
>                -install ../../../../lib -cplusplus  \
>                -id /opt/X11/lib/libOSMesa.7.dylib \
>                -L../../../../lib -lGL osmesa.o ../../../../src/mesa/libmesa.a 
> ../../../../src/mapi/glapi/libglapi.a ../../../../src/glsl/libglsl.a
> mklib: Making Darwin shared library:  libOSMesa.7.11.dylib
> Undefined symbols for architecture x86_64:
>  "_gl_dispatch_stub_356", referenced from:
>      _static_functions in libglapi.a(glapi_getproc.o)
>  "_gl_dispatch_stub_357", referenced from:
>      _static_functions in libglapi.a(glapi_getproc.o)
>  "_gl_dispatch_stub_358", referenced from:
>      _static_functions in libglapi.a(glapi_getproc.o)
>  "_gl_dispatch_stub_359", referenced from:
>      _static_functions in libglapi.a(glapi_getproc.o)
>  "_gl_dispatch_stub_361", referenced from:
>      _static_functions in libglapi.a(glapi_getproc.o)
>  "_gl_dispatch_stub_362", referenced from:
>      _static_functions in libglapi.a(glapi_getproc.o)
>  "_gl_dispatch_stub_363", referenced from:
>      _static_functions in libglapi.a(glapi_getproc.o)
>  "_gl_dispatch_stub_364", referenced from:
>      _static_functions in libglapi.a(glapi_getproc.o)
>  "_gl_dispatch_stub_365", referenced from:
>      _static_functions in libglapi.a(glapi_getproc.o)
>  "_gl_dispatch_stub_366", referenced from:
>      _static_functions in libglapi.a(glapi_getproc.o)
> ld: symbol(s) not found for architecture x86_64
>
>



-- 
o...@lunarg.com
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to