diff --git a/mars.h b/mars.h index ff87095e8..d64aa5f8d 100644 --- a/mars.h +++ b/mars.h @@ -58,7 +58,7 @@ enum void Mars_Secondary(void) ATTR_DATA_CACHE_ALIGN __attribute__((noinline)); -void Mars_Sec_R_Setup(void) ATTR_DATA_CACHE_ALIGN; +void Mars_Sec_R_Setup(void); void Mars_Sec_R_WallPrep(void) ATTR_DATA_CACHE_ALIGN; void Mars_Sec_R_SegCommands(void) ATTR_DATA_CACHE_ALIGN; void Mars_Sec_R_DrawPlanes(void) ATTR_DATA_CACHE_ALIGN; diff --git a/marsnew.c b/marsnew.c index 560357e6d..8c930a1af 100644 --- a/marsnew.c +++ b/marsnew.c @@ -744,13 +744,13 @@ void I_DebugScreen(void) Mars_DebugQueue(DEBUG_BSPMSEC, Mars_FRTCounter2Msec(t_ref_bsp_avg)); Mars_DebugQueue(DEBUG_SEGSMSEC, Mars_FRTCounter2Msec(t_ref_segs_avg)); - Mars_DebugQueue(DEBUG_SEGSCOUNT, lastwallcmd - viswalls); + Mars_DebugQueue(DEBUG_SEGSCOUNT, vd.lastwallcmd - vd.viswalls); Mars_DebugQueue(DEBUG_PLANESMSEC, Mars_FRTCounter2Msec(t_ref_planes_avg)); - Mars_DebugQueue(DEBUG_PLANESCOUNT, lastvisplane - visplanes - 1); + Mars_DebugQueue(DEBUG_PLANESCOUNT, vd.lastvisplane - vd.visplanes - 1); Mars_DebugQueue(DEBUG_SPRITESMSEC, Mars_FRTCounter2Msec(t_ref_sprites_avg)); - Mars_DebugQueue(DEBUG_SPRITESCOUNT, vissprite_p - vissprites); + Mars_DebugQueue(DEBUG_SPRITESCOUNT, vd.vissprite_p - vd.vissprites); Mars_DebugQueue(DEBUG_REFMSEC, Mars_FRTCounter2Msec(t_ref_total_avg)); diff --git a/r_local.h b/r_local.h index 4f1cd0b9a..0c02c5846 100644 --- a/r_local.h +++ b/r_local.h @@ -321,26 +321,6 @@ extern fixed_t *distscale/*[SCREENWIDTH]*/; #define MARKEDOPEN(x) ((x) == OPENMARK) #endif -typedef struct -#ifdef MARS -__attribute__((aligned(16))) -#endif -{ - fixed_t viewx, viewy, viewz; - angle_t viewangle; - fixed_t viewcos, viewsin; - player_t *viewplayer; - VINT lightlevel; - VINT extralight; - VINT displayplayer; - VINT fixedcolormap; - VINT fuzzcolormap; - angle_t clipangle, doubleclipangle; - VINT *viewangletox; -} viewdef_t; - -extern viewdef_t vd; - extern VINT extralight; #ifdef MARS @@ -526,9 +506,6 @@ typedef struct } viswallextra_t; #define MAXWALLCMDS 128 -extern viswall_t * volatile viswalls/*[MAXWALLCMDS] __attribute__((aligned(16)))*/; -extern viswall_t * volatile lastwallcmd; -extern viswallextra_t * volatile viswallextras; /* A vissprite_t is a thing that will be drawn during a refresh */ typedef struct vissprite_s @@ -548,15 +525,10 @@ typedef struct vissprite_s } vissprite_t; #define MAXVISSPRITES MAXWALLCMDS -extern viswall_t * volatile vissprites/*[MAXVISSPRITES]*/, * volatile lastsprite_p, * volatile vissprite_p; #define MAXOPENINGS SCREENWIDTH*14 -extern unsigned short * volatile openings/*[MAXOPENINGS]*/; -extern unsigned short * volatile lastopening; -extern unsigned short * volatile segclip, * volatile lastsegclip; #define MAXVISSSEC 128 -extern sector_t **vissectors/*[MAXVISSSEC]*/, **lastvissector; typedef struct visplane_s { @@ -568,8 +540,8 @@ typedef struct visplane_s } visplane_t; #define MAXVISPLANES 32 -extern visplane_t * volatile visplanes/*[MAXVISPLANES]*/, * volatile lastvisplane; -extern int * volatile gsortedvisplanes; + +#define NUM_VISPLANES_BUCKETS 32 void R_MarkOpenPlane(visplane_t* pl) ATTR_DATA_CACHE_ALIGN @@ -584,5 +556,56 @@ void R_InitClipBounds(uint32_t *clipbounds) ATTR_DATA_CACHE_ALIGN ; +typedef struct +#ifdef MARS +__attribute__((aligned(16))) +#endif +{ + fixed_t viewx, viewy, viewz; + angle_t viewangle; + fixed_t viewcos, viewsin; + player_t *viewplayer; + VINT lightlevel; + VINT extralight; + VINT displayplayer; + VINT fixedcolormap; + VINT fuzzcolormap; + angle_t clipangle, doubleclipangle; + VINT *viewangletox; + + /* */ + /* walls */ + /* */ + viswall_t * volatile viswalls/*[MAXWALLCMDS] __attribute__((aligned(16)))*/; + viswall_t * volatile lastwallcmd; + viswallextra_t * volatile viswallextras; + + /* */ + /* sprites */ + /* */ + viswall_t * volatile vissprites/*[MAXVISSPRITES]*/, * volatile lastsprite_p, * volatile vissprite_p; + + /* */ + /* subsectors */ + /* */ + sector_t **vissectors/*[MAXVISSSEC]*/, **lastvissector; + + /* */ + /* planes */ + /* */ + visplane_t * volatile visplanes/*[MAXVISPLANES]*/, * volatile lastvisplane; + int * volatile gsortedvisplanes; + visplane_t * volatile * visplanes_hash; + + /* */ + /* openings / misc refresh memory */ + /* */ + unsigned short * volatile openings/*[MAXOPENINGS]*/; + unsigned short * volatile lastopening; + unsigned short * volatile segclip, * volatile lastsegclip; +} viewdef_t; + +extern viewdef_t vd; + #endif /* __R_LOCAL__ */ diff --git a/r_main.c b/r_main.c index a909ff9bd..2d2afd26a 100644 --- a/r_main.c +++ b/r_main.c @@ -40,39 +40,7 @@ short fuzzoffset[FUZZTABLE] = /*===================================== */ -/* */ -/* subsectors */ -/* */ -sector_t **vissectors/*[MAXVISSSEC]*/, **lastvissector; - -/* */ -/* walls */ -/* */ -viswall_t * volatile viswalls/*[MAXWALLCMDS]*/, * volatile lastwallcmd; -viswallextra_t * volatile viswallextras; - -/* */ -/* planes */ -/* */ -visplane_t * volatile visplanes/*[MAXVISPLANES]*/, * volatile lastvisplane; const uint16_t visplane0open[SCREENWIDTH+2] = { 0 }; - -#define NUM_VISPLANES_BUCKETS 32 -static visplane_t * volatile * visplanes_hash; - -int * volatile gsortedvisplanes; - -/* */ -/* sprites */ -/* */ -viswall_t * volatile vissprites/*[MAXVISSPRITES]*/, * volatile lastsprite_p, * volatile vissprite_p; - -/* */ -/* openings / misc refresh memory */ -/* */ -unsigned short * volatile openings/*[MAXOPENINGS]*/, * volatile lastopening; - -unsigned short * volatile segclip, * volatile lastsegclip; /*===================================== */ @@ -666,60 +634,60 @@ static void R_Setup (int displayplayer, visplane_t *visplanes_, vd.fuzzcolormap = (colormapopt ? 12 : 6) * 256; #endif - visplanes = visplanes_; - visplanes[0].flatandlight = 0; + vd.visplanes = visplanes_; + vd.visplanes[0].flatandlight = 0; tempbuf = (unsigned short *)I_WorkBuffer(); /* */ /* plane filling */ /* */ - visplanes[0].open = (uint16_t *)visplane0open + 1; + vd.visplanes[0].open = (uint16_t *)visplane0open + 1; tempbuf = (unsigned short*)(((intptr_t)tempbuf + 3) & ~3); tempbuf += 2; // padding for (i = 1; i < MAXVISPLANES; i++) { - visplanes[i].open = tempbuf; + vd.visplanes[i].open = tempbuf; tempbuf += SCREENWIDTH+2; } - segclip = tempbuf; + vd.segclip = tempbuf; tempbuf += MAXOPENINGS; tempbuf = (unsigned short*)(((intptr_t)tempbuf + 3) & ~3); - viswalls = (void*)tempbuf; - tempbuf += sizeof(*viswalls) * MAXWALLCMDS / sizeof(*tempbuf); + vd.viswalls = (void*)tempbuf; + tempbuf += sizeof(*vd.viswalls) * MAXWALLCMDS / sizeof(*tempbuf); - viswallextras = viswallex_ + 1; + vd.viswallextras = viswallex_ + 1; - openings = tempbuf; + vd.openings = tempbuf; tempbuf += MAXOPENINGS; - vissprites = (void *)viswalls; + vd.vissprites = (void *)vd.viswalls; - lastwallcmd = viswalls; /* no walls added yet */ - lastsegclip = segclip; + vd.lastwallcmd = vd.viswalls; /* no walls added yet */ + vd.lastsegclip = vd.segclip; - lastvisplane = visplanes + 1; /* visplanes[0] is left empty */ - visplanes_hash = visplanes_hash_; + vd.lastvisplane = vd.visplanes + 1; /* visplanes[0] is left empty */ + vd.visplanes_hash = visplanes_hash_; - gsortedvisplanes = NULL; + vd.gsortedvisplanes = NULL; //I_Error("%d", ((uint16_t *)I_FrameBuffer() + 64*1024-0x100 - tempbuf) * 2); /* */ /* clear sprites */ /* */ - vissprite_p = vissprites; - lastsprite_p = vissprite_p; + vd.vissprite_p = vd.vissprites; + vd.lastsprite_p = vd.vissprite_p; - lastopening = openings; + vd.lastopening = vd.openings; - vissectors = vissectors_; - lastvissector = vissectors; /* no subsectors visible yet */ + vd.vissectors = vissectors_; + vd.lastvissector = vd.vissectors; /* no subsectors visible yet */ for (i = 0; i < NUM_VISPLANES_BUCKETS; i++) - visplanes_hash[i] = NULL; + vd.visplanes_hash[i] = NULL; #ifndef MARS phasetime[0] = samplecount; @@ -735,25 +703,10 @@ void Mars_Sec_R_Setup(void) Mars_ClearCacheLines(&vd, (sizeof(vd) + 31) / 16); Mars_ClearCacheLine(&viewportbuffer); - Mars_ClearCacheLine(&viswalls); - Mars_ClearCacheLine(&viswallextras); - Mars_ClearCacheLine(&vissprites); - Mars_ClearCacheLine(&visplanes); - Mars_ClearCacheLine(&lastvisplane); - Mars_ClearCacheLine(&visplanes_hash); - - Mars_ClearCacheLine(&gsortedvisplanes); - - Mars_ClearCacheLine(&segclip); - Mars_ClearCacheLine(&lastsegclip); - - Mars_ClearCacheLine(&openings); - Mars_ClearCacheLine(&lastopening); - - Mars_ClearCacheLines(visplanes, (sizeof(visplane_t)*MAXVISPLANES+31)/16); + Mars_ClearCacheLines(vd.visplanes, (sizeof(visplane_t)*MAXVISPLANES+31)/16); for (i = 0; i < NUM_VISPLANES_BUCKETS; i++) - visplanes_hash[i] = NULL; + vd.visplanes_hash[i] = NULL; } #endif @@ -798,7 +751,7 @@ visplane_t* R_FindPlane(fixed_t height, visplane_t *check, *tail, *next; int hash = R_PlaneHash(height, flatandlight); - tail = visplanes_hash[hash]; + tail = vd.visplanes_hash[hash]; for (check = tail; check; check = next) { next = check->next; @@ -818,12 +771,12 @@ visplane_t* R_FindPlane(fixed_t height, } } - if (lastvisplane == visplanes + MAXVISPLANES) - return visplanes; + if (vd.lastvisplane == vd.visplanes + MAXVISPLANES) + return vd.visplanes; // make a new plane - check = lastvisplane; - ++lastvisplane; + check = vd.lastvisplane; + ++vd.lastvisplane; check->height = height; check->flatandlight = flatandlight; @@ -833,7 +786,7 @@ visplane_t* R_FindPlane(fixed_t height, R_MarkOpenPlane(check); check->next = tail; - visplanes_hash[hash] = check; + vd.visplanes_hash[hash] = check; return check; } @@ -964,15 +917,15 @@ void R_RenderPlayerView(int displayplayer) R_SegCommands(); t_segs = I_GetFRTCounter() - t_segs; - Mars_ClearCacheLine(&lastsegclip); - Mars_ClearCacheLine(&lastopening); + Mars_ClearCacheLine(&vd.lastsegclip); + Mars_ClearCacheLine(&vd.lastopening); - if (lastsegclip - segclip > MAXOPENINGS) - I_Error("lastsegclip > MAXOPENINGS: %d", lastsegclip - segclip); - if (lastopening - openings > MAXOPENINGS) - I_Error("lastopening > MAXOPENINGS: %d", lastopening - openings); - if (lastvissector - vissectors > MAXVISSSEC) - I_Error("lastvissector > MAXVISSSEC: %d", lastvissector - vissectors); + if (vd.lastsegclip - vd.segclip > MAXOPENINGS) + I_Error("lastsegclip > MAXOPENINGS: %d", vd.lastsegclip - vd.segclip); + if (vd.lastopening - vd.openings > MAXOPENINGS) + I_Error("lastopening > MAXOPENINGS: %d", vd.lastopening - vd.openings); + if (vd.lastvissector - vd.vissectors > MAXVISSSEC) + I_Error("lastvissector > MAXVISSSEC: %d", vd.lastvissector - vd.vissectors); t_planes = I_GetFRTCounter(); R_DrawPlanes(); diff --git a/r_phase1.c b/r_phase1.c index 37613ab71..a0c1a0bba 100644 --- a/r_phase1.c +++ b/r_phase1.c @@ -347,7 +347,7 @@ static void R_StoreWallRange(rbspWork_t *rbsp, int start, int stop) viswall_t *rw; viswallextra_t *rwex; int newstop; - int numwalls = lastwallcmd - viswalls; + int numwalls = vd.lastwallcmd - vd.viswalls; const int maxlen = centerX/2; // split long segments int len = stop - start + 1; @@ -359,15 +359,15 @@ static void R_StoreWallRange(rbspWork_t *rbsp, int start, int stop) else newstop = start + maxlen - 1; - rwex = viswallextras + numwalls; + rwex = vd.viswallextras + numwalls; do { - rw = lastwallcmd; + rw = vd.lastwallcmd; rw->seg = rbsp->curline; rw->start = start; rw->stop = newstop; rw->scalestep = rbsp->lineangle1; rw->actionbits = 0; - ++lastwallcmd; + ++vd.lastwallcmd; R_WallEarlyPrep(rw, &rwex->floorheight, &rwex->floornewheight, &rwex->ceilnewheight); @@ -561,9 +561,9 @@ static void R_Subsector(rbspWork_t *rbsp, int num) if(frontsector->validcount != validcount[0]) // not already processed? { frontsector->validcount = validcount[0]; // mark it as processed - if (lastvissector < vissectors + MAXVISSSEC) + if (vd.lastvissector < vd.vissectors + MAXVISSSEC) { - *lastvissector++ = frontsector; + *vd.lastvissector++ = frontsector; } } } diff --git a/r_phase2.c b/r_phase2.c index 4b6e8faab..9d55a83a8 100644 --- a/r_phase2.c +++ b/r_phase2.c @@ -147,12 +147,12 @@ void R_WallLatePrep(viswall_t* wc, vertex_t *verts) int rw_stopx = wc->stop + 1; int width = (rw_stopx - rw_x + 1) / 2; - wc->sil = (byte*)lastopening - rw_x; + wc->sil = (byte*)vd.lastopening - rw_x; if (wc->actionbits & AC_TOPSIL) - lastopening += width; + vd.lastopening += width; if (wc->actionbits & AC_BOTTOMSIL) - lastopening += width; + vd.lastopening += width; } // @@ -188,14 +188,14 @@ static void R_SegLoop(viswall_t* segl, unsigned short* clipbounds, bottomsil = (actionbits & AC_BOTTOMSIL) ? segl->sil : NULL; } - unsigned short *flooropen = (actionbits & AC_ADDFLOOR) ? visplanes[0].open : NULL; - unsigned short *ceilopen = (actionbits & AC_ADDCEILING) ? visplanes[0].open : NULL; + unsigned short *flooropen = (actionbits & AC_ADDFLOOR) ? vd.visplanes[0].open : NULL; + unsigned short *ceilopen = (actionbits & AC_ADDCEILING) ? vd.visplanes[0].open : NULL; unsigned short *newclipbounds = NULL; if (actionbits & (AC_NEWFLOOR | AC_NEWCEILING)) { - newclipbounds = lastsegclip - start; - lastsegclip += width; + newclipbounds = vd.lastsegclip - start; + vd.lastsegclip += width; } const int cyvh = (centerY << 16) | viewportHeight; @@ -318,9 +318,9 @@ void Mars_Sec_R_WallPrep(void) R_InitClipBounds(clipbounds_); - first = viswalls; + first = vd.viswalls; verylast = NULL; - seglex = viswallextras; + seglex = vd.viswallextras; verts = W_GetLumpData(gamemaplump+ML_VERTEXES); for (segl = first; segl != verylast; ) @@ -333,8 +333,8 @@ void Mars_Sec_R_WallPrep(void) // check if master CPU finished exec'ing R_BSP() if (nextsegs == 0xffff) { - Mars_ClearCacheLine(&lastwallcmd); - verylast = lastwallcmd; + Mars_ClearCacheLine(&vd.lastwallcmd); + verylast = vd.lastwallcmd; nextsegs = verylast - first; } @@ -364,7 +364,7 @@ void R_WallPrep(void) R_InitClipBounds(clipbounds_); - for (segl = viswalls; segl != lastwallcmd; segl++) + for (segl = vd.viswalls; segl != vd.lastwallcmd; segl++) { fixed_t floornewheight = 0, ceilingnewheight = 0; diff --git a/r_phase3.c b/r_phase3.c index a30dcd6e9..f3f54cd78 100644 --- a/r_phase3.c +++ b/r_phase3.c @@ -118,11 +118,11 @@ static void R_PrepMobj(mobj_t *thing) return; // get a new vissprite - if(vissprite_p >= vissprites + MAXVISSPRITES - NUMPSPRITES) + if(vd.vissprite_p >= vd.vissprites + MAXVISSPRITES - NUMPSPRITES) return; // too many visible sprites already, leave room for psprites - vis = (vissprite_t *)vissprite_p; - vissprite_p++; + vis = (vissprite_t *)vd.vissprite_p; + vd.vissprite_p++; vis->patchnum = lump; #ifndef MARS @@ -218,11 +218,11 @@ static void R_PrepPSprite(pspdef_t *psp) return; // store information in vissprite - if(vissprite_p == vissprites + MAXVISSPRITES) + if(vd.vissprite_p == vd.vissprites + MAXVISSPRITES) return; // out of vissprites - vis = (vissprite_t *)vissprite_p; - vissprite_p++; + vis = (vissprite_t *)vd.vissprite_p; + vd.vissprite_p++; vis->patchnum = lump; #ifndef MARS @@ -257,11 +257,11 @@ static void R_PrepPSprite(pspdef_t *psp) // void R_SpritePrep(void) { - sector_t **pse = vissectors; + sector_t **pse = vd.vissectors; pspdef_t *psp; int i; - while(pse < lastvissector) + while(pse < vd.lastvissector) { sector_t *se = *pse; mobj_t *thing = se->thinglist; @@ -275,7 +275,7 @@ void R_SpritePrep(void) } // remember end of actor vissprites - lastsprite_p = vissprite_p; + vd.lastsprite_p = vd.vissprite_p; // draw player weapon sprites for(i = 0, psp = vd.viewplayer->psprites; i < NUMPSPRITES; i++, psp++) diff --git a/r_phase6.c b/r_phase6.c index 5e6575feb..f21612b73 100644 --- a/r_phase6.c +++ b/r_phase6.c @@ -272,7 +272,7 @@ void R_SegCommands(void) int extralight; uint32_t clipbounds_[SCREENWIDTH / 2 + 1]; uint16_t *clipbounds = (uint16_t *)clipbounds_; - uint16_t *newclipbounds = segclip; + uint16_t *newclipbounds = vd.segclip; // initialize the clipbounds array R_InitClipBounds(clipbounds_); @@ -286,12 +286,12 @@ void R_SegCommands(void) lseg.lightcoef = 0; lseg.lightsub = 0; - segcount = lastwallcmd - viswalls; + segcount = vd.lastwallcmd - vd.viswalls; for (i = 0; i < segcount; i++) { int j, seglight; unsigned actionbits; - viswall_t* segl = viswalls + i; + viswall_t* segl = vd.viswalls + i; #ifdef MARS while (MARS_SYS_COMM8 <= i) @@ -458,7 +458,7 @@ void Mars_Sec_R_SegCommands(void) { viswall_t *segl; - for (segl = viswalls; segl < lastwallcmd; segl++) + for (segl = vd.viswalls; segl < vd.lastwallcmd; segl++) { if (segl->actionbits & AC_TOPTEXTURE) { diff --git a/r_phase7.c b/r_phase7.c index 87192c5da..849d4db42 100644 --- a/r_phase7.c +++ b/r_phase7.c @@ -260,12 +260,12 @@ static visplane_t *R_GetNextPlane(uint16_t *sortedvisplanes) R_UnlockPln(); #ifdef MARS - if (p + visplanes + 1 >= lastvisplane) + if (p + vd.visplanes + 1 >= vd.lastvisplane) return NULL; - return visplanes + sortedvisplanes[p*2+1]; + return vd.visplanes + sortedvisplanes[p*2+1]; #else - visplane_t *pl = visplanes + p + 1; - return pl == lastvisplane ? NULL : pl; + visplane_t *pl = vd.visplanes + p + 1; + return pl == vd.lastvisplane ? NULL : pl; #endif } @@ -278,12 +278,12 @@ static void R_DrawPlanes2(void) boolean nomips = detailmode < detmode_mipmaps; #ifdef MARS - Mars_ClearCacheLine(&lastvisplane); - Mars_ClearCacheLine(&gsortedvisplanes); - Mars_ClearCacheLines(gsortedvisplanes, ((lastvisplane - visplanes - 1) * sizeof(*gsortedvisplanes) + 31) / 16); + Mars_ClearCacheLine(&vd.lastvisplane); + Mars_ClearCacheLine(&vd.gsortedvisplanes); + Mars_ClearCacheLines(vd.gsortedvisplanes, ((vd.lastvisplane - vd.visplanes - 1) * sizeof(*vd.gsortedvisplanes) + 31) / 16); #endif - if (gsortedvisplanes == NULL) + if (vd.gsortedvisplanes == NULL) return; lpl.x = vd.viewx; @@ -300,7 +300,7 @@ static void R_DrawPlanes2(void) lpl.mapplane = detailmode == detmode_potato ? R_MapPotatoPlane : R_MapPlane; extralight = vd.extralight; - while ((pl = R_GetNextPlane((uint16_t *)gsortedvisplanes)) != NULL) + while ((pl = R_GetNextPlane((uint16_t *)vd.gsortedvisplanes)) != NULL) { unsigned j; int light; @@ -375,14 +375,14 @@ static void Mars_R_SplitPlanes(void) { const int minlen = centerX; const int maxlen = centerX * 2; - visplane_t *pl, *last = lastvisplane; + visplane_t *pl, *last = vd.lastvisplane; int numplanes; - numplanes = lastvisplane - visplanes; + numplanes = vd.lastvisplane - vd.visplanes; if (numplanes >= MAXVISPLANES) return; - for (pl = visplanes + 1; pl < last; pl++) + for (pl = vd.visplanes + 1; pl < last; pl++) { int start, stop; visplane_t* newpl; @@ -407,7 +407,7 @@ static void Mars_R_SplitPlanes(void) if (newstop > stop || numplanes == MAXVISPLANES - 1) newstop = stop; - newpl = lastvisplane++; + newpl = vd.lastvisplane++; newpl->open = pl->open; newpl->height = pl->height; newpl->flatandlight = pl->flatandlight; @@ -430,11 +430,11 @@ static void Mars_R_SortPlanes(void) { int i, numplanes; visplane_t* pl; - uint16_t *sortbuf = (uint16_t *)gsortedvisplanes; + uint16_t *sortbuf = (uint16_t *)vd.gsortedvisplanes; i = 0; numplanes = 0; - for (pl = visplanes + 1; pl < lastvisplane; pl++) + for (pl = vd.visplanes + 1; pl < vd.lastvisplane; pl++) { // composite sort key: 1b - sign bit, 3b - reverse span length, 12b - flat+light // to minimize pipeline stalls, the larger planes must be drawn first, hence length inversion @@ -443,25 +443,25 @@ static void Mars_R_SortPlanes(void) i += 2; } - D_isort(gsortedvisplanes, numplanes); + D_isort(vd.gsortedvisplanes, numplanes); } static void R_PreDrawPlanes(void) { int numplanes; - Mars_ClearCacheLine(&lastvisplane); - Mars_ClearCacheLine(&gsortedvisplanes); + Mars_ClearCacheLine(&vd.lastvisplane); + Mars_ClearCacheLine(&vd.gsortedvisplanes); // check to see if we still need to fill the sorted planes list - numplanes = lastvisplane - visplanes; // visplane 0 is a dummy plane + numplanes = vd.lastvisplane - vd.visplanes; // visplane 0 is a dummy plane if (numplanes > 1) { - Mars_ClearCacheLines(visplanes, (numplanes * sizeof(visplane_t) + 31) / 16); + Mars_ClearCacheLines(vd.visplanes, (numplanes * sizeof(visplane_t) + 31) / 16); - if (gsortedvisplanes == NULL) + if (vd.gsortedvisplanes == NULL) { - gsortedvisplanes = (int *)viswallextras; + vd.gsortedvisplanes = (int *)vd.viswallextras; Mars_R_SplitPlanes(); diff --git a/r_phase8.c b/r_phase8.c index 5933a3fff..d9768a676 100644 --- a/r_phase8.c +++ b/r_phase8.c @@ -187,7 +187,7 @@ void R_ClipVisSprite(vissprite_t *vis, unsigned short *spropening, int sprscreen { int width; - ds = viswalls + *walls++; + ds = vd.viswalls + *walls++; silhouette = (ds->actionbits & (AC_TOPSIL | AC_BOTTOMSIL | AC_SOLIDSIL)); @@ -282,8 +282,8 @@ static void R_DrawSortedSprites(int *fuzzpos, int* sortedsprites, int sprscreenh // compile the list of walls that clip sprites for this side part of the screen pwalls = walls; - ds = lastwallcmd; - if (ds == viswalls) + ds = vd.lastwallcmd; + if (ds == vd.viswalls) return; do { @@ -293,8 +293,8 @@ static void R_DrawSortedSprites(int *fuzzpos, int* sortedsprites, int sprscreenh !(ds->actionbits & (AC_TOPSIL | AC_BOTTOMSIL | AC_SOLIDSIL))) // does not clip sprites continue; - *pwalls++ = ds - viswalls; - } while (ds != viswalls); + *pwalls++ = ds - vd.viswalls; + } while (ds != vd.viswalls); if (pwalls == walls) return; @@ -305,7 +305,7 @@ static void R_DrawSortedSprites(int *fuzzpos, int* sortedsprites, int sprscreenh { vissprite_t* ds; - ds = (vissprite_t *)(vissprites + (sortedsprites[i] & 0x7f)); + ds = (vissprite_t *)(vd.vissprites + (sortedsprites[i] & 0x7f)); R_ClipVisSprite(ds, spropening, sprscreenhalf, walls); R_DrawVisSprite(ds, spropening, fuzzpos, sprscreenhalf); @@ -320,7 +320,7 @@ static void R_DrawPSprites(int *fuzzpos, int sprscreenhalf) unsigned vhplus1 = viewportHeight + 1; // draw psprites - for (spr = lastsprite_p; spr < vissprite_p; spr++) + for (spr = vd.lastsprite_p; spr < vd.vissprite_p; spr++) { vissprite_t *vis = (vissprite_t *)spr; unsigned stopx = vis->x2 + 1; @@ -343,9 +343,9 @@ static void R_DrawPSprites(int *fuzzpos, int sprscreenhalf) #ifdef MARS void Mars_Sec_R_DrawSprites(int sprscreenhalf, int *sortedsprites) { - Mars_ClearCacheLine(&vissprites); - Mars_ClearCacheLine(&lastsprite_p); - Mars_ClearCacheLine(&vissprite_p); + Mars_ClearCacheLine(&vd.vissprites); + Mars_ClearCacheLine(&vd.lastsprite_p); + Mars_ClearCacheLine(&vd.vissprite_p); // mobj sprites //Mars_ClearCacheLines(sortedsprites, ((lastsprite_p - vissprites + 1) * sizeof(*sortedsprites) + 31) / 16); @@ -366,13 +366,13 @@ void R_Sprites(void) int half, sortedcount; unsigned midcount; viswall_t *spr; - int *sortedsprites = (void *)vissectors; + int *sortedsprites = (void *)vd.vissectors; int *gsortedsprites; viswall_t *wc; vertex_t *verts; sortedcount = 0; - count = lastsprite_p - vissprites; + count = vd.lastsprite_p - vd.vissprites; if (count > MAXVISSPRITES) count = MAXVISSPRITES; @@ -384,7 +384,7 @@ void R_Sprites(void) midcount = 0; for (i = 0; i < count; i++) { - vissprite_t* ds = (vissprite_t *)(vissprites + i); + vissprite_t* ds = (vissprite_t *)(vd.vissprites + i); if (ds->patchnum < 0) continue; if (ds->x1 > ds->x2) @@ -404,7 +404,7 @@ void R_Sprites(void) } // add the gun midpoint - for (spr = lastsprite_p; spr < vissprite_p; spr++) { + for (spr = vd.lastsprite_p; spr < vd.vissprite_p; spr++) { vissprite_t *pspr = (vissprite_t *)spr; unsigned xscale; unsigned pixcount = pspr->x2 + 1 - pspr->x1; @@ -436,7 +436,7 @@ void R_Sprites(void) verts = vertexes; #endif - for (wc = viswalls; wc < lastwallcmd; wc++) + for (wc = vd.viswalls; wc < vd.lastwallcmd; wc++) { if (wc->actionbits & (AC_TOPSIL | AC_BOTTOMSIL | AC_SOLIDSIL)) { @@ -448,7 +448,7 @@ void R_Sprites(void) #ifdef MARS // re-use the openings array in VRAM - gsortedsprites = (int*)(((intptr_t)segclip + 3) & ~3); + gsortedsprites = (int*)(((intptr_t)vd.segclip + 3) & ~3); for (i = 0; i < sortedcount+1; i++) gsortedsprites[i] = sortedsprites[i]; #endif diff --git a/r_phase9.c b/r_phase9.c index a0ccaf7e0..0b71313c2 100644 --- a/r_phase9.c +++ b/r_phase9.c @@ -27,7 +27,7 @@ static void R_UpdateCache(void) minplanemip = 0; maxplanemip = 0; - for (wall = viswalls; wall < lastwallcmd; wall++) + for (wall = vd.viswalls; wall < vd.lastwallcmd; wall++) { int minmip = wall->miplevels[0], maxmip = wall->miplevels[1];