vdp, add handling of external buffers for fast renderer

This commit is contained in:
kub 2020-12-12 14:36:54 +01:00
parent 7e382f5403
commit 207e5ba0ee
3 changed files with 17 additions and 6 deletions

View file

@ -1855,9 +1855,6 @@ PICO_INTERNAL void PicoFrameStart(void)
Pico.m.dirtyPal = (dirty ? 2 : 0); // mark as dirty but already copied
blockcpy(Pico.est.SonicPal, PicoMem.cram, 0x40*2);
}
if (PicoIn.opt & POPT_ALT_RENDERER)
return;
}
static void DrawBlankedLine(int line, int offs, int sh, int bgc)
@ -1974,10 +1971,12 @@ void PicoDrawUpdateHighPal(void)
void PicoDrawSetOutFormat(pdso_t which, int use_32x_line_mode)
{
PicoDrawSetInternalBuf(NULL, 0);
PicoDraw2SetOutBuf(NULL);
switch (which)
{
case PDF_8BIT:
FinalizeLine = FinalizeLine8bit;
PicoDrawSetInternalBuf(Pico.est.Draw2FB, 328);
break;
case PDF_RGB555:
@ -1989,13 +1988,13 @@ void PicoDrawSetOutFormat(pdso_t which, int use_32x_line_mode)
default:
FinalizeLine = NULL;
PicoDrawSetOutBufMD(Pico.est.Draw2FB+8, 328);
break;
}
if (PicoIn.AHW & PAHW_32X)
PicoDrawSetOutFormat32x(which, use_32x_line_mode);
PicoDrawSetOutputMode4(which);
rendstatus_old = -1;
Pico.m.dirtyPal = 1;
}
void PicoDrawSetOutBufMD(void *dest, int increment)
@ -2004,7 +2003,10 @@ void PicoDrawSetOutBufMD(void *dest, int increment)
// kludge for no-copy mode
PicoDrawSetInternalBuf(dest, increment);
}
if (dest != NULL) {
if (FinalizeLine == NULL)
PicoDraw2SetOutBuf(dest);
else if (dest != NULL) {
DrawLineDestBase = dest;
DrawLineDestIncrement = increment;
Pico.est.DrawLineDest = (char *)DrawLineDestBase + Pico.est.DrawScanline * increment;

View file

@ -692,7 +692,15 @@ PICO_INTERNAL void PicoFrameFull()
pprof_end(draw);
}
void PicoDraw2SetOutBuf(void *dest)
{
if (dest)
Pico.est.Draw2FB = dest;
else
Pico.est.Draw2FB = PicoDraw2FB_;
}
void PicoDraw2Init(void)
{
Pico.est.Draw2FB = PicoDraw2FB_;
PicoDraw2SetOutBuf(NULL);
}

View file

@ -674,6 +674,7 @@ extern int DrawLineDestIncrement;
extern unsigned int VdpSATCache[128];
// draw2.c
void PicoDraw2SetOutBuf(void *dest);
void PicoDraw2Init(void);
PICO_INTERNAL void PicoFrameFull();