diff options
Diffstat (limited to 'src/mesa/main/api_loopback.c')
-rw-r--r-- | src/mesa/main/api_loopback.c | 175 |
1 files changed, 31 insertions, 144 deletions
diff --git a/src/mesa/main/api_loopback.c b/src/mesa/main/api_loopback.c index d1789069cc..c438307d84 100644 --- a/src/mesa/main/api_loopback.c +++ b/src/mesa/main/api_loopback.c @@ -34,9 +34,9 @@ #include "api_loopback.h" #include "mtypes.h" #include "glapi/glapi.h" -#include "glapi/glapitable.h" #include "glapi/glthread.h" #include "main/dispatch.h" +#include "mfeatures.h" /* KW: A set of functions to convert unusual Color/Normal/Vertex/etc * calls to a smaller set of driver-provided formats. Currently just @@ -66,16 +66,24 @@ #define MATERIALFV(a,b,c) CALL_Materialfv(GET_DISPATCH(), (a,b,c)) #define RECTF(a,b,c,d) CALL_Rectf(GET_DISPATCH(), (a,b,c,d)) +#define FOGCOORDF(x) CALL_FogCoordfEXT(GET_DISPATCH(), (x)) +#define SECONDARYCOLORF(a,b,c) CALL_SecondaryColor3fEXT(GET_DISPATCH(), (a,b,c)) + #define ATTRIB1NV(index,x) CALL_VertexAttrib1fNV(GET_DISPATCH(), (index,x)) #define ATTRIB2NV(index,x,y) CALL_VertexAttrib2fNV(GET_DISPATCH(), (index,x,y)) #define ATTRIB3NV(index,x,y,z) CALL_VertexAttrib3fNV(GET_DISPATCH(), (index,x,y,z)) #define ATTRIB4NV(index,x,y,z,w) CALL_VertexAttrib4fNV(GET_DISPATCH(), (index,x,y,z,w)) + #define ATTRIB1ARB(index,x) CALL_VertexAttrib1fARB(GET_DISPATCH(), (index,x)) #define ATTRIB2ARB(index,x,y) CALL_VertexAttrib2fARB(GET_DISPATCH(), (index,x,y)) #define ATTRIB3ARB(index,x,y,z) CALL_VertexAttrib3fARB(GET_DISPATCH(), (index,x,y,z)) #define ATTRIB4ARB(index,x,y,z,w) CALL_VertexAttrib4fARB(GET_DISPATCH(), (index,x,y,z,w)) -#define FOGCOORDF(x) CALL_FogCoordfEXT(GET_DISPATCH(), (x)) -#define SECONDARYCOLORF(a,b,c) CALL_SecondaryColor3fEXT(GET_DISPATCH(), (a,b,c)) + +#define ATTRIBI_1I(index,x) CALL_VertexAttribI1iEXT(GET_DISPATCH(), (index,x)) +#define ATTRIBI_1UI(index,x) CALL_VertexAttribI1uiEXT(GET_DISPATCH(), (index,x)) +#define ATTRIBI_4I(index,x,y,z,w) CALL_VertexAttribI4iEXT(GET_DISPATCH(), (index,x,y,z,w)) + +#define ATTRIBI_4UI(index,x,y,z,w) CALL_VertexAttribI4uiEXT(GET_DISPATCH(), (index,x,y,z,w)) #if FEATURE_beginend @@ -1041,6 +1049,7 @@ loopback_SecondaryColor3ubvEXT_f( const GLubyte *v ) /* * GL_NV_vertex_program: * Always loop-back to one of the VertexAttrib[1234]f[v]NV functions. + * Note that attribute indexes DO alias conventional vertex attributes. */ static void GLAPIENTRY @@ -1263,6 +1272,7 @@ loopback_VertexAttribs4ubvNV(GLuint index, GLsizei n, const GLubyte *v) /* * GL_ARB_vertex_program * Always loop-back to one of the VertexAttrib[1234]f[v]ARB functions. + * Note that attribute indexes do NOT alias conventional attributes. */ static void GLAPIENTRY @@ -1443,136 +1453,50 @@ loopback_VertexAttrib4NuivARB(GLuint index, const GLuint * v) -/** GL 3.0 Integer-valued attributes **/ - -static void GLAPIENTRY -loopback_VertexAttribI1i(GLuint index, GLint x) -{ - ATTRIB1ARB(index, (GLfloat) x); -} - -static void GLAPIENTRY -loopback_VertexAttribI2i(GLuint index, GLint x, GLint y) -{ - ATTRIB2ARB(index, (GLfloat) x, (GLfloat) y); -} - -static void GLAPIENTRY -loopback_VertexAttribI3i(GLuint index, GLint x, GLint y, GLint z) -{ - ATTRIB3ARB(index, (GLfloat) x, (GLfloat) y, (GLfloat) z); -} - -static void GLAPIENTRY -loopback_VertexAttribI4i(GLuint index, GLint x, GLint y, GLint z, GLint w) -{ - ATTRIB4ARB(index, (GLfloat) x, (GLfloat) y, (GLfloat) z, (GLfloat) w); -} - -static void GLAPIENTRY -loopback_VertexAttribI1ui(GLuint index, GLuint x) -{ - ATTRIB1ARB(index, (GLfloat) x); -} - -static void GLAPIENTRY -loopback_VertexAttribI2ui(GLuint index, GLuint x, GLuint y) -{ - ATTRIB2ARB(index, (GLfloat) x, (GLfloat) y); -} - -static void GLAPIENTRY -loopback_VertexAttribI3ui(GLuint index, GLuint x, GLuint y, GLuint z) -{ - ATTRIB3ARB(index, (GLfloat) x, (GLfloat) y, (GLfloat) z); -} - -static void GLAPIENTRY -loopback_VertexAttribI4ui(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w) -{ - ATTRIB4ARB(index, (GLfloat) x, (GLfloat) y, (GLfloat) z, (GLfloat) w); -} +/** + * GL_EXT_gpu_shader / GL 3.0 signed/unsigned integer-valued attributes. + * Note that attribute indexes do NOT alias conventional attributes. + */ static void GLAPIENTRY loopback_VertexAttribI1iv(GLuint index, const GLint *v) { - ATTRIB1ARB(index, (GLfloat) v[0]); -} - -static void GLAPIENTRY -loopback_VertexAttribI2iv (GLuint index, const GLint *v) -{ - ATTRIB2ARB(index, (GLfloat) v[0], (GLfloat) v[1]); -} - -static void GLAPIENTRY -loopback_VertexAttribI3iv(GLuint index, const GLint *v) -{ - ATTRIB3ARB(index, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2]); -} - -static void GLAPIENTRY -loopback_VertexAttribI4iv(GLuint index, const GLint *v) -{ - ATTRIB4ARB(index, (GLfloat) v[0], (GLfloat) v[1], - (GLfloat) v[2], (GLfloat) v[3]); + ATTRIBI_1I(index, v[0]); } static void GLAPIENTRY loopback_VertexAttribI1uiv(GLuint index, const GLuint *v) { - ATTRIB1ARB(index, (GLfloat) v[0]); -} - -static void GLAPIENTRY -loopback_VertexAttribI2uiv(GLuint index, const GLuint *v) -{ - ATTRIB2ARB(index, (GLfloat) v[0], (GLfloat) v[1]); -} - -static void GLAPIENTRY -loopback_VertexAttribI3uiv(GLuint index, const GLuint *v) -{ - ATTRIB3ARB(index, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2]); -} - -static void GLAPIENTRY -loopback_VertexAttribI4uiv(GLuint index, const GLuint *v) -{ - ATTRIB4ARB(index, (GLfloat) v[0], (GLfloat) v[1], - (GLfloat) v[2], (GLfloat) v[3]); + ATTRIBI_1UI(index, v[0]); } static void GLAPIENTRY loopback_VertexAttribI4bv(GLuint index, const GLbyte *v) { - ATTRIB4ARB(index, (GLfloat) v[0], (GLfloat) v[1], - (GLfloat) v[2], (GLfloat) v[3]); + ATTRIBI_4I(index, v[0], v[1], v[2], v[3]); } static void GLAPIENTRY loopback_VertexAttribI4sv(GLuint index, const GLshort *v) { - ATTRIB4ARB(index, (GLfloat) v[0], (GLfloat) v[1], - (GLfloat) v[2], (GLfloat) v[3]); + ATTRIBI_4I(index, v[0], v[1], v[2], v[3]); } static void GLAPIENTRY loopback_VertexAttribI4ubv(GLuint index, const GLubyte *v) { - ATTRIB4ARB(index, (GLfloat) v[0], (GLfloat) v[1], - (GLfloat) v[2], (GLfloat) v[3]); + ATTRIBI_4UI(index, v[0], v[1], v[2], v[3]); } static void GLAPIENTRY loopback_VertexAttribI4usv(GLuint index, const GLushort *v) { - ATTRIB4ARB(index, (GLfloat) v[0], (GLfloat) v[1], - (GLfloat) v[2], (GLfloat) v[3]); + ATTRIBI_4UI(index, v[0], v[1], v[2], v[3]); } + /* * This code never registers handlers for any of the entry points * listed in vtxfmt.h. @@ -1788,50 +1712,13 @@ _mesa_loopback_init_api_table( struct _glapi_table *dest ) SET_VertexAttrib4NusvARB(dest, loopback_VertexAttrib4NusvARB); SET_VertexAttrib4NuivARB(dest, loopback_VertexAttrib4NuivARB); - /* GL 3.0 */ -#if 0 - SET_VertexAttribI1i(dest, loopback_VertexAttribI1i); - SET_VertexAttribI2i(dest, loopback_VertexAttribI2i); - SET_VertexAttribI3i(dest, loopback_VertexAttribI3i); - SET_VertexAttribI4i(dest, loopback_VertexAttribI4i); - SET_VertexAttribI1ui(dest, loopback_VertexAttribI1ui); - SET_VertexAttribI2ui(dest, loopback_VertexAttribI2ui); - SET_VertexAttribI3ui(dest, loopback_VertexAttribI3ui); - SET_VertexAttribI4ui(dest, loopback_VertexAttribI4ui); - SET_VertexAttribI1iv(dest, loopback_VertexAttribI1iv); - SET_VertexAttribI2iv(dest, loopback_VertexAttribI2iv); - SET_VertexAttribI3iv(dest, loopback_VertexAttribI3iv); - SET_VertexAttribI4iv(dest, loopback_VertexAttribI4iv); - SET_VertexAttribI1uiv(dest, loopback_VertexAttribI1uiv); - SET_VertexAttribI2uiv(dest, loopback_VertexAttribI2uiv); - SET_VertexAttribI3uiv(dest, loopback_VertexAttribI3uiv); - SET_VertexAttribI4uiv(dest, loopback_VertexAttribI4uiv); - SET_VertexAttribI4bv(dest, loopback_VertexAttribI4bv); - SET_VertexAttribI4sv(dest, loopback_VertexAttribI4sv); - SET_VertexAttribI4ubv(dest, loopback_VertexAttribI4ubv); - SET_VertexAttribI4usv(dest, loopback_VertexAttribI4usv); -#else - (void) loopback_VertexAttribI1i; - (void) loopback_VertexAttribI2i; - (void) loopback_VertexAttribI3i; - (void) loopback_VertexAttribI4i; - (void) loopback_VertexAttribI1ui; - (void) loopback_VertexAttribI2ui; - (void) loopback_VertexAttribI3ui; - (void) loopback_VertexAttribI4ui; - (void) loopback_VertexAttribI1iv; - (void) loopback_VertexAttribI2iv; - (void) loopback_VertexAttribI3iv; - (void) loopback_VertexAttribI4iv; - (void) loopback_VertexAttribI1uiv; - (void) loopback_VertexAttribI2uiv; - (void) loopback_VertexAttribI3uiv; - (void) loopback_VertexAttribI4uiv; - (void) loopback_VertexAttribI4bv; - (void) loopback_VertexAttribI4sv; - (void) loopback_VertexAttribI4ubv; - (void) loopback_VertexAttribI4usv; -#endif + /* GL_EXT_gpu_shader4, GL 3.0 */ + SET_VertexAttribI1ivEXT(dest, loopback_VertexAttribI1iv); + SET_VertexAttribI1uivEXT(dest, loopback_VertexAttribI1uiv); + SET_VertexAttribI4bvEXT(dest, loopback_VertexAttribI4bv); + SET_VertexAttribI4svEXT(dest, loopback_VertexAttribI4sv); + SET_VertexAttribI4ubvEXT(dest, loopback_VertexAttribI4ubv); + SET_VertexAttribI4usvEXT(dest, loopback_VertexAttribI4usv); } |