X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=frontend%2Flibretro.c;h=d8f9766fac17419ea517829574876f9ef09b7e02;hb=20a09b8ce3c86e1ebc97b260e32ef78abd508844;hp=f5522a3d4eb1dee44d4d654ddd62e7c78d3a2927;hpb=919cac880fbd25c537a1cbca01112e4634dba88e;p=pcsx_rearmed.git diff --git a/frontend/libretro.c b/frontend/libretro.c index f5522a3d..d8f9766f 100644 --- a/frontend/libretro.c +++ b/frontend/libretro.c @@ -77,6 +77,7 @@ static bool found_bios; static bool display_internal_fps = false; static unsigned frame_count = 0; static bool libretro_supports_bitmasks = false; +static int show_advanced_gpu_peops_settings = -1; static unsigned previous_width = 0; static unsigned previous_height = 0; @@ -133,6 +134,16 @@ static int snd_init(void){return 0;} static void snd_finish(void){} static int snd_busy(void){return 0;} +#define GPU_PEOPS_ODD_EVEN_BIT (1 << 0) +#define GPU_PEOPS_EXPAND_SCREEN_WIDTH (1 << 1) +#define GPU_PEOPS_IGNORE_BRIGHTNESS (1 << 2) +#define GPU_PEOPS_DISABLE_COORD_CHECK (1 << 3) +#define GPU_PEOPS_LAZY_SCREEN_UPDATE (1 << 6) +#define GPU_PEOPS_OLD_FRAME_SKIP (1 << 7) +#define GPU_PEOPS_REPEATED_TRIANGLES (1 << 8) +#define GPU_PEOPS_QUADS_WITH_TRIANGLES (1 << 9) +#define GPU_PEOPS_FAKE_BUSY_STATE (1 << 10) + static void init_memcard(char *mcd_data) { unsigned off = 0; @@ -190,8 +201,6 @@ static void vout_set_mode(int w, int h, int raw_w, int raw_h, int bpp) previous_width = vout_width; previous_height = vout_height; - SysPrintf("setting mode width: %d height %d\n", vout_width, vout_height); - struct retro_system_av_info info; retro_get_system_av_info(&info); environ_cb(RETRO_ENVIRONMENT_SET_GEOMETRY, &info.geometry); @@ -963,11 +972,11 @@ static struct retro_disk_control_callback disk_control = { #define PATH_MAX 4096 #endif -static char base_dir[PATH_MAX]; +static char base_dir[1024]; static bool read_m3u(const char *file) { - char line[PATH_MAX]; + char line[1024]; char name[PATH_MAX]; FILE *f = fopen(file, "r"); if (!f) @@ -1324,7 +1333,7 @@ size_t retro_get_memory_size(unsigned id) if (id == RETRO_MEMORY_SAVE_RAM) return MCD_SIZE; else if (id == RETRO_MEMORY_SYSTEM_RAM) - return 0x210000; + return 0x200000; else return 0; } @@ -1360,6 +1369,7 @@ static void update_variables(bool in_flight) { struct retro_variable var; int i; + int gpu_peops_fix = 0; var.value = NULL; var.key = "pcsx_rearmed_frameskip"; @@ -1631,6 +1641,132 @@ static void update_variables(bool in_flight) } #endif +#ifdef GPU_PEOPS + var.value = "NULL"; + var.key = "pcsx_rearmed_gpu_peops_odd_even_bit"; + + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) + { + if (strcmp(var.value, "enabled") == 0) + gpu_peops_fix |= GPU_PEOPS_ODD_EVEN_BIT; + } + + var.value = "NULL"; + var.key = "pcsx_rearmed_gpu_peops_expand_screen_width"; + + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) + { + if (strcmp(var.value, "enabled") == 0) + gpu_peops_fix |= GPU_PEOPS_EXPAND_SCREEN_WIDTH; + } + + var.value = "NULL"; + var.key = "pcsx_rearmed_gpu_peops_ignore_brightness"; + + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) + { + if (strcmp(var.value, "enabled") == 0) + gpu_peops_fix |= GPU_PEOPS_IGNORE_BRIGHTNESS; + } + + var.value = "NULL"; + var.key = "pcsx_rearmed_gpu_peops_disable_coord_check"; + + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) + { + if (strcmp(var.value, "enabled") == 0) + gpu_peops_fix |= GPU_PEOPS_DISABLE_COORD_CHECK; + } + + var.value = "NULL"; + var.key = "pcsx_rearmed_gpu_peops_lazy_screen_update"; + + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) + { + if (strcmp(var.value, "enabled") == 0) + gpu_peops_fix |= GPU_PEOPS_LAZY_SCREEN_UPDATE; + } + + var.value = "NULL"; + var.key = "pcsx_rearmed_gpu_peops_old_frame_skip"; + + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) + { + if (strcmp(var.value, "enabled") == 0) + gpu_peops_fix |= GPU_PEOPS_OLD_FRAME_SKIP; + } + + var.value = "NULL"; + var.key = "pcsx_rearmed_gpu_peops_repeated_triangles"; + + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) + { + if (strcmp(var.value, "enabled") == 0) + gpu_peops_fix |= GPU_PEOPS_REPEATED_TRIANGLES; + } + + var.value = "NULL"; + var.key = "pcsx_rearmed_gpu_peops_quads_with_triangles"; + + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) + { + if (strcmp(var.value, "enabled") == 0) + gpu_peops_fix |= GPU_PEOPS_QUADS_WITH_TRIANGLES; + } + + var.value = "NULL"; + var.key = "pcsx_rearmed_gpu_peops_fake_busy_state"; + + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) + { + if (strcmp(var.value, "enabled") == 0) + gpu_peops_fix |= GPU_PEOPS_FAKE_BUSY_STATE; + } + + if (pl_rearmed_cbs.gpu_peops.dwActFixes != gpu_peops_fix) + pl_rearmed_cbs.gpu_peops.dwActFixes = gpu_peops_fix; + + + /* Show/hide core options */ + + var.key = "pcsx_rearmed_show_gpu_peops_settings"; + var.value = NULL; + + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) + { + int show_advanced_gpu_peops_settings_prev = show_advanced_gpu_peops_settings; + + show_advanced_gpu_peops_settings = 1; + if (strcmp(var.value, "disabled") == 0) + show_advanced_gpu_peops_settings = 0; + + if (show_advanced_gpu_peops_settings != show_advanced_gpu_peops_settings_prev) + { + unsigned i; + struct retro_core_option_display option_display; + char gpu_peops_option[9][45] = { + "pcsx_rearmed_gpu_peops_odd_even_bit", + "pcsx_rearmed_gpu_peops_expand_screen_width", + "pcsx_rearmed_gpu_peops_ignore_brightness", + "pcsx_rearmed_gpu_peops_disable_coord_check", + "pcsx_rearmed_gpu_peops_lazy_screen_update", + "pcsx_rearmed_gpu_peops_old_frame_skip", + "pcsx_rearmed_gpu_peops_repeated_triangles", + "pcsx_rearmed_gpu_peops_quads_with_triangles", + "pcsx_rearmed_gpu_peops_fake_busy_state", + }; + + option_display.visible = show_advanced_gpu_peops_settings; + + for (i = 0; i < 9; i++) + { + option_display.key = gpu_peops_option[i]; + environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display); + } + } + } +#endif + if (in_flight) { // inform core things about possible config changes plugin_call_rearmed_cbs(); @@ -1758,7 +1894,7 @@ void retro_run(void) if (in_type[i] == PSE_PAD_TYPE_NONE) continue; - + if (libretro_supports_bitmasks) ret = input_state_cb(i, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_MASK); else @@ -2004,7 +2140,7 @@ static int init_memcards(void) static void loadPSXBios(void) { const char *dir; - char path[256]; + char path[PATH_MAX]; unsigned useHLE = 0; const char *bios[] = { @@ -2121,6 +2257,7 @@ void retro_init(void) cycle_multiplier = 200; #endif pl_rearmed_cbs.gpu_peops.iUseDither = 1; + pl_rearmed_cbs.gpu_peops.dwActFixes = GPU_PEOPS_OLD_FRAME_SKIP; spu_config.iUseFixedUpdates = 1; SaveFuncs.open = save_open; @@ -2138,6 +2275,7 @@ void retro_init(void) void retro_deinit(void) { + ClosePlugins(); SysClose(); #ifdef _3DS linearFree(vout_buf); @@ -2159,3 +2297,15 @@ int usleep (unsigned long us) sceKernelDelayThread(us); } #endif + +void SysPrintf(const char *fmt, ...) { + va_list list; + char msg[512]; + + va_start(list, fmt); + vsprintf(msg, fmt, list); + va_end(list); + + if (log_cb) + log_cb(RETRO_LOG_INFO, "%s", msg); +}