mirror of
https://github.com/RaySollium99/libpicofe.git
synced 2025-09-05 06:47:45 -04:00
accurate_sprites performance improvement, PSP is untested
git-svn-id: file:///home/notaz/opt/svn/PicoDrive/platform@478 be3aeb3a-fb24-0410-a615-afba39da0efa
This commit is contained in:
parent
6850f9ec3b
commit
b13a934cb8
2 changed files with 44 additions and 18 deletions
29
psp/emu.c
29
psp/emu.c
|
@ -162,6 +162,9 @@ void emu_setDefaultConfig(void)
|
|||
|
||||
|
||||
extern void amips_clut(unsigned short *dst, unsigned char *src, unsigned short *pal, int count);
|
||||
extern void amips_clut_6bit(unsigned short *dst, unsigned char *src, unsigned short *pal, int count);
|
||||
|
||||
extern void (*amips_clut_f)(unsigned short *dst, unsigned char *src, unsigned short *pal, int count) = NULL;
|
||||
|
||||
struct Vertex
|
||||
{
|
||||
|
@ -235,7 +238,7 @@ static void set_scaling_params(void)
|
|||
*/
|
||||
}
|
||||
|
||||
static void do_pal_update(int allow_sh)
|
||||
static void do_pal_update(int allow_sh, int allow_as)
|
||||
{
|
||||
unsigned int *dpal=(void *)localPal;
|
||||
int i;
|
||||
|
@ -244,6 +247,9 @@ static void do_pal_update(int allow_sh)
|
|||
// dpal[i] = ((spal[i]&0x000f000f)<< 1)|((spal[i]&0x00f000f0)<<3)|((spal[i]&0x0f000f00)<<4);
|
||||
do_pal_convert(localPal, Pico.cram, currentConfig.gamma, currentConfig.gamma2);
|
||||
|
||||
Pico.m.dirtyPal = 0;
|
||||
need_pal_upload = 1;
|
||||
|
||||
if (allow_sh && (Pico.video.reg[0xC]&8)) // shadow/hilight?
|
||||
{
|
||||
// shadowed pixels
|
||||
|
@ -260,8 +266,12 @@ static void do_pal_update(int allow_sh)
|
|||
}
|
||||
localPal[0xe0] = 0;
|
||||
}
|
||||
Pico.m.dirtyPal = 0;
|
||||
need_pal_upload = 1;
|
||||
else if (allow_as && (rendstatus & PDRAW_ACC_SPRITES))
|
||||
{
|
||||
memcpy32(localPal+0x40, localPal, 0x40);
|
||||
memcpy32(localPal+0x80, localPal, 0x40);
|
||||
memcpy32(localPal+0xc0, localPal, 0x40);
|
||||
}
|
||||
}
|
||||
|
||||
static void do_slowmode_lines(int line_to)
|
||||
|
@ -272,7 +282,7 @@ static void do_slowmode_lines(int line_to)
|
|||
if (!(Pico.video.reg[1]&8)) { line = 8; dst += 512*8; src += 512*8; }
|
||||
|
||||
for (; line < line_to; line++, dst+=512, src+=512)
|
||||
amips_clut(dst, src, localPal, line_len);
|
||||
amips_clut_f(dst, src, localPal, line_len);
|
||||
}
|
||||
|
||||
static void EmuScanPrepare(void)
|
||||
|
@ -282,7 +292,10 @@ static void EmuScanPrepare(void)
|
|||
|
||||
dynamic_palette = 0;
|
||||
if (Pico.m.dirtyPal)
|
||||
do_pal_update(1);
|
||||
do_pal_update(1, 1);
|
||||
if ((rendstatus & PDRAW_ACC_SPRITES) && !(Pico.video.reg[0xC]&8))
|
||||
amips_clut_f = amips_clut_6bit;
|
||||
else amips_clut_f = amips_clut;
|
||||
}
|
||||
|
||||
static int EmuScanSlowBegin(unsigned int num)
|
||||
|
@ -304,13 +317,13 @@ static int EmuScanSlowEnd(unsigned int num)
|
|||
do_slowmode_lines(num);
|
||||
dynamic_palette = 1;
|
||||
}
|
||||
do_pal_update(1);
|
||||
do_pal_update(1, 0);
|
||||
}
|
||||
|
||||
if (dynamic_palette) {
|
||||
int line_len = (Pico.video.reg[12]&1) ? 320 : 256;
|
||||
void *dst = (char *)VRAM_STUFF + 512*240 + 512*2*num;
|
||||
amips_clut(dst, HighCol + 8, localPal, line_len);
|
||||
amips_clut_f(dst, HighCol + 8, localPal, line_len);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@ -344,7 +357,7 @@ static void blitscreen_clut(void)
|
|||
}
|
||||
|
||||
if ((PicoOpt&0x10) && Pico.m.dirtyPal)
|
||||
do_pal_update(0);
|
||||
do_pal_update(0, 0);
|
||||
|
||||
sceKernelDcacheWritebackAll();
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue