cleanup more misc stuff

This commit is contained in:
Jaklyy 2024-04-24 00:27:50 -04:00
parent 896df08c5c
commit 57e590269f
2 changed files with 22 additions and 26 deletions

View File

@ -348,7 +348,7 @@ public:
static constexpr int DelayBetweenReads = 809 * TimingFrac; static constexpr int DelayBetweenReads = 809 * TimingFrac;
static constexpr int ScanlineReadSpeed = 256 * TimingFrac; static constexpr int ScanlineReadSpeed = 256 * TimingFrac;
static constexpr int ScanlineReadInc = DelayBetweenReads + ScanlineReadSpeed; static constexpr int ScanlineReadInc = DelayBetweenReads + ScanlineReadSpeed;
static constexpr int InitGPU2DTimeout = 51875 * TimingFrac; // 51618? 51874? 52128? | when it finishes reading the first scanline. static constexpr int InitGPU2DTimeout = (51875+565) * TimingFrac; // 51618? 51874? 52128? | when it finishes reading the first scanline.
static constexpr int FrameLength = ScanlineReadInc * 263; // how long the entire frame is. TODO: Verify if we actually need this? static constexpr int FrameLength = ScanlineReadInc * 263; // how long the entire frame is. TODO: Verify if we actually need this?
// compile-time list of scanline read times // compile-time list of scanline read times
@ -363,8 +363,7 @@ public:
return readtime; return readtime;
}(); }();
static constexpr int Arbitrary = 565; // extra value after the scanline is read at which the cutoff of a scanline should be...? static constexpr int PreReadCutoff = 565; // time before a read that a scanline is cutoff.
// idk why this is needed. im probably doing something wrong.
// the point at which rdlines decrements. not sure why it's different...? // the point at which rdlines decrements. not sure why it's different...?
static constexpr std::array<u32, 192> RDDecrement = []() constexpr { static constexpr std::array<u32, 192> RDDecrement = []() constexpr {
@ -372,7 +371,7 @@ public:
for (int i = 0; i < 192; i++) for (int i = 0; i < 192; i++)
{ {
dec[i] = SLRead[i] + Arbitrary - 39 - (!(i % 2)); dec[i] = SLRead[i] - 39 - (!(i % 2));
} }
return dec; return dec;
}(); }();
@ -400,9 +399,6 @@ public:
// GPU 3D Rasterization Timings III, For First Polygon "Pre-Calc" Timings // GPU 3D Rasterization Timings III, For First Polygon "Pre-Calc" Timings
// should be added before other timings, as these are "async" pre-calcs of polygon attributes // should be added before other timings, as these are "async" pre-calcs of polygon attributes
static constexpr int FirstPerSlope = 1 * TimingFrac; // 1 | for each "slope" the first polygon has in this scanline increment it by 1.
// (see DoTimingsSlopes() in GPU3D_Soft.cpp for more info)
static constexpr int FirstNull = 1 * TimingFrac; // 1 | if the first polygon is "null" (probably wrong?)
static constexpr int FirstPolyDelay = 4 * TimingFrac; // 4 | Min amount of cycles to begin a scanline? (minimum time it takes to init the first polygon?) static constexpr int FirstPolyDelay = 4 * TimingFrac; // 4 | Min amount of cycles to begin a scanline? (minimum time it takes to init the first polygon?)
// (Amount of time before the end of the cycle a scanline must abort?) // (Amount of time before the end of the cycle a scanline must abort?)

View File

@ -193,15 +193,15 @@ void SoftRenderer::FindFirstPolyDoTimings(int npolys, s32 y, int* firstpolyeven,
{ {
fixeddelay = true; fixeddelay = true;
break; break;
if (y == polygon->YBottom) break; /*if (y == polygon->YBottom) break;
if (y == polygon->YTop) {perslope = true; break;} if (y == polygon->YTop) {perslope = true; break;}
/*else if ((y == polygon->Vertices[rp->NextVL]->FinalPosition[1] || y == polygon->Vertices[rp->CurVL]->FinalPosition[1]) || else if ((y == polygon->Vertices[rp->NextVL]->FinalPosition[1] || y == polygon->Vertices[rp->CurVL]->FinalPosition[1]) ||
(y == polygon->Vertices[rp->NextVR]->FinalPosition[1] || y == polygon->Vertices[rp->CurVR]->FinalPosition[1])) (y == polygon->Vertices[rp->NextVR]->FinalPosition[1] || y == polygon->Vertices[rp->CurVR]->FinalPosition[1]))
{ {
perslope = true; perslope = true;
} }
else */etc = true; else etc = true;
break; break;*/
} }
} }
@ -215,21 +215,21 @@ void SoftRenderer::FindFirstPolyDoTimings(int npolys, s32 y, int* firstpolyeven,
{ {
fixeddelay = true; fixeddelay = true;
break; break;
if (y == polygon->YBottom) break; /*if (y == polygon->YBottom) break;
if (y == polygon->YTop) {perslope = true; break;} if (y == polygon->YTop) {perslope = true; break;}
/*else if ((y == polygon->Vertices[rp->NextVL]->FinalPosition[1] || y == polygon->Vertices[rp->CurVL]->FinalPosition[1]) || else if ((y == polygon->Vertices[rp->NextVL]->FinalPosition[1] || y == polygon->Vertices[rp->CurVL]->FinalPosition[1]) ||
(y == polygon->Vertices[rp->NextVR]->FinalPosition[1] || y == polygon->Vertices[rp->CurVR]->FinalPosition[1])) (y == polygon->Vertices[rp->NextVR]->FinalPosition[1] || y == polygon->Vertices[rp->CurVR]->FinalPosition[1]))
{ {
perslope = true; perslope = true;
} }
else */etc = true; else etc = true;
break; break;*/
} }
} }
*timingcountereven = fixeddelay*FirstPolyDelay;// + perslope*FirstPerSlope + etc*2; *timingcountereven = fixeddelay ? FirstPolyDelay : 0;// + perslope*FirstPerSlope + etc*2;
*timingcounterodd = fixeddelay*FirstPolyDelay;// + perslope*FirstPerSlope + etc*2; *timingcounterodd = fixeddelay ? FirstPolyDelay : 0;// + perslope*FirstPerSlope + etc*2;
if (!perslope) /*if (!perslope)
{ {
*timingcountereven += etc*2;// + perslope*FirstPerSlope + etc*2; *timingcountereven += etc*2;// + perslope*FirstPerSlope + etc*2;
*timingcounterodd += etc*2;// + perslope*FirstPerSlope + etc*2; *timingcounterodd += etc*2;// + perslope*FirstPerSlope + etc*2;
@ -238,7 +238,7 @@ void SoftRenderer::FindFirstPolyDoTimings(int npolys, s32 y, int* firstpolyeven,
{ {
*timingcountereven += perslope*FirstPerSlope;// + perslope*FirstPerSlope + etc*2; *timingcountereven += perslope*FirstPerSlope;// + perslope*FirstPerSlope + etc*2;
*timingcounterodd += perslope*FirstPerSlope;// + perslope*FirstPerSlope + etc*2; *timingcounterodd += perslope*FirstPerSlope;// + perslope*FirstPerSlope + etc*2;
} }*/
} }
void SoftRenderer::TextureLookup(const GPU& gpu, u32 texparam, u32 texpal, s16 s, s16 t, u16* color, u8* alpha) const void SoftRenderer::TextureLookup(const GPU& gpu, u32 texparam, u32 texpal, s16 s, s16 t, u16* color, u8* alpha) const
@ -1912,13 +1912,13 @@ void SoftRenderer::RenderPolygonsFast(GPU& gpu, Polygon** polygons, int npolys)
#define SCANLINE_BUFFER_SIM\ #define SCANLINE_BUFFER_SIM\
/* simulate the process of scanlines being read from the 48 scanline buffer */\ /* simulate the process of scanlines being read from the 48 scanline buffer */\
while (scanlineswaiting >= 47 || RasterTiming >= SLRead[nextread] + Arbitrary)\ while (scanlineswaiting >= 47 || RasterTiming >= SLRead[nextread])\
{\ {\
if (RasterTiming < SLRead[nextread] + Arbitrary) /* why + 565? */\ if (RasterTiming < SLRead[nextread])\
{\ {\
timespent = (SLRead[nextread] + Arbitrary) - RasterTiming;\ timespent = SLRead[nextread] - RasterTiming;\
timespent += EMFixNum; /* fixes edge marking bug emulation. not sure why this is needed? */\ timespent += EMFixNum; /* fixes edge marking bug emulation. not sure why this is needed? */\
RasterTiming = (SLRead[nextread] + Arbitrary);\ RasterTiming = SLRead[nextread];\
}\ }\
scanlineswaiting--;\ scanlineswaiting--;\
nextread++;\ nextread++;\
@ -1926,7 +1926,7 @@ void SoftRenderer::RenderPolygonsFast(GPU& gpu, Polygon** polygons, int npolys)
#define RENDER_SCANLINES(y)\ #define RENDER_SCANLINES(y)\
/* update sl timeout */\ /* update sl timeout */\
ScanlineTimeout = SLRead[y-1] - FinalPassLen;\ ScanlineTimeout = SLRead[y-1] - (PreReadCutoff+FinalPassLen);\
\ \
FindFirstPolyDoTimings(j, y, &firstpolyeven, &firstpolyodd, &rastertimingeven, &rastertimingodd);\ FindFirstPolyDoTimings(j, y, &firstpolyeven, &firstpolyodd, &rastertimingeven, &rastertimingodd);\
RenderScanline<true>(gpu, y, firstpolyeven, j, &rastertimingeven);\ RenderScanline<true>(gpu, y, firstpolyeven, j, &rastertimingeven);\
@ -1951,7 +1951,7 @@ void SoftRenderer::RenderPolygonsTiming(GPU& gpu, Polygon** polygons, int npolys
// reset scanline trackers // reset scanline trackers
gpu.GPU3D.UnderflowFlagVCount = -1; gpu.GPU3D.UnderflowFlagVCount = -1;
gpu.GPU3D.RDLinesTemp = 63; gpu.GPU3D.RDLinesTemp = 63;
ScanlineTimeout = 0x7FFFFFFF; // CHECKME: first scanline pair timeout. ScanlineTimeout = SLRead[2] - (PreReadCutoff+FinalPassLen+4); // TEMP: should be infinity, but i dont want it to break due to not being set up to handle this properly. //0x7FFFFFFF; // CHECKME: first scanline pair timeout.
s32 rastertimingeven, rastertimingodd; // always init to 0 at the start of a scanline render s32 rastertimingeven, rastertimingodd; // always init to 0 at the start of a scanline render
s32 scanlineswaiting = 0, slwaitingrd = 0; s32 scanlineswaiting = 0, slwaitingrd = 0;
s32 nextread = 0, nextreadrd = 0; s32 nextread = 0, nextreadrd = 0;
@ -1966,7 +1966,7 @@ void SoftRenderer::RenderPolygonsTiming(GPU& gpu, Polygon** polygons, int npolys
// it can't proceed to the next scanline unless all others steps are done (both scanlines in the pair, and final pass) // it can't proceed to the next scanline unless all others steps are done (both scanlines in the pair, and final pass)
RasterTiming = timespent = std::max(std::initializer_list<s32> {rastertimingeven, rastertimingodd, FinalPassLen}); RasterTiming = timespent = std::max(std::initializer_list<s32> {rastertimingeven, rastertimingodd, FinalPassLen});
// 12 cycles at the end of a "timeout" are always used for w/e reason // 12 cycles at the end of a "timeout" are always used for w/e reason
RasterTiming += std::clamp(ScanlineTimeout - RasterTiming, 0, 12); RasterTiming += std::clamp(ScanlineTimeout - RasterTiming, 0, 12); // should probably just be += 12 tbh but i'll leave it for now
// if first pair was not delayed past the first read, then later scanlines cannot either // if first pair was not delayed past the first read, then later scanlines cannot either
// this allows us to implement a fast path // this allows us to implement a fast path