Commit some of Dave Mosberger's code:

If mode is not zero, initialize "stride" to the
number of floats that corresponds to the size of a pointer (1 on a
32-bit platform, 2 on a 64-bit platform).  This code works
properly as long as sizeof(void*)==N*sizeof(float) for some
integer constant N.
This commit is contained in:
alanh
2000-11-02 10:27:24 +00:00
parent fc7d1171eb
commit bc03716156
7 changed files with 171 additions and 197 deletions

View File

@@ -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) {

View File

@@ -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);
}

View File

@@ -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

View File

@@ -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) {

View File

@@ -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);
}

View File

@@ -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

View File

@@ -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