diff options
author | Keith Whitwell <[email protected]> | 1999-10-19 18:37:02 +0000 |
---|---|---|
committer | Keith Whitwell <[email protected]> | 1999-10-19 18:37:02 +0000 |
commit | d471473b5842154c0b44b7bec149401f6dab43cc (patch) | |
tree | 5a6e53fde0662dcd2eb4b3455eaaf0a470126c1d /src | |
parent | 52880f85b5270fb156c1b75effabc9c2c8b61511 (diff) |
Changes to reduce the memory footprint of display lists
Diffstat (limited to 'src')
-rw-r--r-- | src/mesa/drivers/glide/fxdd.c | 41 | ||||
-rw-r--r-- | src/mesa/drivers/glide/fxddtex.c | 3 | ||||
-rw-r--r-- | src/mesa/drivers/glide/fxdrv.h | 4 | ||||
-rw-r--r-- | src/mesa/drivers/glide/fxsetup.c | 15 | ||||
-rw-r--r-- | src/mesa/main/context.c | 3 | ||||
-rw-r--r-- | src/mesa/main/dlist.c | 94 | ||||
-rw-r--r-- | src/mesa/main/eval.c | 186 | ||||
-rw-r--r-- | src/mesa/main/light.c | 14 | ||||
-rw-r--r-- | src/mesa/main/varray.c | 45 | ||||
-rw-r--r-- | src/mesa/main/varray.h | 6 | ||||
-rw-r--r-- | src/mesa/x86/3dnow.c | 24 | ||||
-rw-r--r-- | src/mesa/x86/x86.c | 19 |
12 files changed, 320 insertions, 134 deletions
diff --git a/src/mesa/drivers/glide/fxdd.c b/src/mesa/drivers/glide/fxdd.c index 6eed8ce290e..3580971ae81 100644 --- a/src/mesa/drivers/glide/fxdd.c +++ b/src/mesa/drivers/glide/fxdd.c @@ -347,6 +347,8 @@ void fxDDSetNearFar(GLcontext *ctx, GLfloat n, GLfloat f) { FX_CONTEXT(ctx)->new_state |= FX_NEW_FOG; ctx->Driver.RenderStart = fxSetupFXUnits; + + FX_CONTEXT(ctx)->wscale = fabs(f)/65535.0f; } /* KW: Put the word Mesa in the render string because quakeworld @@ -360,7 +362,44 @@ static const GLubyte *fxDDGetString(GLcontext *ctx, GLenum name) #if defined(GLX_DIRECT_RENDERING) return "Mesa Glide - DRI VB/V3"; #else - return (GLubyte*)"Mesa Glide"; + { + static char buf[80]; + + if (glbHWConfig.SSTs[glbCurrentBoard].type==GR_SSTTYPE_VOODOO) + { + GrVoodooConfig_t *vc = + &glbHWConfig.SSTs[glbCurrentBoard].sstBoard.VoodooConfig; + + sprintf(buf, + "Mesa Glide v0.30 Voodoo_Graphics %d " + "CARD/%d FB/%d TM/%d TMU/%s", + glbCurrentBoard, + (vc->sliDetect ? (vc->fbRam*2) : vc->fbRam), + (vc->tmuConfig[GR_TMU0].tmuRam + + ((vc->nTexelfx>1) ? vc->tmuConfig[GR_TMU1].tmuRam : 0)), + vc->nTexelfx, + (vc->sliDetect ? "SLI" : "NOSLI")); + } + else if (glbHWConfig.SSTs[glbCurrentBoard].type==GR_SSTTYPE_SST96) + { + GrSst96Config_t *sc = + &glbHWConfig.SSTs[glbCurrentBoard].sstBoard.SST96Config; + + sprintf(buf, + "Glide v0.30 Voodoo_Rush %d " + "CARD/%d FB/%d TM/%d TMU/NOSLI", + glbCurrentBoard, + sc->fbRam, + sc->tmuConfig.tmuRam, + sc->nTexelfx); + } + else + { + strcpy(buf, "Glide v0.30 UNKNOWN"); + } + + return (GLubyte *) buf; + } #endif default: return NULL; diff --git a/src/mesa/drivers/glide/fxddtex.c b/src/mesa/drivers/glide/fxddtex.c index 01994586856..8890902a622 100644 --- a/src/mesa/drivers/glide/fxddtex.c +++ b/src/mesa/drivers/glide/fxddtex.c @@ -52,7 +52,7 @@ static tfxTexInfo *fxAllocTexObjData(fxMesaContext fxMesa) tfxTexInfo *ti; int i; - if(!(ti=MALLOC(sizeof(tfxTexInfo)))) { + if(!(ti=CALLOC(sizeof(tfxTexInfo)))) { fprintf(stderr,"fx Driver: out of memory !\n"); fxCloseHardware(); exit(-1); @@ -219,6 +219,7 @@ void fxDDTexParam(GLcontext *ctx, GLenum target, struct gl_texture_object *tObj, ti->sClamp=GR_TEXTURECLAMP_WRAP; break; default: + fprintf(stderr, "BAD CLAMP\n"); break; } fxMesa->new_state|=FX_NEW_TEXTURING; diff --git a/src/mesa/drivers/glide/fxdrv.h b/src/mesa/drivers/glide/fxdrv.h index f5ef5763383..aeb56e9a5df 100644 --- a/src/mesa/drivers/glide/fxdrv.h +++ b/src/mesa/drivers/glide/fxdrv.h @@ -61,7 +61,7 @@ -#if defined(MESA_DEBUG) && 0 +#if 0 extern void fx_sanity_triangle( GrVertex *, GrVertex *, GrVertex * ); #define grDrawTriangle fx_sanity_triangle #endif @@ -477,6 +477,8 @@ struct tfxMesaContext { FX_GrContext_t glideContext; + GLfloat wscale; + DRI_FX_CONTEXT }; diff --git a/src/mesa/drivers/glide/fxsetup.c b/src/mesa/drivers/glide/fxsetup.c index ce70b472d5c..8367a1f1ff7 100644 --- a/src/mesa/drivers/glide/fxsetup.c +++ b/src/mesa/drivers/glide/fxsetup.c @@ -36,9 +36,9 @@ static void fxTexValidate(GLcontext *ctx, struct gl_texture_object *tObj) tfxTexInfo *ti=(tfxTexInfo *)tObj->DriverData; GLint minl,maxl; - if (MESA_VERBOSE&VERBOSE_DRIVER) { + if (MESA_VERBOSE&VERBOSE_DRIVER) fprintf(stderr,"fxmesa: fxTexValidate(...) Start\n"); - } + if(ti->validated) { if (MESA_VERBOSE&VERBOSE_DRIVER) { @@ -50,13 +50,13 @@ static void fxTexValidate(GLcontext *ctx, struct gl_texture_object *tObj) minl=ti->minLevel=tObj->BaseLevel; maxl=ti->maxLevel=MIN2(tObj->MaxLevel,tObj->Image[0]->MaxLog2); + fxTexGetInfo(tObj->Image[minl]->Width,tObj->Image[minl]->Height, &(FX_largeLodLog2(ti->info)),&(FX_aspectRatioLog2(ti->info)), &(ti->sScale),&(ti->tScale), &(ti->int_sScale),&(ti->int_tScale), NULL,NULL); - if((tObj->MinFilter!=GL_NEAREST) && (tObj->MinFilter!=GL_LINEAR)) fxTexGetInfo(tObj->Image[maxl]->Width,tObj->Image[maxl]->Height, &(FX_smallLodLog2(ti->info)),NULL, @@ -292,6 +292,7 @@ static void fxSetupSingleTMU(fxMesaContext fxMesa, struct gl_texture_object *tOb if (ti->LODblend && (MESA_VERBOSE&VERBOSE_DRIVER)) fprintf(stderr, "fxmesa: not blending texture - only on one tmu\n"); + grTexClampMode(ti->tmi.whichTMU,ti->sClamp,ti->tClamp); grTexFilterMode(ti->tmi.whichTMU,ti->minFilt,ti->maxFilt); grTexMipMapMode(ti->tmi.whichTMU,ti->mmMode,FXFALSE); @@ -356,9 +357,9 @@ void fxSetupTextureSingleTMU(GLcontext *ctx, GLuint textureset) tfxTexInfo *ti; struct gl_texture_object *tObj=ctx->Texture.Unit[textureset].CurrentD[2]; - if (MESA_VERBOSE&VERBOSE_DRIVER) { + if (MESA_VERBOSE&VERBOSE_DRIVER) fprintf(stderr,"fxmesa: fxSetupTextureSingleTMU(...) Start\n"); - } + ti=(tfxTexInfo *)tObj->DriverData; @@ -1559,9 +1560,11 @@ void fxSetupFXUnits( GLcontext *ctx ) fxMesaContext fxMesa=(fxMesaContext)ctx->DriverCtx; GLuint newstate = fxMesa->new_state; + if (MESA_VERBOSE&VERBOSE_DRIVER) gl_print_fx_state_flags("fxmesa: fxSetupFXUnits", newstate); + if (newstate) { if (newstate & FX_NEW_TEXTURING) fxSetupTexture(ctx); @@ -1588,7 +1591,7 @@ void fxSetupFXUnits( GLcontext *ctx ) fxSetupCull(ctx); fxMesa->new_state = 0; - ctx->Driver.RenderStart = 0; +/* ctx->Driver.RenderStart = 0; */ } } diff --git a/src/mesa/main/context.c b/src/mesa/main/context.c index ab25fd08088..ea66f135b6e 100644 --- a/src/mesa/main/context.c +++ b/src/mesa/main/context.c @@ -1,4 +1,4 @@ -/* $Id: context.c,v 1.15 1999/10/13 18:42:49 brianp Exp $ */ +/* $Id: context.c,v 1.16 1999/10/19 18:37:02 keithw Exp $ */ /* * Mesa 3-D graphics library @@ -619,7 +619,6 @@ static void initialize_context( GLcontext *ctx ) ctx->Const.MaxTextureUnits = MAX_TEXTURE_UNITS; ctx->Const.MaxArrayLockSize = MAX_ARRAY_LOCK_SIZE; - /* Modelview matrix */ gl_matrix_ctr( &ctx->ModelView ); gl_matrix_alloc_inv( &ctx->ModelView ); diff --git a/src/mesa/main/dlist.c b/src/mesa/main/dlist.c index f69205c02e8..18fd4f92167 100644 --- a/src/mesa/main/dlist.c +++ b/src/mesa/main/dlist.c @@ -1,4 +1,4 @@ -/* $Id: dlist.c,v 1.10 1999/10/16 11:31:50 brianp Exp $ */ +/* $Id: dlist.c,v 1.11 1999/10/19 18:37:03 keithw Exp $ */ /* * Mesa 3-D graphics library @@ -599,7 +599,7 @@ void gl_init_lists( void ) InstSize[OPCODE_WINDOW_POS] = 5; InstSize[OPCODE_CONTINUE] = 2; InstSize[OPCODE_ERROR] = 3; - InstSize[OPCODE_VERTEX_CASSETTE] = 2; + InstSize[OPCODE_VERTEX_CASSETTE] = 9; InstSize[OPCODE_END_OF_LIST] = 1; /* GL_ARB_multitexture */ InstSize[OPCODE_ACTIVE_TEXTURE] = 2; @@ -2382,27 +2382,53 @@ static void save_ClientActiveTexture( GLcontext *ctx, GLenum target ) void gl_compile_cassette( GLcontext *ctx ) { - Node *n = alloc_instruction( ctx, OPCODE_VERTEX_CASSETTE, 1 ); - struct immediate *new_im = gl_immediate_alloc(ctx); - struct immediate *im = ctx->input; - - if (!n || !new_im) { - if (n) - FREE(n); - if (new_im) - gl_immediate_free(new_im); + Node *n = alloc_instruction( ctx, OPCODE_VERTEX_CASSETTE, 8 ); + struct immediate *im = ctx->input; + + if (!n) return; - } + /* Do some easy optimizations of the cassette. */ - if (im->v.Obj.size < 4 && im->Count > 15) { +#if 0 + if (0 && im->v.Obj.size < 4 && im->Count > 15) { im->Bounds = (GLfloat (*)[3]) MALLOC(6 * sizeof(GLfloat)); (gl_calc_bound_tab[im->v.Obj.size])( im->Bounds, &im->v.Obj ); } +#endif n[1].data = (void *)im; - SET_IMMEDIATE( ctx, new_im ); + n[2].ui = im->Start; + n[3].ui = im->Count; + n[4].ui = im->BeginState; + n[5].ui = im->OrFlag; + n[6].ui = im->AndFlag; + n[7].ui = im->LastData; + n[8].ui = im->LastPrimitive; + + if (im->Count > VB_MAX - 4) { + + struct immediate *new_im = gl_immediate_alloc(ctx); + if (!new_im) return; + SET_IMMEDIATE( ctx, new_im ); + gl_reset_input( ctx ); + + } else { + im->Count++;; + im->Start = im->Count; /* don't clear anything in reset_input */ + im->ref_count++; + + im->Primitive[im->Start] = ctx->Current.Primitive; + im->LastPrimitive = im->Start; + im->BeginState = VERT_BEGIN_0; + im->OrFlag = 0; + im->AndFlag = ~0; + + if (0) + fprintf(stderr, "in compile_cassette, BeginState is %x\n", + im->BeginState); + } } /* KW: Compile commands @@ -2455,7 +2481,9 @@ static void execute_list( GLcontext *ctx, GLuint list ) case OPCODE_ERROR: gl_error( ctx, n[1].e, (const char *) n[2].data ); break; - case OPCODE_VERTEX_CASSETTE: + case OPCODE_VERTEX_CASSETTE: { + struct immediate *IM; + if (ctx->NewState) gl_update_state(ctx); if (ctx->CompileCVAFlag) { @@ -2465,13 +2493,29 @@ static void execute_list( GLcontext *ctx, GLuint list ) if (!ctx->CVA.elt.pipeline_valid) gl_build_immediate_pipeline( ctx ); + + IM = (struct immediate *) n[1].data; + IM->Start = n[2].ui; + IM->Count = n[3].ui; + IM->BeginState = n[4].ui; + IM->OrFlag = n[5].ui; + IM->AndFlag = n[6].ui; + IM->LastData = n[7].ui; + IM->LastPrimitive = n[8].ui; + if ((MESA_VERBOSE & VERBOSE_DISPLAY_LIST) && (MESA_VERBOSE & VERBOSE_IMMEDIATE)) gl_print_cassette( (struct immediate *) n[1].data, 0, ~0 ); + if (0) + fprintf(stderr, "Run cassette %d, rows %d..%d, beginstate %x\n", + IM->id, + IM->Start, IM->Count, IM->BeginState); + gl_fixup_cassette( ctx, (struct immediate *) n[1].data ); gl_execute_cassette( ctx, (struct immediate *) n[1].data ); break; + } case OPCODE_ACCUM: gl_Accum( ctx, n[1].e, n[2].f ); break; @@ -3089,7 +3133,9 @@ void gl_EndList( GLcontext *ctx ) /* KW: Put back the old input pointer. */ - FREE( ctx->input ); + if (--ctx->input->ref_count == 0) + gl_immediate_free( ctx->input ); + SET_IMMEDIATE( ctx, ctx->VB->IM ); gl_reset_input( ctx ); @@ -3459,6 +3505,13 @@ static void print_list( GLcontext *ctx, FILE *f, GLuint list ) case OPCODE_TRANSLATE: fprintf(f,"Translate %g %g %g\n", n[1].f, n[2].f, n[3].f ); break; + case OPCODE_BIND_TEXTURE: + fprintf(f,"BindTexture %s %d\n", gl_lookup_enum_by_nr(n[1].ui), + n[2].ui); + break; + case OPCODE_SHADE_MODEL: + fprintf(f,"ShadeModel %s\n", gl_lookup_enum_by_nr(n[1].ui)); + break; /* * meta opcodes/commands @@ -3467,9 +3520,12 @@ static void print_list( GLcontext *ctx, FILE *f, GLuint list ) fprintf(f,"Error: %s %s\n", enum_string(n[1].e), (const char *)n[2].data ); break; case OPCODE_VERTEX_CASSETTE: - fprintf(f,"VERTEX-CASSETTE, id %u, %u elements\n", + fprintf(f,"VERTEX-CASSETTE, id %u, rows %u..%u\n", ((struct immediate *) n[1].data)->id, - ((struct immediate *) n[1].data)->Count - VB_START ); + n[2].ui, + n[3].ui); +/* gl_print_cassette( (struct immediate *) n[1].data, */ +/* 0, ~0 ); */ break; case OPCODE_CONTINUE: fprintf(f,"DISPLAY-LIST-CONTINUE\n"); @@ -3512,5 +3568,5 @@ static void print_list( GLcontext *ctx, FILE *f, GLuint list ) void mesa_print_display_list( GLuint list ) { GET_CONTEXT; - print_list( CC, stdout, list ); + print_list( CC, stderr, list ); } diff --git a/src/mesa/main/eval.c b/src/mesa/main/eval.c index 18676e73add..eee7a84509a 100644 --- a/src/mesa/main/eval.c +++ b/src/mesa/main/eval.c @@ -1,4 +1,4 @@ -/* $Id: eval.c,v 1.4 1999/10/13 18:42:50 brianp Exp $ */ +/* $Id: eval.c,v 1.5 1999/10/19 18:37:03 keithw Exp $ */ /* * Mesa 3-D graphics library @@ -1990,12 +1990,13 @@ void gl_GetMapiv( GLcontext* ctx, GLenum target, GLenum query, GLint *v ) static void eval_points1( GLfloat outcoord[][4], - GLfloat coord[][4], - const GLuint *flags, - GLfloat du, GLfloat u1 ) + GLfloat coord[][4], + const GLuint *flags, + GLuint start, + GLfloat du, GLfloat u1 ) { GLuint i; - for (i = VB_START ; !(flags[i] & VERT_END_VB) ; i++) + for (i = start ; !(flags[i] & VERT_END_VB) ; i++) if (flags[i] & VERT_EVAL_P1) outcoord[i][0] = coord[i][0] * du + u1; else if (flags[i] & VERT_EVAL_ANY) { @@ -2005,13 +2006,14 @@ static void eval_points1( GLfloat outcoord[][4], } static void eval_points2( GLfloat outcoord[][4], - GLfloat coord[][4], - const GLuint *flags, - GLfloat du, GLfloat u1, - GLfloat dv, GLfloat v1 ) + GLfloat coord[][4], + const GLuint *flags, + GLuint start, + GLfloat du, GLfloat u1, + GLfloat dv, GLfloat v1 ) { GLuint i; - for (i = VB_START ; !(flags[i] & VERT_END_VB) ; i++) + for (i = start ; !(flags[i] & VERT_END_VB) ; i++) if (flags[i] & VERT_EVAL_P2) { outcoord[i][0] = coord[i][0] * du + u1; outcoord[i][1] = coord[i][1] * dv + v1; @@ -2033,7 +2035,8 @@ static const GLubyte dirty_flags[5] = { static GLvector4f *eval1_4f( GLvector4f *dest, GLfloat coord[][4], - const GLuint *flags, + const GLuint *flags, + GLuint start, GLuint dimension, struct gl_1d_map *map ) { @@ -2042,7 +2045,7 @@ static GLvector4f *eval1_4f( GLvector4f *dest, GLfloat (*to)[4] = dest->data; GLuint i; - for (i = VB_START ; !(flags[i] & VERT_END_VB) ; i++) + for (i = start ; !(flags[i] & VERT_END_VB) ; i++) if (flags[i] & (VERT_EVAL_C1|VERT_EVAL_P1)) { GLfloat u = (coord[i][0] - u1) * du; ASSIGN_4V(to[i], 0,0,0,1); @@ -2050,6 +2053,7 @@ static GLvector4f *eval1_4f( GLvector4f *dest, } dest->count = i; + dest->start = VEC_ELT(dest, GLfloat, start); dest->size = MAX2(dest->size, dimension); dest->flags |= dirty_flags[dimension]; return dest; @@ -2058,7 +2062,8 @@ static GLvector4f *eval1_4f( GLvector4f *dest, static GLvector1ui *eval1_1ui( GLvector1ui *dest, GLfloat coord[][4], - const GLuint *flags, + const GLuint *flags, + GLuint start, struct gl_1d_map *map ) { const GLfloat u1 = map->u1; @@ -2066,7 +2071,7 @@ static GLvector1ui *eval1_1ui( GLvector1ui *dest, GLuint *to = dest->data; GLuint i; - for (i = VB_START ; !(flags[i] & VERT_END_VB) ; i++) + for (i = start ; !(flags[i] & VERT_END_VB) ; i++) if (flags[i] & (VERT_EVAL_C1|VERT_EVAL_P1)) { GLfloat u = (coord[i][0] - u1) * du; GLfloat tmp; @@ -2074,42 +2079,46 @@ static GLvector1ui *eval1_1ui( GLvector1ui *dest, to[i] = (GLuint) (GLint) tmp; } + dest->start = VEC_ELT(dest, GLuint, start); dest->count = i; return dest; } static GLvector3f *eval1_norm( GLvector3f *dest, - GLfloat coord[][4], - GLuint *flags, /* not const */ - struct gl_1d_map *map ) + GLfloat coord[][4], + GLuint *flags, /* not const */ + GLuint start, + struct gl_1d_map *map ) { const GLfloat u1 = map->u1; const GLfloat du = map->du; GLfloat (*to)[3] = dest->data; GLuint i; - for (i = VB_START ; !(flags[i] & VERT_END_VB) ; i++) + for (i = start ; !(flags[i] & VERT_END_VB) ; i++) if (flags[i] & (VERT_EVAL_C1|VERT_EVAL_P1)) { GLfloat u = (coord[i][0] - u1) * du; horner_bezier_curve(map->Points, to[i], u, 3, map->Order); flags[i+1] |= VERT_NORM; /* reset */ } + dest->start = VEC_ELT(dest, GLfloat, start); dest->count = i; return dest; } static GLvector4ub *eval1_color( GLvector4ub *dest, - GLfloat coord[][4], - GLuint *flags, /* not const */ - struct gl_1d_map *map ) + GLfloat coord[][4], + GLuint *flags, /* not const */ + GLuint start, + struct gl_1d_map *map ) { const GLfloat u1 = map->u1; const GLfloat du = map->du; GLubyte (*to)[4] = dest->data; GLuint i; - for (i = VB_START ; !(flags[i] & VERT_END_VB) ; i++) + for (i = start ; !(flags[i] & VERT_END_VB) ; i++) if (flags[i] & (VERT_EVAL_C1|VERT_EVAL_P1)) { GLfloat u = (coord[i][0] - u1) * du; GLfloat fcolor[4]; @@ -2118,6 +2127,7 @@ static GLvector4ub *eval1_color( GLvector4ub *dest, flags[i+1] |= VERT_RGBA; /* reset */ } + dest->start = VEC_ELT(dest, GLubyte, start); dest->count = i; return dest; } @@ -2129,6 +2139,7 @@ static GLvector4f *eval2_obj_norm( GLvector4f *obj_ptr, GLvector3f *norm_ptr, GLfloat coord[][4], GLuint *flags, + GLuint start, GLuint dimension, struct gl_2d_map *map ) { @@ -2140,7 +2151,7 @@ static GLvector4f *eval2_obj_norm( GLvector4f *obj_ptr, GLfloat (*normal)[3] = norm_ptr->data; GLuint i; - for (i = VB_START ; !(flags[i] & VERT_END_VB) ; i++) + for (i = start ; !(flags[i] & VERT_END_VB) ; i++) if (flags[i] & (VERT_EVAL_C2|VERT_EVAL_P2)) { GLfloat u = (coord[i][0] - u1) * du; GLfloat v = (coord[i][1] - v1) * dv; @@ -2155,6 +2166,7 @@ static GLvector4f *eval2_obj_norm( GLvector4f *obj_ptr, flags[i+1] |= VERT_NORM; } + obj_ptr->start = VEC_ELT(obj_ptr, GLfloat, start); obj_ptr->count = i; obj_ptr->size = MAX2(obj_ptr->size, dimension); obj_ptr->flags |= dirty_flags[dimension]; @@ -2164,7 +2176,8 @@ static GLvector4f *eval2_obj_norm( GLvector4f *obj_ptr, static GLvector4f *eval2_4f( GLvector4f *dest, GLfloat coord[][4], - const GLuint *flags, + const GLuint *flags, + GLuint start, GLuint dimension, struct gl_2d_map *map ) { @@ -2175,7 +2188,7 @@ static GLvector4f *eval2_4f( GLvector4f *dest, GLfloat (*to)[4] = dest->data; GLuint i; - for (i = VB_START ; !(flags[i] & VERT_END_VB) ; i++) + for (i = start ; !(flags[i] & VERT_END_VB) ; i++) if (flags[i] & (VERT_EVAL_C2|VERT_EVAL_P2)) { GLfloat u = (coord[i][0] - u1) * du; GLfloat v = (coord[i][1] - v1) * dv; @@ -2183,6 +2196,7 @@ static GLvector4f *eval2_4f( GLvector4f *dest, map->Uorder, map->Vorder); } + dest->start = VEC_ELT(dest, GLfloat, start); dest->count = i; dest->size = MAX2(dest->size, dimension); dest->flags |= dirty_flags[dimension]; @@ -2193,6 +2207,7 @@ static GLvector4f *eval2_4f( GLvector4f *dest, static GLvector3f *eval2_norm( GLvector3f *dest, GLfloat coord[][4], GLuint *flags, + GLuint start, struct gl_2d_map *map ) { const GLfloat u1 = map->u1; @@ -2202,7 +2217,7 @@ static GLvector3f *eval2_norm( GLvector3f *dest, GLfloat (*to)[3] = dest->data; GLuint i; - for (i = VB_START ; !(flags[i] & VERT_END_VB) ; i++) + for (i = start ; !(flags[i] & VERT_END_VB) ; i++) if (flags[i] & (VERT_EVAL_C2|VERT_EVAL_P2)) { GLfloat u = (coord[i][0] - u1) * du; GLfloat v = (coord[i][1] - v1) * dv; @@ -2211,6 +2226,7 @@ static GLvector3f *eval2_norm( GLvector3f *dest, flags[i+1] |= VERT_NORM; /* reset */ } + dest->start = VEC_ELT(dest, GLfloat, start); dest->count = i; return dest; } @@ -2218,7 +2234,8 @@ static GLvector3f *eval2_norm( GLvector3f *dest, static GLvector1ui *eval2_1ui( GLvector1ui *dest, GLfloat coord[][4], - const GLuint *flags, + const GLuint *flags, + GLuint start, struct gl_2d_map *map ) { const GLfloat u1 = map->u1; @@ -2228,7 +2245,7 @@ static GLvector1ui *eval2_1ui( GLvector1ui *dest, GLuint *to = dest->data; GLuint i; - for (i = VB_START ; !(flags[i] & VERT_END_VB) ; i++) + for (i = start ; !(flags[i] & VERT_END_VB) ; i++) if (flags[i] & (VERT_EVAL_C2|VERT_EVAL_P2)) { GLfloat u = (coord[i][0] - u1) * du; GLfloat v = (coord[i][1] - v1) * dv; @@ -2239,6 +2256,7 @@ static GLvector1ui *eval2_1ui( GLvector1ui *dest, to[i] = (GLuint) (GLint) tmp; } + dest->start = VEC_ELT(dest, GLuint, start); dest->count = i; return dest; } @@ -2248,6 +2266,7 @@ static GLvector1ui *eval2_1ui( GLvector1ui *dest, static GLvector4ub *eval2_color( GLvector4ub *dest, GLfloat coord[][4], GLuint *flags, + GLuint start, struct gl_2d_map *map ) { const GLfloat u1 = map->u1; @@ -2257,7 +2276,7 @@ static GLvector4ub *eval2_color( GLvector4ub *dest, GLubyte (*to)[4] = dest->data; GLuint i; - for (i = VB_START ; !(flags[i] & VERT_END_VB) ; i++) + for (i = start ; !(flags[i] & VERT_END_VB) ; i++) if (flags[i] & (VERT_EVAL_C2|VERT_EVAL_P2)) { GLfloat u = (coord[i][0] - u1) * du; GLfloat v = (coord[i][1] - v1) * dv; @@ -2268,64 +2287,75 @@ static GLvector4ub *eval2_color( GLvector4ub *dest, flags[i+1] |= VERT_RGBA; /* reset */ } + dest->start = VEC_ELT(dest, GLubyte, start); dest->count = i; return dest; } static GLvector4f *copy_4f( GLvector4f *out, CONST GLvector4f *in, - const GLuint *flags) + const GLuint *flags, + GLuint start ) { GLfloat (*to)[4] = out->data; GLfloat (*from)[4] = in->data; GLuint i; - for ( i = VB_START ; !(flags[i] & VERT_END_VB) ; i++) + for ( i = start ; !(flags[i] & VERT_END_VB) ; i++) if (!(flags[i] & VERT_EVAL_ANY)) COPY_4FV( to[i], from[i] ); + out->start = VEC_ELT(out, GLfloat, start); return out; } static GLvector3f *copy_3f( GLvector3f *out, CONST GLvector3f *in, - const GLuint *flags) + const GLuint *flags, + GLuint start ) { GLfloat (*to)[3] = out->data; GLfloat (*from)[3] = in->data; GLuint i; - for ( i = VB_START ; !(flags[i] & VERT_END_VB) ; i++) + for ( i = start ; !(flags[i] & VERT_END_VB) ; i++) if (!(flags[i] & VERT_EVAL_ANY)) COPY_3V( to[i], from[i] ); + out->start = VEC_ELT(out, GLfloat, start); return out; } -static GLvector4ub *copy_4ub( GLvector4ub *out, CONST GLvector4ub *in, - const GLuint *flags ) +static GLvector4ub *copy_4ub( GLvector4ub *out, + CONST GLvector4ub *in, + const GLuint *flags, + GLuint start ) { GLubyte (*to)[4] = out->data; GLubyte (*from)[4] = in->data; GLuint i; - for ( i = VB_START ; !(flags[i] & VERT_END_VB) ; i++) + for ( i = start ; !(flags[i] & VERT_END_VB) ; i++) if (!(flags[i] & VERT_EVAL_ANY)) COPY_4UBV( to[i], from[i] ); + out->start = VEC_ELT(out, GLubyte, start); return out; } -static GLvector1ui *copy_1ui( GLvector1ui *out, CONST GLvector1ui *in, - const GLuint *flags ) +static GLvector1ui *copy_1ui( GLvector1ui *out, + CONST GLvector1ui *in, + const GLuint *flags, + GLuint start ) { GLuint *to = out->data; CONST GLuint *from = in->data; GLuint i; - for ( i = VB_START ; !(flags[i] & VERT_END_VB) ; i++) + for ( i = start ; !(flags[i] & VERT_END_VB) ; i++) if (!(flags[i] & VERT_EVAL_ANY)) to[i] = from[i]; + out->start = VEC_ELT(out, GLuint, start); return out; } @@ -2354,7 +2384,7 @@ void gl_eval_vb( struct vertex_buffer *VB ) GLuint any_eval1 = VB->OrFlag & (VERT_EVAL_C1|VERT_EVAL_P1); GLuint any_eval2 = VB->OrFlag & (VERT_EVAL_C2|VERT_EVAL_P2); - GLuint all_eval = VB->AndFlag & VERT_EVAL_ANY; + GLuint all_eval = IM->AndFlag & VERT_EVAL_ANY; /* Handle the degenerate cases. */ @@ -2379,7 +2409,7 @@ void gl_eval_vb( struct vertex_buffer *VB ) * work on useful changes. */ if (VB->PurgeFlags) { - if (!any_eval1 && !any_eval2 && all_eval) VB->Count = VB_START; + if (!any_eval1 && !any_eval2 && all_eval) VB->Count = VB->Start; gl_purge_vertices( VB ); if (!any_eval1 && !any_eval2) return; } else @@ -2389,7 +2419,7 @@ void gl_eval_vb( struct vertex_buffer *VB ) */ if (any_eval1 && (VB->OrFlag & VERT_EVAL_P1)) { - eval_points1( IM->Obj, coord, flags, + eval_points1( IM->Obj, coord, flags, IM->Start, ctx->Eval.MapGrid1du, ctx->Eval.MapGrid1u1); @@ -2398,7 +2428,7 @@ void gl_eval_vb( struct vertex_buffer *VB ) if (any_eval2 && (VB->OrFlag & VERT_EVAL_P2)) { - eval_points2( IM->Obj, coord, flags, + eval_points2( IM->Obj, coord, flags, IM->Start, ctx->Eval.MapGrid2du, ctx->Eval.MapGrid2u1, ctx->Eval.MapGrid2dv, @@ -2415,17 +2445,17 @@ void gl_eval_vb( struct vertex_buffer *VB ) GLvector1ui *out_index = &IM->v.Index; if (ctx->Eval.Map1Index && any_eval1) - VB->IndexPtr = eval1_1ui( out_index, coord, flags, + VB->IndexPtr = eval1_1ui( out_index, coord, flags, IM->Start, &ctx->EvalMap.Map1Index ); if (ctx->Eval.Map2Index && any_eval2) - VB->IndexPtr = eval2_1ui( out_index, coord, flags, + VB->IndexPtr = eval2_1ui( out_index, coord, flags, IM->Start, &ctx->EvalMap.Map2Index ); if (VB->IndexPtr != in_index) { new_flags |= VERT_INDEX; if (!all_eval) - VB->IndexPtr = copy_1ui( out_index, in_index, flags ); + VB->IndexPtr = copy_1ui( out_index, in_index, flags, IM->Start ); } } @@ -2435,17 +2465,17 @@ void gl_eval_vb( struct vertex_buffer *VB ) GLvector4ub *out_color = &IM->v.Color; if (ctx->Eval.Map1Color4 && any_eval1) - VB->ColorPtr = eval1_color( out_color, coord, flags, + VB->ColorPtr = eval1_color( out_color, coord, flags, IM->Start, &ctx->EvalMap.Map1Color4 ); if (ctx->Eval.Map2Color4 && any_eval2) - VB->ColorPtr = eval2_color( out_color, coord, flags, + VB->ColorPtr = eval2_color( out_color, coord, flags, IM->Start, &ctx->EvalMap.Map2Color4 ); if (VB->ColorPtr != in_color) { new_flags |= VERT_RGBA; if (!all_eval) - VB->ColorPtr = copy_4ub( out_color, in_color, flags ); + VB->ColorPtr = copy_4ub( out_color, in_color, flags, IM->Start ); } VB->Color[0] = VB->Color[1] = VB->ColorPtr; @@ -2458,17 +2488,17 @@ void gl_eval_vb( struct vertex_buffer *VB ) GLvector3f *out_normal = &IM->v.Normal; if (ctx->Eval.Map1Normal && any_eval1) - VB->NormalPtr = eval1_norm( out_normal, coord, flags, + VB->NormalPtr = eval1_norm( out_normal, coord, flags, IM->Start, &ctx->EvalMap.Map1Normal ); if (ctx->Eval.Map2Normal && any_eval2) - VB->NormalPtr = eval2_norm( out_normal, coord, flags, + VB->NormalPtr = eval2_norm( out_normal, coord, flags, IM->Start, &ctx->EvalMap.Map2Normal ); if (VB->NormalPtr != in_normal) { new_flags |= VERT_NORM; if (!all_eval) - VB->NormalPtr = copy_3f( out_normal, in_normal, flags ); + VB->NormalPtr = copy_3f( out_normal, in_normal, flags, IM->Start ); } } @@ -2481,30 +2511,38 @@ void gl_eval_vb( struct vertex_buffer *VB ) if (any_eval1) { if (ctx->Eval.Map1TextureCoord4) - tc = eval1_4f( out, coord, flags, 4, &ctx->EvalMap.Map1Texture4); + tc = eval1_4f( out, coord, flags, IM->Start, + 4, &ctx->EvalMap.Map1Texture4); else if (ctx->Eval.Map1TextureCoord3) - tc = eval1_4f( out, coord, flags, 3, &ctx->EvalMap.Map1Texture3); + tc = eval1_4f( out, coord, flags, IM->Start, 3, + &ctx->EvalMap.Map1Texture3); else if (ctx->Eval.Map1TextureCoord2) - tc = eval1_4f( out, coord, flags, 2, &ctx->EvalMap.Map1Texture2); + tc = eval1_4f( out, coord, flags, IM->Start, 2, + &ctx->EvalMap.Map1Texture2); else if (ctx->Eval.Map1TextureCoord1) - tc = eval1_4f( out, coord, flags, 1, &ctx->EvalMap.Map1Texture1); + tc = eval1_4f( out, coord, flags, IM->Start, 1, + &ctx->EvalMap.Map1Texture1); } if (any_eval2) { if (ctx->Eval.Map2TextureCoord4) - tc = eval2_4f( out, coord, flags, 4, &ctx->EvalMap.Map2Texture4); + tc = eval2_4f( out, coord, flags, IM->Start, + 4, &ctx->EvalMap.Map2Texture4); else if (ctx->Eval.Map2TextureCoord3) - tc = eval2_4f( out, coord, flags, 3, &ctx->EvalMap.Map2Texture3); + tc = eval2_4f( out, coord, flags, IM->Start, + 3, &ctx->EvalMap.Map2Texture3); else if (ctx->Eval.Map2TextureCoord2) - tc = eval2_4f( out, coord, flags, 2, &ctx->EvalMap.Map2Texture2); + tc = eval2_4f( out, coord, flags, IM->Start, + 2, &ctx->EvalMap.Map2Texture2); else if (ctx->Eval.Map2TextureCoord1) - tc = eval2_4f( out, coord, flags, 1, &ctx->EvalMap.Map2Texture1); + tc = eval2_4f( out, coord, flags, IM->Start, + 1, &ctx->EvalMap.Map2Texture1); } if (tc != in) { new_flags |= VERT_TEX_ANY(0); /* fix for sizes.. */ if (!all_eval) - tc = copy_4f( out, in, flags ); + tc = copy_4f( out, in, flags, IM->Start ); } VB->TexCoordPtr[0] = tc; @@ -2518,34 +2556,36 @@ void gl_eval_vb( struct vertex_buffer *VB ) if (any_eval1) { if (ctx->Eval.Map1Vertex4) - obj = eval1_4f( out, coord, flags, 4, &ctx->EvalMap.Map1Vertex4); + obj = eval1_4f( out, coord, flags, IM->Start, + 4, &ctx->EvalMap.Map1Vertex4); else - obj = eval1_4f( out, coord, flags, 3, &ctx->EvalMap.Map1Vertex3); + obj = eval1_4f( out, coord, flags, IM->Start, + 3, &ctx->EvalMap.Map1Vertex3); } if (any_eval2) { if (ctx->Eval.Map2Vertex4) { if (ctx->Eval.AutoNormal && (req & VERT_NORM)) - obj = eval2_obj_norm( out, VB->NormalPtr, coord, flags, 4, - &ctx->EvalMap.Map2Vertex4 ); + obj = eval2_obj_norm( out, VB->NormalPtr, coord, flags, IM->Start, + 4, &ctx->EvalMap.Map2Vertex4 ); else - obj = eval2_4f( out, coord, flags, 4, - &ctx->EvalMap.Map2Vertex4); + obj = eval2_4f( out, coord, flags, IM->Start, + 4, &ctx->EvalMap.Map2Vertex4); } else if (ctx->Eval.Map2Vertex3) { if (ctx->Eval.AutoNormal && (req & VERT_NORM)) - obj = eval2_obj_norm( out, VB->NormalPtr, coord, flags, 3, - &ctx->EvalMap.Map2Vertex3 ); + obj = eval2_obj_norm( out, VB->NormalPtr, coord, flags, IM->Start, + 3, &ctx->EvalMap.Map2Vertex3 ); else - obj = eval2_4f( out, coord, flags, 3, - &ctx->EvalMap.Map2Vertex3 ); + obj = eval2_4f( out, coord, flags, IM->Start, + 3, &ctx->EvalMap.Map2Vertex3 ); } } if (obj != in && !all_eval) - obj = copy_4f( out, in, flags ); + obj = copy_4f( out, in, flags, IM->Start ); VB->ObjPtr = obj; } @@ -2564,7 +2604,6 @@ void gl_eval_vb( struct vertex_buffer *VB ) if (all_eval) { for (i = 0 ; i < count ; i++) flags[i] = oldflags[i] | new_flags; - VB->AndFlag |= new_flags; } else { GLuint andflag = ~0; for (i = 0 ; i < count ; i++) { @@ -2572,7 +2611,6 @@ void gl_eval_vb( struct vertex_buffer *VB ) flags[i] = oldflags[i] | new_flags; andflag &= flags[i]; } - VB->AndFlag = andflag; } } } diff --git a/src/mesa/main/light.c b/src/mesa/main/light.c index a9a125b6afd..966b548082b 100644 --- a/src/mesa/main/light.c +++ b/src/mesa/main/light.c @@ -1,4 +1,4 @@ -/* $Id: light.c,v 1.4 1999/10/08 09:27:11 keithw Exp $ */ +/* $Id: light.c,v 1.5 1999/10/19 18:37:04 keithw Exp $ */ /* * Mesa 3-D graphics library @@ -664,14 +664,22 @@ void gl_Materialfv( GLcontext *ctx, IM = ctx->input; count = IM->Count; + if (!IM->Material) { + IM->Material = + (struct gl_material (*)[2]) MALLOC( sizeof(struct gl_material) * + VB_SIZE * 2 ); + IM->MaterialMask = (GLuint *) MALLOC( sizeof(GLuint) * VB_SIZE ); + } + + if (!(IM->Flag[count] & VERT_MATERIAL)) { IM->Flag[count] |= VERT_MATERIAL; - IM->MaterialMask[count] = 0; + IM->MaterialMask[count] = 0; } + IM->MaterialMask[count] |= bitmask; mat = IM->Material[count]; - IM->LastMaterial = count; if (bitmask & FRONT_AMBIENT_BIT) { COPY_4FV( mat[0].Ambient, params ); diff --git a/src/mesa/main/varray.c b/src/mesa/main/varray.c index f11ce2df694..57564198906 100644 --- a/src/mesa/main/varray.c +++ b/src/mesa/main/varray.c @@ -1,4 +1,4 @@ -/* $Id: varray.c,v 1.4 1999/10/08 09:27:11 keithw Exp $ */ +/* $Id: varray.c,v 1.5 1999/10/19 18:37:05 keithw Exp $ */ /* * Mesa 3-D graphics library @@ -403,15 +403,21 @@ void gl_CVAEltPointer( GLcontext *ctx, GLenum type, const GLvoid *ptr ) /* KW: Batch function to exec all the array elements in the input * buffer prior to transform. Done only the first time a vertex * buffer is executed or compiled. + * + * KW: Have to do this after each glEnd if cva isn't active. (also + * have to do it after each full buffer) */ -void gl_exec_array_elements( GLcontext *ctx, struct immediate *IM ) +void gl_exec_array_elements( GLcontext *ctx, struct immediate *IM, + GLuint start, + GLuint count) { GLuint *flags = IM->Flag; GLuint *elts = IM->Elt; - GLuint count = IM->Count; - GLuint start = IM->Start; GLuint translate = ctx->Array.Flags; GLuint i; + + if (MESA_VERBOSE&VERBOSE_IMMEDIATE) + fprintf(stderr, "exec_array_elements %d .. %d\n", start, count); if (translate & VERT_OBJ_ANY) (ctx->Array.VertexEltFunc)( IM->Obj, @@ -455,22 +461,16 @@ void gl_exec_array_elements( GLcontext *ctx, struct immediate *IM ) flags, elts, (VERT_ELT|VERT_TEX1_ANY), start, count); - IM->OrFlag |= translate; - /* Lighting ignores the and-flag, so still need to do this. */ - if (IM->AndFlag & VERT_ELT) { - for (i = 0 ; i < count ; i++) +/* fprintf(stderr, "start %d count %d\n", start, count); */ +/* gl_print_vert_flags("translate", translate); */ + + for (i = start ; i < count ; i++) + if (flags[i] & VERT_ELT) { +/* flags[i] &= ~VERT_ELT; */ flags[i] |= translate; - IM->AndFlag |= translate; - } else { - GLuint andflag = ~0; - for (i = 0 ; i < count ; i++) { - if (flags[i] & VERT_ELT) flags[i] |= translate; - andflag &= flags[i]; - } - IM->AndFlag = andflag; - } + } } @@ -762,7 +762,6 @@ void gl_DrawArrays( GLcontext *ctx, GLenum mode, GLint start, GLsizei count ) VB->TexCoordPtr[1] = VSrc.TexCoord[1]; VB->Flag = ctx->Array.Flag; - VB->AndFlag = ctx->Array.Flags; VB->OrFlag = ctx->Array.Flags; count = VB->Count = VB_START + n; @@ -777,7 +776,6 @@ void gl_DrawArrays( GLcontext *ctx, GLenum mode, GLint start, GLsizei count ) VB->Flag[count] |= VERT_END_VB; VB->Flag[VB_START] |= VERT_NORM; -/* VB->Flag[VB_START] |= (IM->Flag[vb_start] & VERT_MATERIAL); */ VB->NextPrimitive[VB->CopyStart] = VB->Count; VB->Primitive[VB->CopyStart] = mode; @@ -839,19 +837,19 @@ static void FUNC( GLcontext *ctx, GLenum mode, \ GLuint nr = MIN2( VB_MAX, count - j + VB_START ); \ struct immediate *IM = ctx->input; \ GLuint sf = IM->Flag[VB_START]; \ + IM->FlushElt |= IM->ArrayEltFlush; \ \ for (i = VB_START ; i < nr ; i++) { \ IM->Elt[i] = (GLuint) *indices++; \ IM->Flag[i] = VERT_ELT; \ } \ \ - if (j == 0) IM->Flag[VB_START] |= sf; \ + if (j == 0) IM->Flag[IM->Start] |= sf; \ \ IM->Count = nr; \ j += nr - VB_START; \ \ if (j == count) gl_End( ctx ); \ - \ IM->maybe_transform_vb( IM ); \ } \ } @@ -894,8 +892,9 @@ void GLAPIENTRY glDrawElements(CTX_ARG GLenum mode, GLsizei count, cva = &ctx->CVA; ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glDrawElements"); - if (count<0) { - gl_error( ctx, GL_INVALID_VALUE, "glDrawElements(count)" ); + if (count <= 0) { + if (count < 0) + gl_error( ctx, GL_INVALID_VALUE, "glDrawElements(count)" ); return; } diff --git a/src/mesa/main/varray.h b/src/mesa/main/varray.h index 3085c42cd67..88cedb4a1ce 100644 --- a/src/mesa/main/varray.h +++ b/src/mesa/main/varray.h @@ -1,4 +1,4 @@ -/* $Id: varray.h,v 1.3 1999/10/08 09:27:11 keithw Exp $ */ +/* $Id: varray.h,v 1.4 1999/10/19 18:37:05 keithw Exp $ */ /* * Mesa 3-D graphics library @@ -99,7 +99,9 @@ extern void gl_save_DrawRangeElements( GLcontext *ctx, GLenum mode, extern void gl_exec_array_elements( GLcontext *ctx, - struct immediate *IM ); + struct immediate *IM, + GLuint start, + GLuint end ); extern void gl_update_client_state( GLcontext *ctx ); diff --git a/src/mesa/x86/3dnow.c b/src/mesa/x86/3dnow.c index f91a90b33f1..212b6bffa5b 100644 --- a/src/mesa/x86/3dnow.c +++ b/src/mesa/x86/3dnow.c @@ -1,4 +1,4 @@ -/* $Id: 3dnow.c,v 1.1 1999/08/19 00:55:42 jtg Exp $ */ +/* $Id: 3dnow.c,v 1.2 1999/10/19 18:37:06 keithw Exp $ */ /* * Mesa 3-D graphics library @@ -40,6 +40,7 @@ #include "context.h" #include "types.h" #include "xform.h" +#include "vertices.h" #ifdef DEBUG #include "debug_xform.h" @@ -126,7 +127,22 @@ gl_##pfx##_transform_normalize_normals_no_rot_##masked##; +extern void gl_3dnow_project_vertices( GLfloat *first, + GLfloat *last, + const GLfloat *m, + GLuint stride ); +extern void gl_3dnow_project_clipped_vertices( GLfloat *first, + GLfloat *last, + const GLfloat *m, + GLuint stride, + const GLubyte *clipmask ); + +extern void gl_v16_3dnow_general_xform( GLfloat *first_vert, + const GLfloat *m, + const GLfloat *src, + GLuint src_stride, + GLuint count ); void gl_init_3dnow_asm_transforms (void) { @@ -162,6 +178,12 @@ void gl_init_3dnow_asm_transforms (void) gl_test_all_transform_functions("3Dnow!"); gl_test_all_normal_transform_functions("3Dnow!"); #endif + + /* Hook in some stuff for vertices.c. + */ + gl_xform_points3_v16_general = gl_v16_3dnow_general_xform; + gl_project_v16 = gl_3dnow_project_vertices; + gl_project_clipped_v16 = gl_3dnow_project_clipped_vertices; } #endif diff --git a/src/mesa/x86/x86.c b/src/mesa/x86/x86.c index fe3bb34c913..610ec15ea64 100644 --- a/src/mesa/x86/x86.c +++ b/src/mesa/x86/x86.c @@ -1,4 +1,4 @@ -/* $Id: x86.c,v 1.1 1999/08/19 00:55:42 jtg Exp $ */ +/* $Id: x86.c,v 1.2 1999/10/19 18:37:07 keithw Exp $ */ /* * Mesa 3-D graphics library @@ -36,9 +36,23 @@ #include "context.h" #include "types.h" +#include "vertices.h" #include "xform.h" #include "x86.h" +extern void gl_v16_x86_cliptest_points4(GLfloat *first_vert, + GLfloat *last_vert, + GLubyte *or_mask, + GLubyte *and_mask, + GLubyte *clip_mask ); + + +extern void gl_v16_x86_general_xform(GLfloat *dest, + const GLfloat *m, + const GLfloat *src, + GLuint src_stride, + GLuint count); + #define XFORM_ARGS GLvector4f *to_vec, \ @@ -103,5 +117,8 @@ void gl_init_x86_asm_transforms( void ) gl_test_all_transform_functions("x86"); #endif + + gl_cliptest_points4_v16 = gl_v16_x86_cliptest_points4; + gl_xform_points3_v16_general = gl_v16_x86_general_xform; #endif } |