[Mesa-users] Where is the function implementation?
Brian Paul
brianp at vmware.com
Wed Jan 30 16:54:58 PST 2013
On 01/30/2013 10:16 AM, denzig kervan wrote:
> Hi, I'm a newcomer, so please be nice.
> Analysing only the case for intel 32bit and that I have
> _glapi_tls_Dispatch. I don't understand gas so the code in file
> glapi_x86.S I understood as a black box for PIC addressing mode.
> So I have the global variable _glapi_tls_Dispatch that when processed
> by the code in glapi_x86.S creates the glfoo interface directing
> correctly to the appropriate pointer to function in the _glapi_table.
> Then I get stuck. Although I can see the declaration of all the
> pointer to functions in _glapi_table I cannot know where it is its
> implementations. Again, my best bet is _mesa_foo, but I don't know
> how, for example, void (GLAPIENTRYP NewList)(GLuint list, GLenum mode)
> could become _mesa_NewList(GLuint name, GLenum mode). Thanks in advance.
You're right that the implementation of most OpenGL functions, such as
glTexImage2D is called _mesa_TexImage2D.
The dispatch code basically works like this (using glEnable() as an
example):
void glEnable(GLenum cap)
{
d = get_current_dispatch_table_for_calling_thread();
d->Enable(cap);
}
That is, for every GL function, get a pointer to the thread's dispatch
table, then jump through the table to call the function.
These dispatch functions can be implemented in C or x86 assembly code.
The dispatch table is created during context creation. The pointer to
the current dispatch table is set in glXMakeCurrent() or
wglMakeCurrent(), etc.
-Brian
More information about the mesa-users
mailing list