diff --git a/glide3x/h3/glide3/src/gaa.c b/glide3x/h3/glide3/src/gaa.c index 3f40b81..7d03957 100644 --- a/glide3x/h3/glide3/src/gaa.c +++ b/glide3x/h3/glide3/src/gaa.c @@ -19,6 +19,9 @@ ** ** $Header$ ** $Log$ +** Revision 1.1.1.1.2.1 2000/08/30 08:47:03 alanh +** Changes for Voodoo3 for 64bit architectures +** ** Revision 1.1.1.1 1999/11/24 21:44:56 joseph ** Initial checkin for SourceForge ** @@ -577,7 +580,7 @@ _grAADrawPoints(FxI32 mode, FxI32 count, void *pointers) FxU32 ia; FxU32 i; FxU32 vsize; - FxI32 stride = mode; + FxI32 stride; FxU32 tmp_cullStripHdr; GDBG_INFO(94,"_grAADrawPoints(0x%x)\n",e); @@ -585,8 +588,10 @@ _grAADrawPoints(FxI32 mode, FxI32 count, void *pointers) GDBG_INFO_MORE(gc->myLevel, "(count = %d, pointers = 0x%x)\n", count, pointers); - if (stride == 0) + if (mode == 0) stride = gc->state.vData.vStride; + else + stride = sizeof(float*)/sizeof(float); GR_FLUSH_STATE(); @@ -801,7 +806,7 @@ _grAADrawLineStrip(FxI32 mode, FxI32 ltype, FxI32 count, void *pointers) FxU32 ia, vNum = 0; FxU32 vsize; FxU32 sCount; - FxI32 stride = mode; + FxI32 stride; FxU32 tmp_cullStripHdr; GDBG_INFO(95,"_grAADrawLineStrip(count = %d, pointers = 0x%x)\n", @@ -817,8 +822,11 @@ _grAADrawLineStrip(FxI32 mode, FxI32 ltype, FxI32 count, void *pointers) GR_FLUSH_STATE(); - if (stride == 0) + if (mode == 0) stride = gc->state.vData.vStride; + else + stride = sizeof(float*)/sizeof(float); + if (ltype == GR_LINES) sCount = count >> 1; /* line list */ else @@ -1332,7 +1340,7 @@ _grAADrawTriangles(FxI32 mode, FxI32 ttype, FxI32 count, void *pointers) float **lPtr = (float **)pointers; FxI32 tCount = 3; FxU32 fbzModeOld; /* Squirrel away current fbzMode */ - FxI32 stride = mode; + FxI32 stride; FxI32 xindex = (gc->state.vData.vertexInfo.offset >> 2); FxI32 yindex = xindex + 1; @@ -1349,8 +1357,10 @@ _grAADrawTriangles(FxI32 mode, FxI32 ttype, FxI32 count, void *pointers) /* gc->state.invalid |= fbzModeBIT; */ GR_FLUSH_STATE(); - if (stride == 0) + if (mode == 0) stride = gc->state.vData.vStride; + else + stride = sizeof(float*)/sizeof(float); /* backfaced or zero area */ while (tCount <= count) { @@ -1505,7 +1515,7 @@ _grAAVpDrawTriangles(FxI32 mode, FxI32 ttype, FxI32 count, void *pointers) float **lPtr = (float **)pointers; FxI32 tCount = 3; FxU32 fbzModeOld; /* Squirrel away current fbzMode */ - FxI32 stride = mode; + FxI32 stride; FxI32 xindex = (gc->state.vData.vertexInfo.offset >> 2); FxI32 yindex = xindex + 1; @@ -1522,8 +1532,10 @@ _grAAVpDrawTriangles(FxI32 mode, FxI32 ttype, FxI32 count, void *pointers) /* gc->state.invalid |= fbzModeBIT; */ GR_FLUSH_STATE(); - if (stride == 0) + if (mode == 0) stride = gc->state.vData.vStride; + else + stride = sizeof(float*)/sizeof(float); /* backfaced or zero area */ while (tCount <= count) { @@ -1687,7 +1699,7 @@ _grAADrawVertexList(FxU32 type, FxI32 mode, FxI32 count, void *pointers) float *v[3]; FxBool flip = FXFALSE; FxU32 fbzModeOld; /* Squirrel away current fbzMode */ - FxI32 stride = mode; + FxI32 stride; if (sCount <= 2) return; @@ -1698,8 +1710,10 @@ _grAADrawVertexList(FxU32 type, FxI32 mode, FxI32 count, void *pointers) gc->state.shadow.fbzMode &= ~(SST_ZAWRMASK); /* gc->state.invalid |= fbzModeBIT; */ GR_FLUSH_STATE(); - if (stride == 0) + if (mode == 0) stride = gc->state.vData.vStride; + else + stride = sizeof(float*)/sizeof(float); sCount-=2; if (type == kSetupFan) { diff --git a/glide3x/h3/glide3/src/gdraw.c b/glide3x/h3/glide3/src/gdraw.c index d4de283..6ffd3b8 100644 --- a/glide3x/h3/glide3/src/gdraw.c +++ b/glide3x/h3/glide3/src/gdraw.c @@ -19,6 +19,9 @@ ** ** $Header$ ** $Log$ + ** Revision 1.2.2.1 2000/08/30 08:47:03 alanh + ** Changes for Voodoo3 for 64bit architectures + ** ** Revision 1.2 2000/02/15 22:35:58 joseph ** Changes to support FreeBSD (patch submitted by Doug Rabson) ** @@ -349,7 +352,7 @@ _grDrawPoints(FxI32 mode, FxI32 count, void *pointers) * except the data set up is from the pointer array and * its data layout */ - FxI32 stride = mode; + FxI32 stride; /* we snap to an integer by adding a large enough number that it * shoves all fraction bits off the right side of the mantissa. @@ -383,8 +386,10 @@ _grDrawPoints(FxI32 mode, FxI32 count, void *pointers) */ #define POINTS_BUFFER 100 - if (stride == 0) + if (mode == 0) stride = gc->state.vData.vStride; + else + stride = sizeof(float*)/sizeof(float); if (gc->state.grCoordinateSpaceArgs.coordinate_space_mode == GR_WINDOW_COORDS) { while (count > 0) { @@ -397,14 +402,10 @@ _grDrawPoints(FxI32 mode, FxI32 count, void *pointers) DA_BEGIN; for (k = 0; k < vcount; k++) { - if (mode) { - vPtr = *(float **)pointers; - (float **)pointers += stride; - } - else { - vPtr = (float *)pointers; - (float *)pointers += stride; - } + vPtr = pointers; + if (mode) vPtr = *(float **)vPtr; + + (float *)pointers += stride; GDBG_INFO_MORE(gc->myLevel, "(%f %f)\n", FARRAY(vPtr,gc->state.vData.vertexInfo.offset), @@ -489,15 +490,11 @@ _grDrawPoints(FxI32 mode, FxI32 count, void *pointers) for (k = 0; k < vcount; k++) { - if (mode) { - vPtr = *(float **)pointers; - (float **)pointers += stride; - } - else { - vPtr = (float *)pointers; - (float *)pointers += stride; - } + vPtr = pointers; + if (mode) + vPtr = *(float **)vPtr; oow = 1.0f / FARRAY(vPtr, gc->state.vData.wInfo.offset); + (float *)pointers += stride; { FxU32 x, y; @@ -582,7 +579,7 @@ _grDrawLineStrip(FxI32 mode, FxI32 ltype, FxI32 count, void *pointers) int j; FxI32 sCount; FxU32 vertexParamOffset; - FxI32 stride = mode; + FxI32 stride; #define DX gc->pool.ftemp1 #define ADY gc->pool.ftemp2 @@ -598,8 +595,11 @@ _grDrawLineStrip(FxI32 mode, FxI32 ltype, FxI32 count, void *pointers) #define LINES_BUFFER 100 - if (stride == 0) + if (mode == 0) stride = gc->state.vData.vStride; + else + stride = sizeof(float*)/sizeof(float); + if (ltype == GR_LINES) sCount = count >> 1; /* line list */ else @@ -611,40 +611,32 @@ _grDrawLineStrip(FxI32 mode, FxI32 ltype, FxI32 count, void *pointers) FxI32 vcount = sCount >= LINES_BUFFER ? LINES_BUFFER : sCount; GR_SET_EXPECTED_SIZE((gc->state.vData.vSize << 2) * vcount, vcount); - DA_BEGIN; for (k = 0; k < vcount; k++) { - float *a; - float *b; + float *a = (float *)pointers; + float *b = (float *)pointers + stride; if (mode) { - a = *(float **)pointers; - b = *((float **)pointers + stride); - (float **)pointers += stride; - if (ltype == GR_LINES) - (float **)pointers += stride; + a = *(float **)a; + b = *(float **)b; } - else { - a = (float *)pointers; - b = ((float *)pointers + stride); + (float *)pointers += stride; + if (ltype == GR_LINES) (float *)pointers += stride; - if (ltype == GR_LINES) - (float *)pointers += stride; - } - + /* ** compute absolute deltas and draw from low Y to high Y */ ADY = FARRAY(b, gc->state.vData.vertexInfo.offset+4) - FARRAY(a, gc->state.vData.vertexInfo.offset+4); - i = *(int *)&ADY; + i = *(long *)&ADY; if (i < 0) { float *tv; tv = a; a = b; b = tv; i ^= 0x80000000; /* ady = -ady; */ - (*(int *)&ADY) = i; + (*(long *)&ADY) = i; } DX = FARRAY(b, gc->state.vData.vertexInfo.offset) - FARRAY(a, gc->state.vData.vertexInfo.offset); - j = *(int *)&DX; + j = *(long *)&DX; if (j < 0) { j ^= 0x80000000; /* adx = -adx; */ } @@ -773,7 +765,6 @@ _grDrawLineStrip(FxI32 mode, FxI32 ltype, FxI32 count, void *pointers) FxI32 vcount = sCount >= LINES_BUFFER ? LINES_BUFFER : sCount; float *a,*b; GR_SET_EXPECTED_SIZE((gc->state.vData.vSize << 2) * vcount, vcount); - DA_BEGIN; if (ltype == GR_LINE_STRIP) { a = (float *)pointers; @@ -784,36 +775,26 @@ _grDrawLineStrip(FxI32 mode, FxI32 ltype, FxI32 count, void *pointers) } for (k = 0; k < vcount; k++) { if (ltype == GR_LINES) { + a = (float *)pointers; + b = (float *)pointers + stride; if (mode) { - a = *(float **)pointers; - b = *((float **)pointers + stride); - (float **)pointers += stride; - } - else { - a = (float *)pointers; - b = ((float *)pointers + stride); - (float *)pointers += stride; + a = *(float **)a; + b = *(float **)b; } + (float *)pointers += stride; owa = oowa = 1.0f / FARRAY(a, gc->state.vData.wInfo.offset); owb = oowb = 1.0f / FARRAY(b, gc->state.vData.wInfo.offset); - if( mode ) - (float **)pointers += stride; - else - (float *)pointers += stride; + (float *)pointers += stride; } else { owa = oowa = oowb; - + a = (float *)pointers; + b = (float *)pointers + stride; if (mode) { - a = *(float **)pointers; - b = *((float **)pointers + stride); - (float **)pointers += stride; - } - else { - a = (float *)pointers; - b = (float *)pointers + stride; - (float *)pointers += stride; + a = *(float **)a; + b = *(float **)b; } + (float *)pointers += stride; owb = oowb = 1.0f / FARRAY(b, gc->state.vData.wInfo.offset); } fay = tmp1 = FARRAY(a, gc->state.vData.vertexInfo.offset+4) @@ -825,7 +806,7 @@ _grDrawLineStrip(FxI32 mode, FxI32 ltype, FxI32 count, void *pointers) ** compute absolute deltas and draw from low Y to high Y */ ADY = tmp2 - tmp1; - i = *(int *)&ADY; + i = *(long *)&ADY; if (i < 0) { float *tv; owa = oowb; owb = oowa; @@ -833,7 +814,7 @@ _grDrawLineStrip(FxI32 mode, FxI32 ltype, FxI32 count, void *pointers) fby = tmp1; tv = a; a = b; b = tv; i ^= 0x80000000; /* ady = -ady; */ - (*(int *)&ADY) = i; + (*(long *)&ADY) = i; } fax = FARRAY(a, gc->state.vData.vertexInfo.offset) *owa*gc->state.Viewport.hwidth+gc->state.Viewport.ox; @@ -841,14 +822,14 @@ _grDrawLineStrip(FxI32 mode, FxI32 ltype, FxI32 count, void *pointers) *owb*gc->state.Viewport.hwidth+gc->state.Viewport.ox; DX = fbx - fax; - j = *(int *)&DX; + j = *(long *)&DX; if (j < 0) { j ^= 0x80000000; /* adx = -adx; */ } /* check for zero-length lines */ if ((j >= i) && (j == 0)) goto all_done_vp; - + DA_CONT(kSetupCullDisable | kSetupStrip, gc->cmdTransportInfo.paramMask, 0x04UL, vertexParamOffset, SSTCP_PKT3_BDDDDD); { @@ -929,7 +910,7 @@ _grDrawTriangles_Default(FxI32 mode, FxI32 count, void *pointers) vSize, #endif k; - FxI32 stride = mode; + FxI32 stride; float *vPtr; GR_BEGIN_NOFIFOCHECK(FN_NAME, 90); @@ -945,8 +926,10 @@ _grDrawTriangles_Default(FxI32 mode, FxI32 count, void *pointers) GDBG_INFO(110, "%s: paramMask = 0x%x\n", FN_NAME, gc->cmdTransportInfo.paramMask); #endif - if (stride == 0) + if (mode == 0) stride = gc->state.vData.vStride; + else + stride = sizeof(float*)/sizeof(float); gc->stats.trisProcessed+=(count/3); @@ -961,14 +944,10 @@ _grDrawTriangles_Default(FxI32 mode, FxI32 count, void *pointers) FxI32 i; FxU32 dataElem = 0; - if (mode) { - vPtr = *(float **)pointers; - (float **)pointers += stride; - } - else { - vPtr = (float *)pointers; - (float *)pointers += stride; - } + vPtr = pointers; + if (mode) + vPtr = *(float **)vPtr; + (float *)pointers += stride; i = gc->tsuDataList[dataElem]; @@ -998,12 +977,9 @@ _grDrawTriangles_Default(FxI32 mode, FxI32 count, void *pointers) TRI_STRIP_BEGIN(kSetupStrip, vcount, gc->state.vData.vSize, SSTCP_PKT3_BDDBDD); for (k = 0; k < vcount; k++) { - if (mode) { + vPtr = pointers; + if (mode) vPtr = *(float **)pointers; - } - else { - vPtr = (float *)pointers; - } oow = 1.0f / FARRAY(vPtr, gc->state.vData.wInfo.offset); /* x, y */ @@ -1011,10 +987,7 @@ _grDrawTriangles_Default(FxI32 mode, FxI32 count, void *pointers) *oow*gc->state.Viewport.hwidth + gc->state.Viewport.ox); TRI_SETF(FARRAY(vPtr, 4) *oow*gc->state.Viewport.hheight + gc->state.Viewport.oy); - if( mode ) - (float **)pointers += stride; - else - (float *)pointers += stride; + (float *)pointers += stride; TRI_VP_SETFS(vPtr,oow); } diff --git a/glide3x/h3/glide3/src/gstrip.c b/glide3x/h3/glide3/src/gstrip.c index b98f82f..f78631d 100644 --- a/glide3x/h3/glide3/src/gstrip.c +++ b/glide3x/h3/glide3/src/gstrip.c @@ -19,6 +19,9 @@ ** ** $Header$ ** $Log$ +** Revision 1.1.1.1 1999/11/24 21:44:57 joseph +** Initial checkin for SourceForge +** ** ** 4 4/06/99 3:54p Dow ** Alt tab again. @@ -146,7 +149,7 @@ _grDrawVertexList(FxU32 pktype, FxU32 type, FxI32 mode, FxI32 count, void *point ** simplified code */ FxU32 vSize; - FxI32 stride = mode; + FxI32 stride; GR_BEGIN_NOFIFOCHECK(FN_NAME, 90); @@ -156,8 +159,10 @@ _grDrawVertexList(FxU32 pktype, FxU32 type, FxI32 mode, FxI32 count, void *point GR_FLUSH_STATE(); vSize = gc->state.vData.vSize; - if (stride == 0) + if (mode == 0) stride = gc->state.vData.vStride; + else + stride = sizeof (float *) / sizeof (float); /* Draw the first (or possibly only) set. This is necessary because the packet is 3_BDDDDDD, and in the next set, the packet is diff --git a/glide3x/h5/glide3/src/gaa.c b/glide3x/h5/glide3/src/gaa.c index c1820f3..c8c2c83 100644 --- a/glide3x/h5/glide3/src/gaa.c +++ b/glide3x/h5/glide3/src/gaa.c @@ -587,7 +587,7 @@ _grAADrawPoints(FxI32 mode, FxI32 count, void *pointers) FxU32 ia; FxU32 i; FxU32 vsize; - FxI32 stride = mode; + FxI32 stride; FxU32 tmp_cullStripHdr; GDBG_INFO(94,"_grAADrawPoints(0x%x, %d, 0x%x)\n", mode, count, pointers); @@ -595,8 +595,10 @@ _grAADrawPoints(FxI32 mode, FxI32 count, void *pointers) GDBG_INFO_MORE(gc->myLevel, "(count = %d, pointers = 0x%x)\n", count, pointers); - if (stride == 0) + if (mode == 0) stride = gc->state.vData.vStride; + else + stride = sizeof (float *)/sizeof (float); GR_FLUSH_STATE(); @@ -813,7 +815,7 @@ _grAADrawLineStrip(FxI32 mode, FxI32 ltype, FxI32 count, void *pointers) FxU32 ia, vNum = 0; FxU32 vsize; FxU32 sCount; - FxI32 stride = mode; + FxI32 stride; FxU32 tmp_cullStripHdr; GDBG_INFO(95,"_grAADrawLineStrip(count = %d, pointers = 0x%x)\n", @@ -829,8 +831,11 @@ _grAADrawLineStrip(FxI32 mode, FxI32 ltype, FxI32 count, void *pointers) GR_FLUSH_STATE(); - if (stride == 0) + if (mode == 0) stride = gc->state.vData.vStride; + else + stride = sizeof (float *) / sizeof(float); + if (ltype == GR_LINES) sCount = count >> 1; /* line list */ else @@ -1348,7 +1353,7 @@ _grAADrawTriangles(FxI32 mode, FxI32 ttype, FxI32 count, void *pointers) float **lPtr = (float **)pointers; FxI32 tCount = 3; FxU32 fbzModeOld; /* Squirrel away current fbzMode */ - FxI32 stride = mode; + FxI32 stride; FxI32 xindex = (gc->state.vData.vertexInfo.offset >> 2); FxI32 yindex = xindex + 1; @@ -1365,8 +1370,10 @@ _grAADrawTriangles(FxI32 mode, FxI32 ttype, FxI32 count, void *pointers) /* gc->state.invalid |= fbzModeBIT; */ GR_FLUSH_STATE(); - if (stride == 0) + if (mode == 0) stride = gc->state.vData.vStride; + else + stride = sizeof (float *) / sizeof(float); /* backfaced or zero area */ while (tCount <= count) { @@ -1521,7 +1528,7 @@ _grAAVpDrawTriangles(FxI32 mode, FxI32 ttype, FxI32 count, void *pointers) float **lPtr = (float **)pointers; FxI32 tCount = 3; FxU32 fbzModeOld; /* Squirrel away current fbzMode */ - FxI32 stride = mode; + FxI32 stride; FxI32 xindex = (gc->state.vData.vertexInfo.offset >> 2); FxI32 yindex = xindex + 1; @@ -1538,8 +1545,10 @@ _grAAVpDrawTriangles(FxI32 mode, FxI32 ttype, FxI32 count, void *pointers) /* gc->state.invalid |= fbzModeBIT; */ GR_FLUSH_STATE(); - if (stride == 0) + if (mode == 0) stride = gc->state.vData.vStride; + else + stride = sizeof(float *) / sizeof(float); /* backfaced or zero area */ while (tCount <= count) { @@ -1703,7 +1712,7 @@ _grAADrawVertexList(FxU32 type, FxI32 mode, FxI32 count, void *pointers) float *v[3]; FxBool flip = FXFALSE; FxU32 fbzModeOld; /* Squirrel away current fbzMode */ - FxI32 stride = mode; + FxI32 stride; if (sCount <= 2) return; @@ -1714,8 +1723,10 @@ _grAADrawVertexList(FxU32 type, FxI32 mode, FxI32 count, void *pointers) gc->state.shadow.fbzMode &= ~(SST_ZAWRMASK); /* gc->state.invalid |= fbzModeBIT; */ GR_FLUSH_STATE(); - if (stride == 0) + if (mode == 0) stride = gc->state.vData.vStride; + else + stride = sizeof (float *) / sizeof(float); sCount-=2; if (type == kSetupFan) { diff --git a/glide3x/h5/glide3/src/gdraw.c b/glide3x/h5/glide3/src/gdraw.c index b8b5abb..ecb7688 100644 --- a/glide3x/h5/glide3/src/gdraw.c +++ b/glide3x/h5/glide3/src/gdraw.c @@ -413,7 +413,7 @@ _grDrawPoints(FxI32 mode, FxI32 count, void *pointers) * except the data set up is from the pointer array and * its data layout */ - FxI32 stride = mode; + FxI32 stride; /* we snap to an integer by adding a large enough number that it * shoves all fraction bits off the right side of the mantissa. @@ -447,8 +447,10 @@ _grDrawPoints(FxI32 mode, FxI32 count, void *pointers) */ #define POINTS_BUFFER 100 - if (stride == 0) + if (mode == 0) stride = gc->state.vData.vStride; + else + stride = sizeof(float *) / sizeof(float); if (gc->state.grCoordinateSpaceArgs.coordinate_space_mode == GR_WINDOW_COORDS) { #ifndef FX_GLIDE_H5_CSIM @@ -462,14 +464,10 @@ _grDrawPoints(FxI32 mode, FxI32 count, void *pointers) DA_BEGIN; for (k = 0; k < vcount; k++) { - if (mode) { - vPtr = *(float **)pointers; - (float **)pointers += stride; - } - else { - vPtr = (float *)pointers; - (float *)pointers += stride; - } + vPtr = pointers; + if (mode) vPtr = *(float **)vPtr; + + (float *)pointers += stride; GDBG_INFO_MORE(gc->myLevel, "(%f %f)\n", FARRAY(vPtr,gc->state.vData.vertexInfo.offset), @@ -548,14 +546,10 @@ _grDrawPoints(FxI32 mode, FxI32 count, void *pointers) DA_BEGIN; for (k = 0; k < vcount; k++) { - if (mode) { - vPtr = *(float **)pointers; - (float **)pointers += stride; - } - else { - vPtr = (float *)pointers; - (float *)pointers += stride; - } + vPtr = pointers; + if (mode) vPtr = *(float **)vPtr; + + (float *)pointers += stride; GDBG_INFO_MORE(gc->myLevel, "(%f %f)\n", FARRAY(vPtr,gc->state.vData.vertexInfo.offset), @@ -647,15 +641,11 @@ _grDrawPoints(FxI32 mode, FxI32 count, void *pointers) for (k = 0; k < vcount; k++) { - if (mode) { - vPtr = *(float **)pointers; - (float **)pointers += stride; - } - else { - vPtr = (float *)pointers; - (float *)pointers += stride; - } + vPtr = pointers; + if (mode) + vPtr = *(float **)vPtr; oow = 1.0f / FARRAY(vPtr, gc->state.vData.wInfo.offset); + (float *)pointers += stride; { FxU32 x, y; @@ -741,7 +731,7 @@ _grDrawLineStrip(FxI32 mode, FxI32 ltype, FxI32 count, void *pointers) int j; FxI32 sCount; FxU32 vertexParamOffset; - FxI32 stride = mode; + FxI32 stride; #define DX gc->pool.ftemp1 #define ADY gc->pool.ftemp2 @@ -757,8 +747,11 @@ _grDrawLineStrip(FxI32 mode, FxI32 ltype, FxI32 count, void *pointers) #define LINES_BUFFER 100 - if (stride == 0) + if (mode == 0) stride = gc->state.vData.vStride; + else + stride = sizeof(float *) / sizeof(float); + if (ltype == GR_LINES) sCount = count >> 1; /* line list */ else @@ -770,40 +763,32 @@ _grDrawLineStrip(FxI32 mode, FxI32 ltype, FxI32 count, void *pointers) FxI32 vcount = sCount >= LINES_BUFFER ? LINES_BUFFER : sCount; GR_SET_EXPECTED_SIZE((gc->state.vData.vSize << 2) * vcount, vcount); - DA_BEGIN; for (k = 0; k < vcount; k++) { - float *a; - float *b; + float *a = (float *)pointers; + float *b = (float *)pointers + stride; if (mode) { - a = *(float **)pointers; - b = *((float **)pointers + stride); - (float **)pointers += stride; - if (ltype == GR_LINES) - (float **)pointers += stride; + a = *(float **)a; + b = *(float **)b; } - else { - a = (float *)pointers; - b = ((float *)pointers + stride); + (float *)pointers += stride; + if (ltype == GR_LINES) (float *)pointers += stride; - if (ltype == GR_LINES) - (float *)pointers += stride; - } /* ** compute absolute deltas and draw from low Y to high Y */ ADY = FARRAY(b, gc->state.vData.vertexInfo.offset+4) - FARRAY(a, gc->state.vData.vertexInfo.offset+4); - i = *(int *)&ADY; + i = *(long *)&ADY; if (i < 0) { float *tv; tv = a; a = b; b = tv; i ^= 0x80000000; /* ady = -ady; */ - (*(int *)&ADY) = i; + (*(long *)&ADY) = i; } DX = FARRAY(b, gc->state.vData.vertexInfo.offset) - FARRAY(a, gc->state.vData.vertexInfo.offset); - j = *(int *)&DX; + j = *(long *)&DX; if (j < 0) { j ^= 0x80000000; /* adx = -adx; */ } @@ -942,35 +927,26 @@ _grDrawLineStrip(FxI32 mode, FxI32 ltype, FxI32 count, void *pointers) } for (k = 0; k < vcount; k++) { if (ltype == GR_LINES) { + a = (float *)pointers; + b = (float *)pointers + stride; if (mode) { - a = *(float **)pointers; - b = *((float **)pointers + stride); - (float **)pointers += stride; - } - else { - a = (float *)pointers; - b = ((float *)pointers + stride); - (float *)pointers += stride; + a = *(float **)a; + b = *(float **)b; } + (float *)pointers += stride; owa = oowa = 1.0f / FARRAY(a, gc->state.vData.wInfo.offset); owb = oowb = 1.0f / FARRAY(b, gc->state.vData.wInfo.offset); - if (mode) - (float **)pointers += stride; - else - (float *)pointers += stride; + (float *)pointers += stride; } else { owa = oowa = oowb; + a = (float *)pointers; + b = (float *)pointers + stride; if (mode) { - a = *(float **)pointers; - b = *((float **)pointers + stride); - (float **)pointers += stride; - } - else { - a = (float *)pointers; - b = (float *)pointers + stride; - (float *)pointers += stride; + a = *(float **)a; + b = *(float **)b; } + (float *)pointers += stride; owb = oowb = 1.0f / FARRAY(b, gc->state.vData.wInfo.offset); } fay = tmp1 = FARRAY(a, gc->state.vData.vertexInfo.offset+4) @@ -982,7 +958,7 @@ _grDrawLineStrip(FxI32 mode, FxI32 ltype, FxI32 count, void *pointers) ** compute absolute deltas and draw from low Y to high Y */ ADY = tmp2 - tmp1; - i = *(int *)&ADY; + i = *(long *)&ADY; if (i < 0) { float *tv; owa = oowb; owb = oowa; @@ -990,7 +966,7 @@ _grDrawLineStrip(FxI32 mode, FxI32 ltype, FxI32 count, void *pointers) fby = tmp1; tv = a; a = b; b = tv; i ^= 0x80000000; /* ady = -ady; */ - (*(int *)&ADY) = i; + (*(long *)&ADY) = i; } fax = FARRAY(a, gc->state.vData.vertexInfo.offset) *owa*gc->state.Viewport.hwidth+gc->state.Viewport.ox; @@ -998,7 +974,7 @@ _grDrawLineStrip(FxI32 mode, FxI32 ltype, FxI32 count, void *pointers) *owb*gc->state.Viewport.hwidth+gc->state.Viewport.ox; DX = fbx - fax; - j = *(int *)&DX; + j = *(long *)&DX; if (j < 0) { j ^= 0x80000000; /* adx = -adx; */ } @@ -1084,7 +1060,7 @@ _grDrawTriangles_Default(FxI32 mode, FxI32 count, void *pointers) #if GLIDE_HW_TRI_SETUP && GLIDE_PACKET3_TRI_SETUP FxI32 k; - FxI32 stride = mode; + FxI32 stride; float *vPtr; GR_BEGIN_NOFIFOCHECK(FN_NAME, 90); @@ -1098,9 +1074,10 @@ _grDrawTriangles_Default(FxI32 mode, FxI32 count, void *pointers) GDBG_INFO(110, "%s: paramMask = 0x%x\n", FN_NAME, gc->cmdTransportInfo.paramMask); #endif - if (stride == 0) + if (mode == 0) stride = gc->state.vData.vStride; - + else + stride = sizeof (float *) / sizeof (float); gc->stats.trisProcessed+=(count/3); @@ -1114,14 +1091,10 @@ _grDrawTriangles_Default(FxI32 mode, FxI32 count, void *pointers) FxI32 i; FxU32 dataElem = 0; - if (mode) { - vPtr = *(float **)pointers; - (float **)pointers += stride; - } - else { - vPtr = (float *)pointers; - (float *)pointers += stride; - } + vPtr = pointers; + if (mode) + vPtr = *(float **)vPtr; + (float *)pointers += stride; i = gc->tsuDataList[dataElem]; @@ -1151,12 +1124,9 @@ _grDrawTriangles_Default(FxI32 mode, FxI32 count, void *pointers) TRI_STRIP_BEGIN(kSetupStrip, vcount, gc->state.vData.vSize, SSTCP_PKT3_BDDBDD); for (k = 0; k < vcount; k++) { - if (mode) { + vPtr = pointers; + if (mode) vPtr = *(float **)pointers; - } - else { - vPtr = (float *)pointers; - } oow = 1.0f / FARRAY(vPtr, gc->state.vData.wInfo.offset); /* x, y */ @@ -1164,10 +1134,7 @@ _grDrawTriangles_Default(FxI32 mode, FxI32 count, void *pointers) *oow*gc->state.Viewport.hwidth + gc->state.Viewport.ox); TRI_SETF(FARRAY(vPtr, 4) *oow*gc->state.Viewport.hheight + gc->state.Viewport.oy); - if (mode) - (float **)pointers += stride; - else - (float *)pointers += stride; + (float *)pointers += stride; TRI_VP_SETFS(vPtr,oow); } diff --git a/glide3x/h5/glide3/src/gstrip.c b/glide3x/h5/glide3/src/gstrip.c index 3855a30..5361127 100644 --- a/glide3x/h5/glide3/src/gstrip.c +++ b/glide3x/h5/glide3/src/gstrip.c @@ -171,7 +171,7 @@ _grDrawVertexList(FxU32 pktype, FxU32 type, FxI32 mode, FxI32 count, void *point ** simplified code */ FxU32 vSize; - FxI32 stride = mode; + FxI32 stride; GR_BEGIN_NOFIFOCHECK(FN_NAME, 90); @@ -181,8 +181,10 @@ _grDrawVertexList(FxU32 pktype, FxU32 type, FxI32 mode, FxI32 count, void *point GR_FLUSH_STATE(); vSize = gc->state.vData.vSize; - if (stride == 0) + if (mode == 0) stride = gc->state.vData.vStride; + else + stride = sizeof(float*)/sizeof(float); /* Draw the first (or possibly only) set. This is necessary because the packet is 3_BDDDDDD, and in the next set, the packet is diff --git a/glide3x/h5/glide3/src/gstrip_ppc.c b/glide3x/h5/glide3/src/gstrip_ppc.c index e3f6791..60f62ee 100644 --- a/glide3x/h5/glide3/src/gstrip_ppc.c +++ b/glide3x/h5/glide3/src/gstrip_ppc.c @@ -175,7 +175,7 @@ _grDrawVertexList(FxU32 pktype, FxU32 type, FxI32 mode, FxI32 count, void *point ** simplified code */ FxU32 vSize; - FxI32 stride = mode; + FxI32 stride; GR_BEGIN_NOFIFOCHECK(FN_NAME, 90); @@ -185,8 +185,10 @@ _grDrawVertexList(FxU32 pktype, FxU32 type, FxI32 mode, FxI32 count, void *point GR_FLUSH_STATE(); vSize = gc->state.vData.vSize; - if (stride == 0) + if (mode == 0) stride = gc->state.vData.vStride; + else + stride = sizeof(float*)/sizeof(float); /* Draw the first (or possibly only) set. This is necessary because the packet is 3_BDDDDDD, and in the next set, the packet is