mirror of
https://github.com/X11Libre/xserver.git
synced 2026-03-24 03:44:06 +00:00
glx: convert to direct GL dispatch (v2)
We now expect to be linked against something that provides the GL API, instead of manually grubbing about in the DRI driver's dispatch table. Since the GLX we expose calls GL functions that are meant to be looked up dynamically, also add a way to thunk through to GetProcAddress. This includes a refresh of the generated sources, which requires a correspondingly new Mesa. The GetProcAddress stubs are at the moment merely enough to make this link against Mesa 9.2, but should really be provided for everything not in the OpenGL 1.2 ABI. v2: Explicitly hide the GetProcAddress stubs so we can't conflict with libGL symbols; fix leading tab/space issues [anholt] Reviewed-by: Keith Packard <keithp@keithp.com> Signed-off-by: Adam Jackson <ajax@redhat.com>
This commit is contained in:
@@ -36,10 +36,6 @@
|
||||
#include "unpack.h"
|
||||
#include "indirect_size.h"
|
||||
#include "indirect_dispatch.h"
|
||||
#include "glapitable.h"
|
||||
#include "glapi.h"
|
||||
#include "glthread.h"
|
||||
#include "dispatch.h"
|
||||
|
||||
void
|
||||
__glXDispSwap_Map1f(GLbyte * pc)
|
||||
@@ -73,7 +69,7 @@ __glXDispSwap_Map1f(GLbyte * pc)
|
||||
}
|
||||
__GLX_SWAP_FLOAT_ARRAY(points, compsize);
|
||||
|
||||
CALL_Map1f(GET_DISPATCH(), (target, u1, u2, k, order, points));
|
||||
glMap1f(target, u1, u2, k, order, points);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -117,9 +113,7 @@ __glXDispSwap_Map2f(GLbyte * pc)
|
||||
}
|
||||
__GLX_SWAP_FLOAT_ARRAY(points, compsize);
|
||||
|
||||
CALL_Map2f(GET_DISPATCH(),
|
||||
(target, u1, u2, ustride, uorder, v1, v2, vstride, vorder,
|
||||
points));
|
||||
glMap2f(target, u1, u2, ustride, uorder, v1, v2, vstride, vorder, points);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -167,7 +161,7 @@ __glXDispSwap_Map1d(GLbyte * pc)
|
||||
#else
|
||||
points = (GLdouble *) pc;
|
||||
#endif
|
||||
CALL_Map1d(GET_DISPATCH(), (target, u1, u2, k, order, points));
|
||||
glMap1d(target, u1, u2, k, order, points);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -223,9 +217,7 @@ __glXDispSwap_Map2d(GLbyte * pc)
|
||||
#else
|
||||
points = (GLdouble *) pc;
|
||||
#endif
|
||||
CALL_Map2d(GET_DISPATCH(),
|
||||
(target, u1, u2, ustride, uorder, v1, v2, vstride, vorder,
|
||||
points));
|
||||
glMap2d(target, u1, u2, ustride, uorder, v1, v2, vstride, vorder, points);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -337,39 +329,36 @@ __glXDispSwap_DrawArrays(GLbyte * pc)
|
||||
|
||||
switch (component) {
|
||||
case GL_VERTEX_ARRAY:
|
||||
CALL_EnableClientState(GET_DISPATCH(), (GL_VERTEX_ARRAY));
|
||||
CALL_VertexPointer(GET_DISPATCH(), (numVals, datatype, stride, pc));
|
||||
glEnableClientState(GL_VERTEX_ARRAY);
|
||||
glVertexPointer(numVals, datatype, stride, pc);
|
||||
break;
|
||||
case GL_NORMAL_ARRAY:
|
||||
CALL_EnableClientState(GET_DISPATCH(), (GL_NORMAL_ARRAY));
|
||||
CALL_NormalPointer(GET_DISPATCH(), (datatype, stride, pc));
|
||||
glEnableClientState(GL_NORMAL_ARRAY);
|
||||
glNormalPointer(datatype, stride, pc);
|
||||
break;
|
||||
case GL_COLOR_ARRAY:
|
||||
CALL_EnableClientState(GET_DISPATCH(), (GL_COLOR_ARRAY));
|
||||
CALL_ColorPointer(GET_DISPATCH(), (numVals, datatype, stride, pc));
|
||||
glEnableClientState(GL_COLOR_ARRAY);
|
||||
glColorPointer(numVals, datatype, stride, pc);
|
||||
break;
|
||||
case GL_INDEX_ARRAY:
|
||||
CALL_EnableClientState(GET_DISPATCH(), (GL_INDEX_ARRAY));
|
||||
CALL_IndexPointer(GET_DISPATCH(), (datatype, stride, pc));
|
||||
glEnableClientState(GL_INDEX_ARRAY);
|
||||
glIndexPointer(datatype, stride, pc);
|
||||
break;
|
||||
case GL_TEXTURE_COORD_ARRAY:
|
||||
CALL_EnableClientState(GET_DISPATCH(), (GL_TEXTURE_COORD_ARRAY));
|
||||
CALL_TexCoordPointer(GET_DISPATCH(),
|
||||
(numVals, datatype, stride, pc));
|
||||
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
|
||||
glTexCoordPointer(numVals, datatype, stride, pc);
|
||||
break;
|
||||
case GL_EDGE_FLAG_ARRAY:
|
||||
CALL_EnableClientState(GET_DISPATCH(), (GL_EDGE_FLAG_ARRAY));
|
||||
CALL_EdgeFlagPointer(GET_DISPATCH(),
|
||||
(stride, (const GLboolean *) pc));
|
||||
glEnableClientState(GL_EDGE_FLAG_ARRAY);
|
||||
glEdgeFlagPointer(stride, (const GLboolean *) pc);
|
||||
break;
|
||||
case GL_SECONDARY_COLOR_ARRAY:
|
||||
CALL_EnableClientState(GET_DISPATCH(), (GL_SECONDARY_COLOR_ARRAY));
|
||||
CALL_SecondaryColorPointerEXT(GET_DISPATCH(),
|
||||
(numVals, datatype, stride, pc));
|
||||
glEnableClientState(GL_SECONDARY_COLOR_ARRAY);
|
||||
glSecondaryColorPointerEXT(numVals, datatype, stride, pc);
|
||||
break;
|
||||
case GL_FOG_COORD_ARRAY:
|
||||
CALL_EnableClientState(GET_DISPATCH(), (GL_FOG_COORD_ARRAY));
|
||||
CALL_FogCoordPointerEXT(GET_DISPATCH(), (datatype, stride, pc));
|
||||
glEnableClientState(GL_FOG_COORD_ARRAY);
|
||||
glFogCoordPointerEXT(datatype, stride, pc);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@@ -378,15 +367,15 @@ __glXDispSwap_DrawArrays(GLbyte * pc)
|
||||
pc += __GLX_PAD(numVals * __glXTypeSize(datatype));
|
||||
}
|
||||
|
||||
CALL_DrawArrays(GET_DISPATCH(), (primType, 0, numVertexes));
|
||||
glDrawArrays(primType, 0, numVertexes);
|
||||
|
||||
/* turn off anything we might have turned on */
|
||||
CALL_DisableClientState(GET_DISPATCH(), (GL_VERTEX_ARRAY));
|
||||
CALL_DisableClientState(GET_DISPATCH(), (GL_NORMAL_ARRAY));
|
||||
CALL_DisableClientState(GET_DISPATCH(), (GL_COLOR_ARRAY));
|
||||
CALL_DisableClientState(GET_DISPATCH(), (GL_INDEX_ARRAY));
|
||||
CALL_DisableClientState(GET_DISPATCH(), (GL_TEXTURE_COORD_ARRAY));
|
||||
CALL_DisableClientState(GET_DISPATCH(), (GL_EDGE_FLAG_ARRAY));
|
||||
CALL_DisableClientState(GET_DISPATCH(), (GL_SECONDARY_COLOR_ARRAY));
|
||||
CALL_DisableClientState(GET_DISPATCH(), (GL_FOG_COORD_ARRAY));
|
||||
glDisableClientState(GL_VERTEX_ARRAY);
|
||||
glDisableClientState(GL_NORMAL_ARRAY);
|
||||
glDisableClientState(GL_COLOR_ARRAY);
|
||||
glDisableClientState(GL_INDEX_ARRAY);
|
||||
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
|
||||
glDisableClientState(GL_EDGE_FLAG_ARRAY);
|
||||
glDisableClientState(GL_SECONDARY_COLOR_ARRAY);
|
||||
glDisableClientState(GL_FOG_COORD_ARRAY);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user