diff --git a/glide3x/h3/glide3/src/gdraw.c b/glide3x/h3/glide3/src/gdraw.c index d57e9a3..9d9c25a 100644 --- a/glide3x/h3/glide3/src/gdraw.c +++ b/glide3x/h3/glide3/src/gdraw.c @@ -290,28 +290,27 @@ GR_ENTRY(grDrawTriangle, void, (const void *a, const void *b, const void *c)) { GR_BEGIN_NOFIFOCHECK("grDrawTriangle",92); GDBG_INFO_MORE(gc->myLevel,"(0x%x,0x%x,0x%x)\n",a,b,c); - TRISETUP(a, b, c ); - -#if GLIDE_DEBUG +#if GLIDE_DEBUG /* HackAlert: Nuke the fifo ptr checking stuff here if we're just - * debugging teh asm tri code. - */ + * debugging the asm tri code. + */ gc->checkPtr = (FxU32)gc->cmdTransportInfo.fifoPtr; gc->checkCounter = 0; -#endif /* GLIDE_DEBUG */ +#endif /* GLIDE_DEBUG */ GR_END(); } + #elif defined(__MSC__) { - _asm { - mov eax, DWORD PTR fs:[WNT_TEB_PTR] ; + __asm { + mov eax, DWORD PTR fs:[WNT_TEB_PTR]; add eax, DWORD PTR _GlideRoot.tlsOffset; mov edx, [eax]; test edx, edx; je lostContext; mov eax, [edx + kLostContextOffset]; - test eax, eax + test eax, eax; je lostContext; mov eax, [eax]; test eax, 1; @@ -321,12 +320,14 @@ GR_ENTRY(grDrawTriangle, void, (const void *a, const void *b, const void *c)) } lostContext: ; /* <-- my, that's odd, but MSVC was insistent */ } + #elif defined( __linux__ ) || defined(__FreeBSD__) || (GLIDE_PLATFORM & GLIDE_OS_DOS32) { GR_BEGIN_NOFIFOCHECK("grDrawTriangle",92); TRISETUP(a, b, c); GR_END(); } + #else #error "Write triangle proc dispatch for this compiler" #endif /* Triangle proc dispatch routine */ @@ -443,14 +444,14 @@ _grDrawPoints(FxI32 mode, FxI32 count, void *pointers) { FxU32 x, y; FxU32 dataElem; - + DA_CONT(kSetupStrip | kSetupCullDisable, 0x00, 0x02, sizeof(FxU32) << 1, SSTCP_PKT3_BDDDDD); /* Convert to 32-bit representation */ gc->pool.temp1.f = FARRAY(vPtr, gc->state.vData.vertexInfo.offset) + bias; gc->pool.temp2.f = FARRAY(vPtr, gc->state.vData.vertexInfo.offset + 4) + bias; - + /* draw a little triangle, with the lower left corner at pixel center. */ /* The approach here is to split the triangle into two packets, one @@ -468,8 +469,8 @@ _grDrawPoints(FxI32 mode, FxI32 count, void *pointers) (0x01UL << (22UL - kNumMantissaBits))); y = ((gc->pool.temp2.u & (0xFFFFFFFFUL << (22UL - kNumMantissaBits))) + (0x01UL << (22UL - kNumMantissaBits))); - - /* Lower right corner */ + + /* Lower right corner */ DA_SET(x); DA_SET(y); @@ -481,11 +482,11 @@ _grDrawPoints(FxI32 mode, FxI32 count, void *pointers) /* Upper Left corner */ x -= (0x01UL << (21UL - kNumMantissaBits)); - + /* Packet w/ actual point coordinate and parameter data */ DA_CONT(kSetupStrip | kSetupCullDisable, gc->cmdTransportInfo.paramMask, 1, gc->state.vData.vSize, SSTCP_PKT3_DDDDDD); - + i = gc->tsuDataList[dataElem]; DA_SET(x); DA_SET(y); @@ -499,16 +500,15 @@ _grDrawPoints(FxI32 mode, FxI32 count, void *pointers) DA_END; GR_CHECK_SIZE(); /* end points routine */ - + count -= POINTS_BUFFER; } } else { /* * first cut of clip space coordinate code. */ - float oow; - + while (count > 0) { float *vPtr; FxI32 k; @@ -517,15 +517,15 @@ _grDrawPoints(FxI32 mode, FxI32 count, void *pointers) /* begin points routine */ DA_BEGIN; - + for (k = 0; k < vcount; k++) { - + vPtr = pointers; if (mode) vPtr = *(float **)vPtr; - oow = 1.0f / FARRAY(vPtr, gc->state.vData.wInfo.offset); + oow = 1.0f / FARRAY(vPtr, gc->state.vData.wInfo.offset); pointers = (float *)pointers + stride; - + { FxU32 x, y; @@ -549,7 +549,7 @@ _grDrawPoints(FxI32 mode, FxI32 count, void *pointers) (0x01UL << (22UL - kNumMantissaBits))); y = ((gc->pool.temp2.u & (0xFFFFFFFFUL << (22UL - kNumMantissaBits))) + (0x01UL << (22UL - kNumMantissaBits))); - + /* Lower right cornder */ DA_SET(x); DA_SET(y); @@ -561,11 +561,11 @@ _grDrawPoints(FxI32 mode, FxI32 count, void *pointers) /* Upper Left corner */ x -= (0x01UL << (21UL - kNumMantissaBits)); - + /* Packet w/ actual point coordinate and parameter data */ DA_CONT(kSetupStrip | kSetupCullDisable, gc->cmdTransportInfo.paramMask, 1, gc->state.vData.vSize, SSTCP_PKT3_DDDDDD); - + DA_SET(x); DA_SET(y); DA_VP_SETFS(vPtr, oow); @@ -574,7 +574,7 @@ _grDrawPoints(FxI32 mode, FxI32 count, void *pointers) DA_END; GR_CHECK_SIZE(); /* end points routine */ - + count -= POINTS_BUFFER; } } @@ -793,7 +793,7 @@ _grDrawLineStrip(FxI32 mode, FxI32 ltype, FxI32 count, void *pointers) if (mode) { a = *(float **)a; } - oowb = 1.0f / FARRAY(a, gc->state.vData.wInfo.offset); + oowb = 1.0f / FARRAY(a, gc->state.vData.wInfo.offset); } for (k = 0; k < vcount; k++) { a = (float *)pointers; @@ -804,7 +804,7 @@ _grDrawLineStrip(FxI32 mode, FxI32 ltype, FxI32 count, void *pointers) } pointers = (float *)pointers + stride; if (ltype == GR_LINES) { - owa = oowa = 1.0f / FARRAY(a, gc->state.vData.wInfo.offset); + owa = oowa = 1.0f / FARRAY(a, gc->state.vData.wInfo.offset); pointers = (float *)pointers + stride; } else @@ -814,14 +814,14 @@ _grDrawLineStrip(FxI32 mode, FxI32 ltype, FxI32 count, void *pointers) fay = tmp1 = FARRAY(a, gc->state.vData.vertexInfo.offset+4) *oowa*gc->state.Viewport.hheight+gc->state.Viewport.oy; fby = tmp2 = FARRAY(b, gc->state.vData.vertexInfo.offset+4) - *oowb*gc->state.Viewport.hheight+gc->state.Viewport.oy; + *oowb*gc->state.Viewport.hheight+gc->state.Viewport.oy; /* ** compute absolute deltas and draw from low Y to high Y */ ADY.f = tmp2 - tmp1; if (ADY.i < 0) { - float *tv; + float *tv; owa = oowb; owb = oowa; fay = tmp2; fby = tmp1; @@ -834,14 +834,14 @@ _grDrawLineStrip(FxI32 mode, FxI32 ltype, FxI32 count, void *pointers) *owb*gc->state.Viewport.hwidth+gc->state.Viewport.ox; DX.f = fbx - fax; - DX.i &= 0x7fffffff; /* abs(adx) */ + DX.i &= 0x7fffffff; /* abs(adx) */ /* check for zero-length lines */ if ((DX.i >= ADY.i) && (DX.i == 0)) goto all_done_vp; - + DA_CONT(kSetupCullDisable | kSetupStrip, gc->cmdTransportInfo.paramMask, 0x04UL, vertexParamOffset, SSTCP_PKT3_BDDDDD); - { + { /* x major */ if (DX.i >= ADY.i) { DA_SETF(fbx); @@ -1001,8 +1001,6 @@ _grDrawTriangles_Default(FxI32 mode, FxI32 count, void *pointers) count -= 15; } } - #undef FN_NAME } /* _grDrawTriangles */ - diff --git a/glide3x/h5/glide3/src/gdraw.c b/glide3x/h5/glide3/src/gdraw.c index 3855f21..a7bf5e0 100644 --- a/glide3x/h5/glide3/src/gdraw.c +++ b/glide3x/h5/glide3/src/gdraw.c @@ -275,17 +275,17 @@ GR_ENTRY(grDrawPoint, void, (const void *p)) GR_ENTRY(grDrawLine, void, (const void *a, const void *b)) { #define FN_NAME "grDrawLine" - void *verts[2]; /**** FIXME: this needs to be const! ****/ + void *vertices[2]; /**** FIXME: this needs to be const! ****/ GR_BEGIN_NOFIFOCHECK(FN_NAME, 91); GDBG_INFO_MORE(gc->myLevel, "(a = 0x%x, b = 0x%x)\n", a, b); - verts[0] = (void *)a; verts[1] = (void *)b; /** FIXME **/ + vertices[0] = (void *)a; vertices[1] = (void *)b; /* FIXME! */ if (gc->state.grEnableArgs.primitive_smooth_mode & GR_AA_ORDERED_LINES_MASK) - _grAADrawLineStrip(GR_VTX_PTR_ARRAY, GR_LINES, 2, verts); + _grAADrawLineStrip(GR_VTX_PTR_ARRAY, GR_LINES, 2, vertices); else - _grDrawLineStrip(GR_VTX_PTR_ARRAY, GR_LINES, 2, verts); + _grDrawLineStrip(GR_VTX_PTR_ARRAY, GR_LINES, 2, vertices); #undef FN_NAME } /* grDrawLine */ @@ -315,19 +315,18 @@ GR_ENTRY(grDrawTriangle, void, (const void *a, const void *b, const void *c)) GR_BEGIN_NOFIFOCHECK_NORET("grDrawTriangle",92); #endif /* GLIDE_DEBUG */ GDBG_INFO_MORE(gc->myLevel,"(0x%x,0x%x,0x%x)\n",a,b,c); - TRISETUP(a, b, c ); - -#if GLIDE_DEBUG +#if GLIDE_DEBUG /* HackAlert: Nuke the fifo ptr checking stuff here if we're just * debugging the asm tri code. - */ + */ gc->checkPtr = (FxU32)gc->cmdTransportInfo.fifoPtr; gc->checkCounter = 0; #else /* GLIDE_DEBUG */ GR_END(); #endif /* GLIDE_DEBUG */ } + #elif defined(__MSC__) { #if USE_STANDARD_TLS_FUNC @@ -365,13 +364,14 @@ GR_ENTRY(grDrawTriangle, void, (const void *a, const void *b, const void *c)) #endif lostContext: ; /* <-- my, that's odd, but MSVC was insistent */ } + #elif (GLIDE_PLATFORM & GLIDE_OS_UNIX) || (GLIDE_PLATFORM & GLIDE_OS_DOS32) { GR_BEGIN_NOFIFOCHECK("grDrawTriangle",92); TRISETUP(a, b, c); GR_END(); } - + #else /* (GLIDE_PLATFORM & GLIDE_OS_UNIX) || (GLIDE_PLATFORM & GLIDE_OS_DOS32) */ #error "Write triangle proc dispatch for this compiler" #endif /* Triangle proc dispatch routine */ @@ -379,6 +379,7 @@ GR_ENTRY(grDrawTriangle, void, (const void *a, const void *b, const void *c)) } /* grDrawTriangle */ #endif + #define DA_BEGIN \ { \ FxU32* packetPtr = gc->cmdTransportInfo.fifoPtr; \ @@ -444,7 +445,6 @@ _grDrawPoints(FxI32 mode, FxI32 count, void *pointers) * to compute a logical 1 value to fill an entire pixel. */ #define kNumMantissaBits 12UL - GR_BEGIN_NOFIFOCHECK(FN_NAME, 90); @@ -491,14 +491,14 @@ _grDrawPoints(FxI32 mode, FxI32 count, void *pointers) FxU32 x, y; FxU32 dataElem; const float bias = (const float)(3UL << kNumMantissaBits); - + DA_CONT(kSetupStrip | kSetupCullDisable, 0x00, 0x02, sizeof(FxU32) << 1, SSTCP_PKT3_BDDDDD); /* Convert to 32-bit representation */ gc->pool.temp1.f = FARRAY(vPtr, gc->state.vData.vertexInfo.offset) + bias; gc->pool.temp2.f = FARRAY(vPtr, gc->state.vData.vertexInfo.offset + 4) + bias; - + /* draw a little triangle, with the lower left corner at pixel center. */ /* The approach here is to split the triangle into two packets, one @@ -510,7 +510,7 @@ _grDrawPoints(FxI32 mode, FxI32 count, void *pointers) * triangle from the first packet sent. */ - /* Mask off the real fractional bits from the mantissa */ + /* Mask off the real fractional bits from the mantissa */ x = ((gc->pool.temp1.u & (0xFFFFFFFFUL << (22UL - kNumMantissaBits))) + (0x01UL << (22UL - kNumMantissaBits))); y = ((gc->pool.temp2.u & (0xFFFFFFFFUL << (22UL - kNumMantissaBits))) + @@ -522,17 +522,16 @@ _grDrawPoints(FxI32 mode, FxI32 count, void *pointers) /* Upper right corner */ y -= (0x01UL << (21UL - kNumMantissaBits)); - DA_SET(x); dataElem = 0; DA_SET(y); /* Upper Left corner */ x -= (0x01UL << (21UL - kNumMantissaBits)); - + /* Packet w/ actual point coordinate and parameter data */ DA_CONT(kSetupStrip | kSetupCullDisable, gc->cmdTransportInfo.paramMask, - 1, gc->state.vData.vSize, SSTCP_PKT3_DDDDDD); + 1, gc->state.vData.vSize, SSTCP_PKT3_DDDDDD); i = gc->tsuDataList[dataElem]; DA_SET(x); @@ -547,7 +546,7 @@ _grDrawPoints(FxI32 mode, FxI32 count, void *pointers) DA_END; GR_CHECK_SIZE(); /* end points routine */ - + count -= POINTS_BUFFER; } #else @@ -560,24 +559,24 @@ _grDrawPoints(FxI32 mode, FxI32 count, void *pointers) /* begin points routine */ DA_BEGIN; - + for (k = 0; k < vcount; k++) { vPtr = pointers; if (mode) vPtr = *(float **)vPtr; - + pointers = (float *)pointers + stride; - + GDBG_INFO_MORE(gc->myLevel, "(%f %f)\n", FARRAY(vPtr,gc->state.vData.vertexInfo.offset), FARRAY(vPtr,gc->state.vData.vertexInfo.offset + 4)); - + { volatile float x, y; FxU32 dataElem; - + DA_CONT(kSetupStrip | kSetupCullDisable, gc->cmdTransportInfo.paramMask, 4, -1/*NOT USED*//*gc->state.vData.vSize * 3*/, SSTCP_PKT3_BDDDDD); - + x = FARRAY(vPtr, gc->state.vData.vertexInfo.offset) + 0.5f; y = FARRAY(vPtr, gc->state.vData.vertexInfo.offset + 4) + 0.5f; @@ -590,8 +589,8 @@ _grDrawPoints(FxI32 mode, FxI32 count, void *pointers) /* Correct the bias to get rid of the fractional bits */ x = /*(volatile float)*/gc->pool.temp1.f - lbias; - y = /*(volatile float)*/gc->pool.temp2.f - lbias; - + y = /*(volatile float)*/gc->pool.temp2.f - lbias; + /* Lower right corner */ DA_SETF(x); DA_SETF(y); @@ -608,8 +607,8 @@ _grDrawPoints(FxI32 mode, FxI32 count, void *pointers) i = gc->tsuDataList[dataElem]; } - /* Upper right corner */ - y -= 1.0f; + /* Upper right corner */ + y -= 1.0f; DA_SETF(x); DA_SETF(y); dataElem = 0; @@ -633,7 +632,7 @@ _grDrawPoints(FxI32 mode, FxI32 count, void *pointers) i = gc->tsuDataList[dataElem]; } - /* Upper leftcorner */ + /* Upper leftcorner */ y += 1.0f; DA_SETF(x); DA_SETF(y); @@ -649,7 +648,7 @@ _grDrawPoints(FxI32 mode, FxI32 count, void *pointers) DA_END; GR_CHECK_SIZE(); /* end points routine */ - + count -= POINTS_BUFFER; } #endif @@ -657,9 +656,8 @@ _grDrawPoints(FxI32 mode, FxI32 count, void *pointers) /* * first cut of clip space coordinate code. */ - float oow; - + while (count > 0) { float lbias = (float)( 3 << 22); float *vPtr; @@ -669,16 +667,16 @@ _grDrawPoints(FxI32 mode, FxI32 count, void *pointers) /* begin points routine */ DA_BEGIN; - + for (k = 0; k < vcount; k++) { - + vPtr = pointers; if (mode) vPtr = *(float **)vPtr; - oow = 1.0f / FARRAY(vPtr, gc->state.vData.wInfo.offset); + oow = 1.0f / FARRAY(vPtr, gc->state.vData.wInfo.offset); pointers = (float *)pointers + stride; - - { + + { float fx, fy; DA_CONT(kSetupStrip | kSetupCullDisable, 0x00, @@ -689,7 +687,7 @@ _grDrawPoints(FxI32 mode, FxI32 count, void *pointers) gc->pool.temp1.f = (FARRAY(vPtr, gc->state.vData.vertexInfo.offset) * oow * gc->state.Viewport.hwidth + - gc->state.Viewport.ox + + gc->state.Viewport.ox + 0.5f); gc->pool.temp2.f = (FARRAY(vPtr, gc->state.vData.vertexInfo.offset + 4) * oow * @@ -705,17 +703,17 @@ _grDrawPoints(FxI32 mode, FxI32 count, void *pointers) fx = gc->pool.temp1.f - lbias; fy = gc->pool.temp2.f - lbias; - + /* Lower right corner */ DA_SETF(fx); DA_SETF(fy); - /* Upper right corner. */ + /* Upper right corner. */ fy -= 1.0f; DA_SETF(fx); DA_SETF(fy); - /* Lower left corner */ + /* Lower left corner */ fy += 1.0f; fx -= 1.0f; DA_SETF(fx); @@ -725,8 +723,7 @@ _grDrawPoints(FxI32 mode, FxI32 count, void *pointers) DA_CONT(kSetupStrip | kSetupCullDisable, gc->cmdTransportInfo.paramMask, 1, gc->state.vData.vSize, SSTCP_PKT3_DDDDDD); - - /*Upper left corner */ + /*Upper left corner */ fy -= 1.0f; DA_SETF(fx); DA_SETF(fy); @@ -737,7 +734,7 @@ _grDrawPoints(FxI32 mode, FxI32 count, void *pointers) DA_END; GR_CHECK_SIZE(); /* end points routine */ - + count -= POINTS_BUFFER; } } @@ -957,7 +954,7 @@ _grDrawLineStrip(FxI32 mode, FxI32 ltype, FxI32 count, void *pointers) if (mode) { a = *(float **)a; } - oowb = 1.0f / FARRAY(a, gc->state.vData.wInfo.offset); + oowb = 1.0f / FARRAY(a, gc->state.vData.wInfo.offset); } for (k = 0; k < vcount; k++) { a = (float *)pointers; @@ -968,7 +965,7 @@ _grDrawLineStrip(FxI32 mode, FxI32 ltype, FxI32 count, void *pointers) } pointers = (float *)pointers + stride; if (ltype == GR_LINES) { - owa = oowa = 1.0f / FARRAY(a, gc->state.vData.wInfo.offset); + owa = oowa = 1.0f / FARRAY(a, gc->state.vData.wInfo.offset); pointers = (float *)pointers + stride; } else @@ -978,14 +975,14 @@ _grDrawLineStrip(FxI32 mode, FxI32 ltype, FxI32 count, void *pointers) fay = tmp1 = FARRAY(a, gc->state.vData.vertexInfo.offset+4) *oowa*gc->state.Viewport.hheight+gc->state.Viewport.oy; fby = tmp2 = FARRAY(b, gc->state.vData.vertexInfo.offset+4) - *oowb*gc->state.Viewport.hheight+gc->state.Viewport.oy; + *oowb*gc->state.Viewport.hheight+gc->state.Viewport.oy; /* ** compute absolute deltas and draw from low Y to high Y */ ADY.f = tmp2 - tmp1; if (ADY.i < 0) { - float *tv; + float *tv; owa = oowb; owb = oowa; fay = tmp2; fby = tmp1; @@ -998,14 +995,14 @@ _grDrawLineStrip(FxI32 mode, FxI32 ltype, FxI32 count, void *pointers) *owb*gc->state.Viewport.hwidth+gc->state.Viewport.ox; DX.f = fbx - fax; - DX.i &= 0x7fffffff; /* abs(adx) */ + DX.i &= 0x7fffffff; /* abs(adx) */ /* check for zero-length lines */ if ((DX.i >= ADY.i) && (DX.i == 0)) goto all_done_vp; - + DA_CONT(kSetupCullDisable | kSetupStrip, gc->cmdTransportInfo.paramMask, 0x04UL, vertexParamOffset, SSTCP_PKT3_BDDDDD); - { + { /* x major */ if (DX.i >= ADY.i) { DA_SETF(fbx); @@ -1164,7 +1161,7 @@ _grDrawTriangles_Default(FxI32 mode, FxI32 count, void *pointers) count -= 15; } } - + #endif #undef FN_NAME } /* _grDrawTriangles */