32x renderer, fix for render buffers with pitch != line width, some speedup

This commit is contained in:
kub 2021-01-13 23:27:11 +01:00
parent 1dee74458b
commit aa97a0a01f
3 changed files with 14 additions and 10 deletions

View file

@ -179,6 +179,7 @@ static void do_loop_dc##name(unsigned short *dst, \
p32x = dram + dram[l]; \ p32x = dram + dram[l]; \
do_line_dc(dst, p32x, pmd, inv_bit, md_code); \ do_line_dc(dst, p32x, pmd, inv_bit, md_code); \
post_code; \ post_code; \
dst += DrawLineDestIncrement32x/2 - 320; \
} \ } \
} \ } \
\ \
@ -200,6 +201,7 @@ static void do_loop_pp##name(unsigned short *dst, \
p32x += (lines_sft_offs >> 8) & 1; \ p32x += (lines_sft_offs >> 8) & 1; \
do_line_pp(dst, p32x, pmd, md_code); \ do_line_pp(dst, p32x, pmd, md_code); \
post_code; \ post_code; \
dst += DrawLineDestIncrement32x/2 - 320; \
} \ } \
} \ } \
\ \
@ -220,6 +222,7 @@ static void do_loop_rl##name(unsigned short *dst, \
p32x = dram + dram[l]; \ p32x = dram + dram[l]; \
do_line_rl(dst, p32x, pmd, md_code); \ do_line_rl(dst, p32x, pmd, md_code); \
post_code; \ post_code; \
dst += DrawLineDestIncrement32x/2 - 320; \
} \ } \
} }
@ -337,7 +340,7 @@ void PicoDrawSetOutFormat32x(pdso_t which, int use_32x_line_mode)
if (which == PDF_RGB555) { if (which == PDF_RGB555) {
// need CLUT pixels in PicoDraw2FB for layer transparency // need CLUT pixels in PicoDraw2FB for layer transparency
PicoDrawSetInternalBuf(Pico.est.Draw2FB, 328); PicoDrawSetInternalBuf(Pico.est.Draw2FB, 328);
PicoDrawSetOutBufMD(DrawLineDestBase32x, DrawLineDestIncrement32x); PicoDrawSetOutBufMD(NULL, 0);
} else { } else {
// use the same layout as alt renderer // use the same layout as alt renderer
PicoDrawSetInternalBuf(NULL, 0); PicoDrawSetInternalBuf(NULL, 0);

View file

@ -1635,6 +1635,9 @@ void FinalizeLine555(int sh, int line, struct PicoEState *est)
unsigned short *pal=est->HighPal; unsigned short *pal=est->HighPal;
int len; int len;
if (DrawLineDestIncrement == 0)
return;
PicoDrawUpdateHighPal(); PicoDrawUpdateHighPal();
if (Pico.video.reg[12]&1) { if (Pico.video.reg[12]&1) {
@ -1693,7 +1696,7 @@ static void FinalizeLine8bit(int sh, int line, struct PicoEState *est)
len = 256; len = 256;
} }
if (DrawLineDestBase == HighColBase) { if (DrawLineDestIncrement == 0) {
if (!sh && (est->rendstatus & PDRAW_SONIC_MODE)) if (!sh && (est->rendstatus & PDRAW_SONIC_MODE))
blockcpy_or(pd+8, est->HighCol+8, len, est->SonicPalCount*0x40); blockcpy_or(pd+8, est->HighCol+8, len, est->SonicPalCount*0x40);
} else if (!sh && (est->rendstatus & PDRAW_SONIC_MODE)) { } else if (!sh && (est->rendstatus & PDRAW_SONIC_MODE)) {
@ -1980,6 +1983,7 @@ void PicoDrawUpdateHighPal(void)
void PicoDrawSetOutFormat(pdso_t which, int use_32x_line_mode) void PicoDrawSetOutFormat(pdso_t which, int use_32x_line_mode)
{ {
PicoDrawSetInternalBuf(NULL, 0); PicoDrawSetInternalBuf(NULL, 0);
PicoDrawSetOutBufMD(NULL, 0);
PicoDraw2SetOutBuf(NULL); PicoDraw2SetOutBuf(NULL);
switch (which) switch (which)
{ {
@ -2009,18 +2013,15 @@ void PicoDrawSetOutFormat(pdso_t which, int use_32x_line_mode)
void PicoDrawSetOutBufMD(void *dest, int increment) void PicoDrawSetOutBufMD(void *dest, int increment)
{ {
if (FinalizeLine == FinalizeLine8bit && increment >= 328) { if (FinalizeLine == FinalizeLine8bit && increment >= 328) {
// kludge for no-copy mode // kludge for no-copy mode, using ALT_RENDERER layout
PicoDrawSetInternalBuf(dest, increment); PicoDrawSetInternalBuf(dest, increment);
} } else if (FinalizeLine == NULL) {
if (FinalizeLine == NULL)
PicoDraw2SetOutBuf(dest); PicoDraw2SetOutBuf(dest);
else if (dest != NULL) { } else if (dest != NULL) {
DrawLineDestBase = dest; DrawLineDestBase = dest;
DrawLineDestIncrement = increment; DrawLineDestIncrement = increment;
Pico.est.DrawLineDest = (char *)DrawLineDestBase + Pico.est.DrawScanline * increment; Pico.est.DrawLineDest = (char *)DrawLineDestBase + Pico.est.DrawScanline * increment;
} } else {
else {
DrawLineDestBase = DefOutBuff; DrawLineDestBase = DefOutBuff;
DrawLineDestIncrement = 0; DrawLineDestIncrement = 0;
Pico.est.DrawLineDest = DefOutBuff; Pico.est.DrawLineDest = DefOutBuff;

View file

@ -366,7 +366,7 @@ static void FinalizeLine8bitM4(int line)
{ {
unsigned char *pd = Pico.est.DrawLineDest; unsigned char *pd = Pico.est.DrawLineDest;
if (HighColBase != DrawLineDestBase) if (DrawLineDestIncrement)
memcpy(pd + line_offset, Pico.est.HighCol + line_offset + 8, 256); memcpy(pd + line_offset, Pico.est.HighCol + line_offset + 8, 256);
} }