mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-03 09:20:13 +01:00
Streamline the error path in VertexAttrib functions. Makes things
slightly easier for codegen.
This commit is contained in:
parent
d83e9d9c00
commit
5262dcccc8
2 changed files with 79 additions and 55 deletions
|
|
@ -248,6 +248,8 @@ struct tnl_copied_vtx {
|
|||
|
||||
#define VERT_BUFFER_SIZE 2048 /* 8kbytes */
|
||||
|
||||
#define ERROR_ATTRIB _TNL_ATTRIB_MAX /* error path for t_vtx_api.c */
|
||||
|
||||
typedef void (*attrfv_func)( const GLfloat * );
|
||||
|
||||
/* The assembly of vertices in immediate mode is separated from
|
||||
|
|
@ -267,7 +269,7 @@ struct tnl_vtx {
|
|||
GLfloat *current[_TNL_ATTRIB_MAX]; /* points into ctx->Current, etc */
|
||||
GLuint counter, initial_counter;
|
||||
struct tnl_copied_vtx copied;
|
||||
attrfv_func tabfv[_TNL_ATTRIB_MAX][4];
|
||||
attrfv_func tabfv[_TNL_ATTRIB_MAX+1][4]; /* +1 for ERROR_ATTRIB */
|
||||
struct tnl_eval eval;
|
||||
GLboolean *edgeflag_tmp;
|
||||
GLboolean have_materials;
|
||||
|
|
|
|||
|
|
@ -97,6 +97,9 @@ static void _tnl_wrap_buffers( GLcontext *ctx )
|
|||
}
|
||||
|
||||
|
||||
/* Deal with buffer wrapping where provoked by the vertex buffer
|
||||
* filling up, as opposed to upgrade_vertex().
|
||||
*/
|
||||
static void _tnl_wrap_filled_vertex( GLcontext *ctx )
|
||||
{
|
||||
TNLcontext *tnl = TNL_CONTEXT(ctx);
|
||||
|
|
@ -451,6 +454,24 @@ ATTRS( 13 )
|
|||
ATTRS( 14 )
|
||||
ATTRS( 15 )
|
||||
|
||||
|
||||
static void error_attrib( const GLfloat *unused )
|
||||
{
|
||||
GET_CURRENT_CONTEXT( ctx );
|
||||
(void) unused;
|
||||
_mesa_error( ctx, GL_INVALID_ENUM, "glVertexAttrib" );
|
||||
}
|
||||
|
||||
static void init_error_attrib( TNLcontext *tnl )
|
||||
{
|
||||
tnl->vtx.tabfv[ERROR_ATTRIB][0] = error_attrib;
|
||||
tnl->vtx.tabfv[ERROR_ATTRIB][1] = error_attrib;
|
||||
tnl->vtx.tabfv[ERROR_ATTRIB][2] = error_attrib;
|
||||
tnl->vtx.tabfv[ERROR_ATTRIB][3] = error_attrib;
|
||||
}
|
||||
|
||||
|
||||
|
||||
static void init_attrfv( TNLcontext *tnl )
|
||||
{
|
||||
if (tnl->vtx.vertex_size) {
|
||||
|
|
@ -472,6 +493,7 @@ static void init_attrfv( TNLcontext *tnl )
|
|||
init_13( tnl );
|
||||
init_14( tnl );
|
||||
init_15( tnl );
|
||||
init_error_attrib( tnl );
|
||||
|
||||
for (i = 0 ; i < _TNL_ATTRIB_MAX ; i++)
|
||||
tnl->vtx.attrsz[i] = 0;
|
||||
|
|
@ -545,7 +567,8 @@ static void GLAPIENTRY _tnl_Vertex3fv( const GLfloat *v )
|
|||
DISPATCH_ATTR3FV( _TNL_ATTRIB_POS, v );
|
||||
}
|
||||
|
||||
static void GLAPIENTRY _tnl_Vertex4f( GLfloat x, GLfloat y, GLfloat z, GLfloat w )
|
||||
static void GLAPIENTRY _tnl_Vertex4f( GLfloat x, GLfloat y, GLfloat z,
|
||||
GLfloat w )
|
||||
{
|
||||
DISPATCH_ATTR4F( _TNL_ATTRIB_POS, x, y, z, w );
|
||||
}
|
||||
|
|
@ -585,7 +608,8 @@ static void GLAPIENTRY _tnl_TexCoord3fv( const GLfloat *v )
|
|||
DISPATCH_ATTR3FV( _TNL_ATTRIB_TEX0, v );
|
||||
}
|
||||
|
||||
static void GLAPIENTRY _tnl_TexCoord4f( GLfloat x, GLfloat y, GLfloat z, GLfloat w )
|
||||
static void GLAPIENTRY _tnl_TexCoord4f( GLfloat x, GLfloat y, GLfloat z,
|
||||
GLfloat w )
|
||||
{
|
||||
DISPATCH_ATTR4F( _TNL_ATTRIB_TEX0, x, y, z, w );
|
||||
}
|
||||
|
|
@ -625,7 +649,8 @@ static void GLAPIENTRY _tnl_Color3fv( const GLfloat *v )
|
|||
DISPATCH_ATTR3FV( _TNL_ATTRIB_COLOR0, v );
|
||||
}
|
||||
|
||||
static void GLAPIENTRY _tnl_Color4f( GLfloat x, GLfloat y, GLfloat z, GLfloat w )
|
||||
static void GLAPIENTRY _tnl_Color4f( GLfloat x, GLfloat y, GLfloat z,
|
||||
GLfloat w )
|
||||
{
|
||||
DISPATCH_ATTR4F( _TNL_ATTRIB_COLOR0, x, y, z, w );
|
||||
}
|
||||
|
|
@ -635,7 +660,8 @@ static void GLAPIENTRY _tnl_Color4fv( const GLfloat *v )
|
|||
DISPATCH_ATTR4FV( _TNL_ATTRIB_COLOR0, v );
|
||||
}
|
||||
|
||||
static void GLAPIENTRY _tnl_SecondaryColor3fEXT( GLfloat x, GLfloat y, GLfloat z )
|
||||
static void GLAPIENTRY _tnl_SecondaryColor3fEXT( GLfloat x, GLfloat y,
|
||||
GLfloat z )
|
||||
{
|
||||
DISPATCH_ATTR3F( _TNL_ATTRIB_COLOR1, x, y, z );
|
||||
}
|
||||
|
|
@ -651,45 +677,51 @@ static void GLAPIENTRY _tnl_MultiTexCoord1f( GLenum target, GLfloat x )
|
|||
DISPATCH_ATTR1F( attr, x );
|
||||
}
|
||||
|
||||
static void GLAPIENTRY _tnl_MultiTexCoord1fv( GLenum target, const GLfloat *v )
|
||||
static void GLAPIENTRY _tnl_MultiTexCoord1fv( GLenum target,
|
||||
const GLfloat *v )
|
||||
{
|
||||
GLuint attr = (target & 0x7) + _TNL_ATTRIB_TEX0;
|
||||
DISPATCH_ATTR1FV( attr, v );
|
||||
}
|
||||
|
||||
static void GLAPIENTRY _tnl_MultiTexCoord2f( GLenum target, GLfloat x, GLfloat y )
|
||||
static void GLAPIENTRY _tnl_MultiTexCoord2f( GLenum target, GLfloat x,
|
||||
GLfloat y )
|
||||
{
|
||||
GLuint attr = (target & 0x7) + _TNL_ATTRIB_TEX0;
|
||||
DISPATCH_ATTR2F( attr, x, y );
|
||||
}
|
||||
|
||||
static void GLAPIENTRY _tnl_MultiTexCoord2fv( GLenum target, const GLfloat *v )
|
||||
static void GLAPIENTRY _tnl_MultiTexCoord2fv( GLenum target,
|
||||
const GLfloat *v )
|
||||
{
|
||||
GLuint attr = (target & 0x7) + _TNL_ATTRIB_TEX0;
|
||||
DISPATCH_ATTR2FV( attr, v );
|
||||
}
|
||||
|
||||
static void GLAPIENTRY _tnl_MultiTexCoord3f( GLenum target, GLfloat x, GLfloat y,
|
||||
GLfloat z)
|
||||
static void GLAPIENTRY _tnl_MultiTexCoord3f( GLenum target, GLfloat x,
|
||||
GLfloat y, GLfloat z)
|
||||
{
|
||||
GLuint attr = (target & 0x7) + _TNL_ATTRIB_TEX0;
|
||||
DISPATCH_ATTR3F( attr, x, y, z );
|
||||
}
|
||||
|
||||
static void GLAPIENTRY _tnl_MultiTexCoord3fv( GLenum target, const GLfloat *v )
|
||||
static void GLAPIENTRY _tnl_MultiTexCoord3fv( GLenum target,
|
||||
const GLfloat *v )
|
||||
{
|
||||
GLuint attr = (target & 0x7) + _TNL_ATTRIB_TEX0;
|
||||
DISPATCH_ATTR3FV( attr, v );
|
||||
}
|
||||
|
||||
static void GLAPIENTRY _tnl_MultiTexCoord4f( GLenum target, GLfloat x, GLfloat y,
|
||||
GLfloat z, GLfloat w )
|
||||
static void GLAPIENTRY _tnl_MultiTexCoord4f( GLenum target, GLfloat x,
|
||||
GLfloat y, GLfloat z,
|
||||
GLfloat w )
|
||||
{
|
||||
GLuint attr = (target & 0x7) + _TNL_ATTRIB_TEX0;
|
||||
DISPATCH_ATTR4F( attr, x, y, z, w );
|
||||
}
|
||||
|
||||
static void GLAPIENTRY _tnl_MultiTexCoord4fv( GLenum target, const GLfloat *v )
|
||||
static void GLAPIENTRY _tnl_MultiTexCoord4fv( GLenum target,
|
||||
const GLfloat *v )
|
||||
{
|
||||
GLuint attr = (target & 0x7) + _TNL_ATTRIB_TEX0;
|
||||
DISPATCH_ATTR4FV( attr, v );
|
||||
|
|
@ -697,68 +729,58 @@ static void GLAPIENTRY _tnl_MultiTexCoord4fv( GLenum target, const GLfloat *v )
|
|||
|
||||
static void GLAPIENTRY _tnl_VertexAttrib1fNV( GLuint index, GLfloat x )
|
||||
{
|
||||
if (index < VERT_ATTRIB_MAX)
|
||||
DISPATCH_ATTR1F( index, x );
|
||||
else
|
||||
enum_error();
|
||||
if (index >= VERT_ATTRIB_MAX) index = ERROR_ATTRIB;
|
||||
DISPATCH_ATTR1F( index, x );
|
||||
}
|
||||
|
||||
static void GLAPIENTRY _tnl_VertexAttrib1fvNV( GLuint index, const GLfloat *v )
|
||||
static void GLAPIENTRY _tnl_VertexAttrib1fvNV( GLuint index,
|
||||
const GLfloat *v )
|
||||
{
|
||||
if (index < VERT_ATTRIB_MAX)
|
||||
DISPATCH_ATTR1FV( index, v );
|
||||
else
|
||||
enum_error();
|
||||
if (index >= VERT_ATTRIB_MAX) index = ERROR_ATTRIB;
|
||||
DISPATCH_ATTR1FV( index, v );
|
||||
}
|
||||
|
||||
static void GLAPIENTRY _tnl_VertexAttrib2fNV( GLuint index, GLfloat x, GLfloat y )
|
||||
static void GLAPIENTRY _tnl_VertexAttrib2fNV( GLuint index, GLfloat x,
|
||||
GLfloat y )
|
||||
{
|
||||
if (index < VERT_ATTRIB_MAX)
|
||||
DISPATCH_ATTR2F( index, x, y );
|
||||
else
|
||||
enum_error();
|
||||
if (index >= VERT_ATTRIB_MAX) index = ERROR_ATTRIB;
|
||||
DISPATCH_ATTR2F( index, x, y );
|
||||
}
|
||||
|
||||
static void GLAPIENTRY _tnl_VertexAttrib2fvNV( GLuint index, const GLfloat *v )
|
||||
static void GLAPIENTRY _tnl_VertexAttrib2fvNV( GLuint index,
|
||||
const GLfloat *v )
|
||||
{
|
||||
if (index < VERT_ATTRIB_MAX)
|
||||
DISPATCH_ATTR2FV( index, v );
|
||||
else
|
||||
enum_error();
|
||||
if (index >= VERT_ATTRIB_MAX) index = ERROR_ATTRIB;
|
||||
DISPATCH_ATTR2FV( index, v );
|
||||
}
|
||||
|
||||
static void GLAPIENTRY _tnl_VertexAttrib3fNV( GLuint index, GLfloat x, GLfloat y,
|
||||
GLfloat z )
|
||||
static void GLAPIENTRY _tnl_VertexAttrib3fNV( GLuint index, GLfloat x,
|
||||
GLfloat y, GLfloat z )
|
||||
{
|
||||
if (index < VERT_ATTRIB_MAX)
|
||||
DISPATCH_ATTR3F( index, x, y, z );
|
||||
else
|
||||
enum_error();
|
||||
if (index >= VERT_ATTRIB_MAX) index = ERROR_ATTRIB;
|
||||
DISPATCH_ATTR3F( index, x, y, z );
|
||||
}
|
||||
|
||||
static void GLAPIENTRY _tnl_VertexAttrib3fvNV( GLuint index, const GLfloat *v )
|
||||
static void GLAPIENTRY _tnl_VertexAttrib3fvNV( GLuint index,
|
||||
const GLfloat *v )
|
||||
{
|
||||
if (index < VERT_ATTRIB_MAX)
|
||||
DISPATCH_ATTR3FV( index, v );
|
||||
else
|
||||
enum_error();
|
||||
if (index >= VERT_ATTRIB_MAX) index = ERROR_ATTRIB;
|
||||
DISPATCH_ATTR3FV( index, v );
|
||||
}
|
||||
|
||||
static void GLAPIENTRY _tnl_VertexAttrib4fNV( GLuint index, GLfloat x, GLfloat y,
|
||||
GLfloat z, GLfloat w )
|
||||
static void GLAPIENTRY _tnl_VertexAttrib4fNV( GLuint index, GLfloat x,
|
||||
GLfloat y, GLfloat z,
|
||||
GLfloat w )
|
||||
{
|
||||
if (index < VERT_ATTRIB_MAX)
|
||||
DISPATCH_ATTR4F( index, x, y, z, w );
|
||||
else
|
||||
enum_error();
|
||||
if (index >= VERT_ATTRIB_MAX) index = ERROR_ATTRIB;
|
||||
DISPATCH_ATTR4F( index, x, y, z, w );
|
||||
}
|
||||
|
||||
static void GLAPIENTRY _tnl_VertexAttrib4fvNV( GLuint index, const GLfloat *v )
|
||||
static void GLAPIENTRY _tnl_VertexAttrib4fvNV( GLuint index,
|
||||
const GLfloat *v )
|
||||
{
|
||||
if (index < VERT_ATTRIB_MAX)
|
||||
DISPATCH_ATTR4FV( index, v );
|
||||
else
|
||||
enum_error();
|
||||
if (index >= VERT_ATTRIB_MAX) index = ERROR_ATTRIB;
|
||||
DISPATCH_ATTR4FV( index, v );
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue