1
0
mirror of https://github.com/libretro/RetroArch synced 2025-04-01 13:20:43 +00:00

Simplify logic for transparencies

This commit is contained in:
Francisco Javier Trujillo Mata 2021-08-16 12:30:15 +02:00
parent a6f44ab642
commit a442c5b14f

@ -66,32 +66,6 @@ static int vsync_handler()
return 0;
}
// Copy of gsKit_sync_flip, but without the 'flip'
static void gsKit_sync(GSGLOBAL *gsGlobal)
{
if(!gsGlobal->FirstFrame)
WaitSema(vsync_sema_id);
while (PollSema(vsync_sema_id) >= 0);
}
static void gsKit_flip(GSGLOBAL *gsGlobal)
{
if(!gsGlobal->FirstFrame)
{
if(gsGlobal->DoubleBuffering == GS_SETTING_ON)
{
GS_SET_DISPFB2( gsGlobal->ScreenBuffer[gsGlobal->ActiveBuffer & 1] / 8192,
gsGlobal->Width / 64, gsGlobal->PSM, 0, 0 );
gsGlobal->ActiveBuffer ^= 1;
}
}
gsKit_setactive(gsGlobal);
}
static GSGLOBAL *init_GSGlobal(void)
{
ee_sema_t sema;
@ -100,12 +74,6 @@ static GSGLOBAL *init_GSGlobal(void)
sema.option = 0;
vsync_sema_id = CreateSema(&sema);
dmaKit_init(D_CTRL_RELE_OFF,D_CTRL_MFD_OFF, D_CTRL_STS_UNSPEC,
D_CTRL_STD_OFF, D_CTRL_RCYC_8, 1 << DMA_CHANNEL_GIF);
/* Initialize the DMAC */
dmaKit_chan_init(DMA_CHANNEL_GIF);
GSGLOBAL *gsGlobal = gsKit_init_global();
gsGlobal->Mode = GS_MODE_NTSC;
@ -113,15 +81,18 @@ static GSGLOBAL *init_GSGlobal(void)
gsGlobal->Field = GS_FIELD;
gsGlobal->Width = NTSC_WIDTH;
gsGlobal->Height = NTSC_HEIGHT;
gsGlobal->PSM = GS_PSM_CT32;
gsGlobal->PSMZ = GS_PSMZ_16S;
gsGlobal->DoubleBuffering = GS_SETTING_ON;
gsGlobal->ZBuffering = GS_SETTING_OFF;
gsGlobal->Dithering = GS_SETTING_ON;
gsGlobal->Test->ATST = 7; // NOTEQUAL to AREF passes
gsGlobal->Test->AREF = 0x00;
gsGlobal->Test->AFAIL = 0; // KEEP
gsGlobal->PSM = GS_PSM_CT16;
gsGlobal->PSMZ = GS_PSMZ_16;
gsGlobal->DoubleBuffering = GS_SETTING_OFF;
gsGlobal->ZBuffering = GS_SETTING_OFF;
gsGlobal->PrimAlphaEnable = GS_SETTING_OFF;
dmaKit_init(D_CTRL_RELE_OFF,D_CTRL_MFD_OFF, D_CTRL_STS_UNSPEC,
D_CTRL_STD_OFF, D_CTRL_RCYC_8, 1 << DMA_CHANNEL_GIF);
/* Initialize the DMAC */
dmaKit_chan_init(DMA_CHANNEL_GIF);
gsKit_init_screen(gsGlobal);
gsKit_mode_switch(gsGlobal, GS_ONESHOT);
@ -130,7 +101,6 @@ static GSGLOBAL *init_GSGlobal(void)
gsKit_set_primalpha(gsGlobal, GS_SETREG_ALPHA(0, 1, 0, 1, 0), 0);
gsKit_clear(gsGlobal, GS_BLACK);
gsKit_flip(gsGlobal);
return gsGlobal;
}
@ -142,6 +112,34 @@ static void deinit_GSGlobal(GSGLOBAL *gsGlobal)
gsKit_deinit_global(gsGlobal);
}
/* Copy of gsKit_sync_flip, but without the 'flip' */
static void gsKit_sync(GSGLOBAL *gsGlobal)
{
if (!gsGlobal->FirstFrame)
WaitSema(vsync_sema_id);
while (PollSema(vsync_sema_id) >= 0);
}
/* Copy of gsKit_sync_flip, but without the 'sync' */
static void gsKit_flip(GSGLOBAL *gsGlobal)
{
if (!gsGlobal->FirstFrame)
{
if (gsGlobal->DoubleBuffering == GS_SETTING_ON)
{
GS_SET_DISPFB2( gsGlobal->ScreenBuffer[
gsGlobal->ActiveBuffer & 1] / 8192,
gsGlobal->Width / 64, gsGlobal->PSM, 0, 0 );
gsGlobal->ActiveBuffer ^= 1;
}
}
gsKit_setactive(gsGlobal);
}
static GSTEXTURE *prepare_new_texture(void)
{
GSTEXTURE *texture = (GSTEXTURE*)calloc(1, sizeof(GSTEXTURE));
@ -239,19 +237,14 @@ static void prim_texture(GSGLOBAL *gsGlobal, GSTEXTURE *texture, int zPosition,
static void refreshScreen(ps2_video_t *ps2)
{
// Draw everything
gsKit_set_finish(ps2->gsGlobal);
gsKit_queue_exec(ps2->gsGlobal);
gsKit_finish();
// Let texture manager know we're moving to the next frame
gsKit_TexManager_nextFrame(ps2->gsGlobal);
// Sync and flip
if (ps2->vsync)
{
gsKit_sync(ps2->gsGlobal);
gsKit_flip(ps2->gsGlobal);
}
gsKit_queue_exec(ps2->gsGlobal);
gsKit_TexManager_nextFrame(ps2->gsGlobal);
}
static void *ps2_gfx_init(const video_info_t *video,
input_driver_t **input, void **input_data)
@ -307,8 +300,6 @@ static bool ps2_gfx_frame(void *data, const void *frame,
printf("ps2_gfx_frame %llu\n", frame_count);
#endif
gsKit_clear(ps2->gsGlobal, GS_BLACK);
if (frame)
{
struct retro_hw_ps2_insets padding = empty_ps2_insets;