mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 09:38:07 +02:00
mesa: implement integer-valued vertex attribute functions
The integers still get converted to floats. That'll have to change someday.
This commit is contained in:
parent
e2b8c65723
commit
ca2618f4b6
5 changed files with 303 additions and 112 deletions
|
|
@ -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,133 +1453,47 @@ 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]);
|
||||
ATTRIBI_1UI(index, v[0]);
|
||||
}
|
||||
|
||||
static void GLAPIENTRY
|
||||
loopback_VertexAttribI2uiv(GLuint index, const GLuint *v)
|
||||
loopback_VertexAttribI4bv(uint index, const GLbyte *v)
|
||||
{
|
||||
ATTRIB2ARB(index, (GLfloat) v[0], (GLfloat) v[1]);
|
||||
ATTRIBI_4I(index, v[0], v[1], v[2], v[3]);
|
||||
}
|
||||
|
||||
static void GLAPIENTRY
|
||||
loopback_VertexAttribI3uiv(GLuint index, const GLuint *v)
|
||||
loopback_VertexAttribI4sv(uint index, const GLshort *v)
|
||||
{
|
||||
ATTRIB3ARB(index, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2]);
|
||||
ATTRIBI_4I(index, v[0], v[1], v[2], v[3]);
|
||||
}
|
||||
|
||||
static void GLAPIENTRY
|
||||
loopback_VertexAttribI4uiv(GLuint index, const GLuint *v)
|
||||
loopback_VertexAttribI4ubv(uint 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_VertexAttribI4bv(GLuint index, const GLbyte *v)
|
||||
loopback_VertexAttribI4usv(uint 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]);
|
||||
}
|
||||
|
||||
static void GLAPIENTRY
|
||||
loopback_VertexAttribI4sv(GLuint index, const GLshort *v)
|
||||
{
|
||||
ATTRIB4ARB(index, (GLfloat) v[0], (GLfloat) v[1],
|
||||
(GLfloat) v[2], (GLfloat) 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]);
|
||||
}
|
||||
|
||||
static void GLAPIENTRY
|
||||
loopback_VertexAttribI4usv(GLuint index, const GLushort *v)
|
||||
{
|
||||
ATTRIB4ARB(index, (GLfloat) v[0], (GLfloat) v[1],
|
||||
(GLfloat) v[2], (GLfloat) v[3]);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
@ -1788,7 +1712,14 @@ _mesa_loopback_init_api_table( struct _glapi_table *dest )
|
|||
SET_VertexAttrib4NusvARB(dest, loopback_VertexAttrib4NusvARB);
|
||||
SET_VertexAttrib4NuivARB(dest, loopback_VertexAttrib4NuivARB);
|
||||
|
||||
/* GL 3.0 */
|
||||
/* 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);
|
||||
|
||||
#if 0
|
||||
SET_VertexAttribI1i(dest, loopback_VertexAttribI1i);
|
||||
SET_VertexAttribI2i(dest, loopback_VertexAttribI2i);
|
||||
|
|
@ -1806,11 +1737,8 @@ _mesa_loopback_init_api_table( struct _glapi_table *dest )
|
|||
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
|
||||
#endif
|
||||
#if 0
|
||||
(void) loopback_VertexAttribI1i;
|
||||
(void) loopback_VertexAttribI2i;
|
||||
(void) loopback_VertexAttribI3i;
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@
|
|||
#if FEATURE_beginend
|
||||
|
||||
/**
|
||||
* Use the per-vertex functions found in <vfmt> to initialze the given
|
||||
* Use the per-vertex functions found in <vfmt> to initialoze the given
|
||||
* API dispatch table.
|
||||
*/
|
||||
static void
|
||||
|
|
@ -88,7 +88,7 @@ install_vtxfmt( struct _glapi_table *tab, const GLvertexformat *vfmt )
|
|||
SET_Vertex4f(tab, vfmt->Vertex4f);
|
||||
SET_Vertex4fv(tab, vfmt->Vertex4fv);
|
||||
|
||||
_mesa_install_dlist_vtxfmt(tab, vfmt);
|
||||
_mesa_install_dlist_vtxfmt(tab, vfmt); /* glCallList / glCallLists */
|
||||
|
||||
SET_Begin(tab, vfmt->Begin);
|
||||
SET_End(tab, vfmt->End);
|
||||
|
|
@ -125,17 +125,43 @@ install_vtxfmt( struct _glapi_table *tab, const GLvertexformat *vfmt )
|
|||
SET_VertexAttrib4fARB(tab, vfmt->VertexAttrib4fARB);
|
||||
SET_VertexAttrib4fvARB(tab, vfmt->VertexAttrib4fvARB);
|
||||
#endif
|
||||
|
||||
/* GL_EXT_gpu_shader4 / OpenGL 3.0 */
|
||||
SET_VertexAttribI1iEXT(tab, vfmt->VertexAttribI1i);
|
||||
SET_VertexAttribI2iEXT(tab, vfmt->VertexAttribI2i);
|
||||
SET_VertexAttribI3iEXT(tab, vfmt->VertexAttribI3i);
|
||||
SET_VertexAttribI4iEXT(tab, vfmt->VertexAttribI4i);
|
||||
SET_VertexAttribI2ivEXT(tab, vfmt->VertexAttribI2iv);
|
||||
SET_VertexAttribI3ivEXT(tab, vfmt->VertexAttribI3iv);
|
||||
SET_VertexAttribI4ivEXT(tab, vfmt->VertexAttribI4iv);
|
||||
|
||||
SET_VertexAttribI1uiEXT(tab, vfmt->VertexAttribI1ui);
|
||||
SET_VertexAttribI2uiEXT(tab, vfmt->VertexAttribI2ui);
|
||||
SET_VertexAttribI3uiEXT(tab, vfmt->VertexAttribI3ui);
|
||||
SET_VertexAttribI4uiEXT(tab, vfmt->VertexAttribI4ui);
|
||||
SET_VertexAttribI2uivEXT(tab, vfmt->VertexAttribI2uiv);
|
||||
SET_VertexAttribI3uivEXT(tab, vfmt->VertexAttribI3uiv);
|
||||
SET_VertexAttribI4uivEXT(tab, vfmt->VertexAttribI4uiv);
|
||||
}
|
||||
|
||||
|
||||
void _mesa_install_exec_vtxfmt( struct gl_context *ctx, const GLvertexformat *vfmt )
|
||||
/**
|
||||
* Install per-vertex functions into the API dispatch table for execution.
|
||||
*/
|
||||
void
|
||||
_mesa_install_exec_vtxfmt(struct gl_context *ctx, const GLvertexformat *vfmt)
|
||||
{
|
||||
if (ctx->API == API_OPENGL)
|
||||
install_vtxfmt( ctx->Exec, vfmt );
|
||||
}
|
||||
|
||||
|
||||
void _mesa_install_save_vtxfmt( struct gl_context *ctx, const GLvertexformat *vfmt )
|
||||
/**
|
||||
* Install per-vertex functions into the API dispatch table for display
|
||||
* list compilation.
|
||||
*/
|
||||
void
|
||||
_mesa_install_save_vtxfmt(struct gl_context *ctx, const GLvertexformat *vfmt)
|
||||
{
|
||||
if (ctx->API == API_OPENGL)
|
||||
install_vtxfmt( ctx->Save, vfmt );
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|||
|
||||
**************************************************************************/
|
||||
|
||||
/* float */
|
||||
#define ATTR1FV( A, V ) ATTR( A, 1, (V)[0], 0, 0, 1 )
|
||||
#define ATTR2FV( A, V ) ATTR( A, 2, (V)[0], (V)[1], 0, 1 )
|
||||
#define ATTR3FV( A, V ) ATTR( A, 3, (V)[0], (V)[1], (V)[2], 1 )
|
||||
|
|
@ -35,6 +36,27 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|||
#define ATTR3F( A, X, Y, Z ) ATTR( A, 3, X, Y, Z, 1 )
|
||||
#define ATTR4F( A, X, Y, Z, W ) ATTR( A, 4, X, Y, Z, W )
|
||||
|
||||
/* int */
|
||||
#define ATTR2IV( A, V ) ATTR( A, 2, (V)[0], (V)[1], 0, 1 )
|
||||
#define ATTR3IV( A, V ) ATTR( A, 3, (V)[0], (V)[1], (V)[2], 1 )
|
||||
#define ATTR4IV( A, V ) ATTR( A, 4, (V)[0], (V)[1], (V)[2], (V)[3] )
|
||||
|
||||
#define ATTR1I( A, X ) ATTR( A, 1, X, 0, 0, 1 )
|
||||
#define ATTR2I( A, X, Y ) ATTR( A, 2, X, Y, 0, 1 )
|
||||
#define ATTR3I( A, X, Y, Z ) ATTR( A, 3, X, Y, Z, 1 )
|
||||
#define ATTR4I( A, X, Y, Z, W ) ATTR( A, 4, X, Y, Z, W )
|
||||
|
||||
|
||||
/* uint */
|
||||
#define ATTR2UIV( A, V ) ATTR( A, 2, (V)[0], (V)[1], 0, 1 )
|
||||
#define ATTR3UIV( A, V ) ATTR( A, 3, (V)[0], (V)[1], (V)[2], 1 )
|
||||
#define ATTR4UIV( A, V ) ATTR( A, 4, (V)[0], (V)[1], (V)[2], (V)[3] )
|
||||
|
||||
#define ATTR1UI( A, X ) ATTR( A, 1, X, 0, 0, 1 )
|
||||
#define ATTR2UI( A, X, Y ) ATTR( A, 2, X, Y, 0, 1 )
|
||||
#define ATTR3UI( A, X, Y, Z ) ATTR( A, 3, X, Y, Z, 1 )
|
||||
#define ATTR4UI( A, X, Y, Z, W ) ATTR( A, 4, X, Y, Z, W )
|
||||
|
||||
#define MAT_ATTR( A, N, V ) ATTR( A, N, (V)[0], (V)[1], (V)[2], (V)[3] )
|
||||
|
||||
|
||||
|
|
@ -407,6 +429,185 @@ TAG(VertexAttrib4fvARB)(GLuint index, const GLfloat * v)
|
|||
}
|
||||
|
||||
|
||||
|
||||
/* Integer-valued generic attributes.
|
||||
* XXX: the integers just get converted to floats at this time
|
||||
*/
|
||||
static void GLAPIENTRY
|
||||
TAG(VertexAttribI1i)(GLuint index, GLint x)
|
||||
{
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
if (index == 0)
|
||||
ATTR1I(0, x);
|
||||
else if (index < MAX_VERTEX_GENERIC_ATTRIBS)
|
||||
ATTR1I(VBO_ATTRIB_GENERIC0 + index, x);
|
||||
else
|
||||
ERROR();
|
||||
}
|
||||
|
||||
static void GLAPIENTRY
|
||||
TAG(VertexAttribI2i)(GLuint index, GLint x, GLint y)
|
||||
{
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
if (index == 0)
|
||||
ATTR2I(0, x, y);
|
||||
else if (index < MAX_VERTEX_GENERIC_ATTRIBS)
|
||||
ATTR2I(VBO_ATTRIB_GENERIC0 + index, x, y);
|
||||
else
|
||||
ERROR();
|
||||
}
|
||||
|
||||
static void GLAPIENTRY
|
||||
TAG(VertexAttribI3i)(GLuint index, GLint x, GLint y, GLint z)
|
||||
{
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
if (index == 0)
|
||||
ATTR3I(0, x, y, z);
|
||||
else if (index < MAX_VERTEX_GENERIC_ATTRIBS)
|
||||
ATTR3I(VBO_ATTRIB_GENERIC0 + index, x, y, z);
|
||||
else
|
||||
ERROR();
|
||||
}
|
||||
|
||||
static void GLAPIENTRY
|
||||
TAG(VertexAttribI4i)(GLuint index, GLint x, GLint y, GLint z, GLint w)
|
||||
{
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
if (index == 0)
|
||||
ATTR4I(0, x, y, z, w);
|
||||
else if (index < MAX_VERTEX_GENERIC_ATTRIBS)
|
||||
ATTR4I(VBO_ATTRIB_GENERIC0 + index, x, y, z, w);
|
||||
else
|
||||
ERROR();
|
||||
}
|
||||
|
||||
static void GLAPIENTRY
|
||||
TAG(VertexAttribI2iv)(GLuint index, const GLint *v)
|
||||
{
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
if (index == 0)
|
||||
ATTR2IV(0, v);
|
||||
else if (index < MAX_VERTEX_GENERIC_ATTRIBS)
|
||||
ATTR2IV(VBO_ATTRIB_GENERIC0 + index, v);
|
||||
else
|
||||
ERROR();
|
||||
}
|
||||
|
||||
static void GLAPIENTRY
|
||||
TAG(VertexAttribI3iv)(GLuint index, const GLint *v)
|
||||
{
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
if (index == 0)
|
||||
ATTR3IV(0, v);
|
||||
else if (index < MAX_VERTEX_GENERIC_ATTRIBS)
|
||||
ATTR3IV(VBO_ATTRIB_GENERIC0 + index, v);
|
||||
else
|
||||
ERROR();
|
||||
}
|
||||
|
||||
static void GLAPIENTRY
|
||||
TAG(VertexAttribI4iv)(GLuint index, const GLint *v)
|
||||
{
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
if (index == 0)
|
||||
ATTR4IV(0, v);
|
||||
else if (index < MAX_VERTEX_GENERIC_ATTRIBS)
|
||||
ATTR4IV(VBO_ATTRIB_GENERIC0 + index, v);
|
||||
else
|
||||
ERROR();
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* Unsigned integer-valued generic attributes.
|
||||
* XXX: the integers just get converted to floats at this time
|
||||
*/
|
||||
static void GLAPIENTRY
|
||||
TAG(VertexAttribI1ui)(GLuint index, GLuint x)
|
||||
{
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
if (index == 0)
|
||||
ATTR1UI(0, x);
|
||||
else if (index < MAX_VERTEX_GENERIC_ATTRIBS)
|
||||
ATTR1UI(VBO_ATTRIB_GENERIC0 + index, x);
|
||||
else
|
||||
ERROR();
|
||||
}
|
||||
|
||||
static void GLAPIENTRY
|
||||
TAG(VertexAttribI2ui)(GLuint index, GLuint x, GLuint y)
|
||||
{
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
if (index == 0)
|
||||
ATTR2UI(0, x, y);
|
||||
else if (index < MAX_VERTEX_GENERIC_ATTRIBS)
|
||||
ATTR2UI(VBO_ATTRIB_GENERIC0 + index, x, y);
|
||||
else
|
||||
ERROR();
|
||||
}
|
||||
|
||||
static void GLAPIENTRY
|
||||
TAG(VertexAttribI3ui)(GLuint index, GLuint x, GLuint y, GLuint z)
|
||||
{
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
if (index == 0)
|
||||
ATTR3UI(0, x, y, z);
|
||||
else if (index < MAX_VERTEX_GENERIC_ATTRIBS)
|
||||
ATTR3UI(VBO_ATTRIB_GENERIC0 + index, x, y, z);
|
||||
else
|
||||
ERROR();
|
||||
}
|
||||
|
||||
static void GLAPIENTRY
|
||||
TAG(VertexAttribI4ui)(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w)
|
||||
{
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
if (index == 0)
|
||||
ATTR4UI(0, x, y, z, w);
|
||||
else if (index < MAX_VERTEX_GENERIC_ATTRIBS)
|
||||
ATTR4UI(VBO_ATTRIB_GENERIC0 + index, x, y, z, w);
|
||||
else
|
||||
ERROR();
|
||||
}
|
||||
|
||||
static void GLAPIENTRY
|
||||
TAG(VertexAttribI2uiv)(GLuint index, const GLuint *v)
|
||||
{
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
if (index == 0)
|
||||
ATTR2UIV(0, v);
|
||||
else if (index < MAX_VERTEX_GENERIC_ATTRIBS)
|
||||
ATTR2UIV(VBO_ATTRIB_GENERIC0 + index, v);
|
||||
else
|
||||
ERROR();
|
||||
}
|
||||
|
||||
static void GLAPIENTRY
|
||||
TAG(VertexAttribI3uiv)(GLuint index, const GLuint *v)
|
||||
{
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
if (index == 0)
|
||||
ATTR3UIV(0, v);
|
||||
else if (index < MAX_VERTEX_GENERIC_ATTRIBS)
|
||||
ATTR3UIV(VBO_ATTRIB_GENERIC0 + index, v);
|
||||
else
|
||||
ERROR();
|
||||
}
|
||||
|
||||
static void GLAPIENTRY
|
||||
TAG(VertexAttribI4uiv)(GLuint index, const GLuint *v)
|
||||
{
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
if (index == 0)
|
||||
ATTR4UIV(0, v);
|
||||
else if (index < MAX_VERTEX_GENERIC_ATTRIBS)
|
||||
ATTR4UIV(VBO_ATTRIB_GENERIC0 + index, v);
|
||||
else
|
||||
ERROR();
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* In addition to supporting NV_vertex_program, these entrypoints are
|
||||
* used by the display list and other code specifically because of
|
||||
* their property of aliasing with other attributes. (See
|
||||
|
|
|
|||
|
|
@ -658,6 +658,24 @@ static void vbo_exec_vtxfmt_init( struct vbo_exec_context *exec )
|
|||
vfmt->VertexAttrib4fNV = vbo_VertexAttrib4fNV;
|
||||
vfmt->VertexAttrib4fvNV = vbo_VertexAttrib4fvNV;
|
||||
|
||||
/* integer-valued */
|
||||
vfmt->VertexAttribI1i = vbo_VertexAttribI1i;
|
||||
vfmt->VertexAttribI2i = vbo_VertexAttribI2i;
|
||||
vfmt->VertexAttribI3i = vbo_VertexAttribI3i;
|
||||
vfmt->VertexAttribI4i = vbo_VertexAttribI4i;
|
||||
vfmt->VertexAttribI2iv = vbo_VertexAttribI2iv;
|
||||
vfmt->VertexAttribI3iv = vbo_VertexAttribI3iv;
|
||||
vfmt->VertexAttribI4iv = vbo_VertexAttribI4iv;
|
||||
|
||||
/* unsigned integer-valued */
|
||||
vfmt->VertexAttribI1ui = vbo_VertexAttribI1ui;
|
||||
vfmt->VertexAttribI2ui = vbo_VertexAttribI2ui;
|
||||
vfmt->VertexAttribI3ui = vbo_VertexAttribI3ui;
|
||||
vfmt->VertexAttribI4ui = vbo_VertexAttribI4ui;
|
||||
vfmt->VertexAttribI2uiv = vbo_VertexAttribI2uiv;
|
||||
vfmt->VertexAttribI3uiv = vbo_VertexAttribI3uiv;
|
||||
vfmt->VertexAttribI4uiv = vbo_VertexAttribI4uiv;
|
||||
|
||||
vfmt->Materialfv = vbo_Materialfv;
|
||||
|
||||
vfmt->EdgeFlag = vbo_EdgeFlag;
|
||||
|
|
|
|||
|
|
@ -1065,6 +1065,24 @@ static void _save_vtxfmt_init( struct gl_context *ctx )
|
|||
vfmt->VertexAttrib4fNV = _save_VertexAttrib4fNV;
|
||||
vfmt->VertexAttrib4fvNV = _save_VertexAttrib4fvNV;
|
||||
|
||||
/* integer-valued */
|
||||
vfmt->VertexAttribI1i = _save_VertexAttribI1i;
|
||||
vfmt->VertexAttribI2i = _save_VertexAttribI2i;
|
||||
vfmt->VertexAttribI3i = _save_VertexAttribI3i;
|
||||
vfmt->VertexAttribI4i = _save_VertexAttribI4i;
|
||||
vfmt->VertexAttribI2iv = _save_VertexAttribI2iv;
|
||||
vfmt->VertexAttribI3iv = _save_VertexAttribI3iv;
|
||||
vfmt->VertexAttribI4iv = _save_VertexAttribI4iv;
|
||||
|
||||
/* unsigned integer-valued */
|
||||
vfmt->VertexAttribI1ui = _save_VertexAttribI1ui;
|
||||
vfmt->VertexAttribI2ui = _save_VertexAttribI2ui;
|
||||
vfmt->VertexAttribI3ui = _save_VertexAttribI3ui;
|
||||
vfmt->VertexAttribI4ui = _save_VertexAttribI4ui;
|
||||
vfmt->VertexAttribI2uiv = _save_VertexAttribI2uiv;
|
||||
vfmt->VertexAttribI3uiv = _save_VertexAttribI3uiv;
|
||||
vfmt->VertexAttribI4uiv = _save_VertexAttribI4uiv;
|
||||
|
||||
/* This will all require us to fallback to saving the list as opcodes:
|
||||
*/
|
||||
_MESA_INIT_DLIST_VTXFMT(vfmt, _save_); /* inside begin/end */
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue