From bc4f8fbe60ba72fbde1679e32eedfab6f057305a Mon Sep 17 00:00:00 2001 From: Flyinghead Date: Fri, 31 Mar 2023 20:01:12 +0200 Subject: [PATCH 01/16] dx11: enable depth writing in oit pass Make sure both depth attachments are identical at the end of each pass. Issue #996 --- core/rend/dx11/oit/dx11_oitrenderer.cpp | 37 ++++++++++++------------- 1 file changed, 17 insertions(+), 20 deletions(-) diff --git a/core/rend/dx11/oit/dx11_oitrenderer.cpp b/core/rend/dx11/oit/dx11_oitrenderer.cpp index 06e7ab4e1..8129c76e3 100644 --- a/core/rend/dx11/oit/dx11_oitrenderer.cpp +++ b/core/rend/dx11/oit/dx11_oitrenderer.cpp @@ -310,16 +310,14 @@ struct DX11OITRenderer : public DX11Renderer else zfunc = gp->isp.DepthMode; - bool zwriteEnable = false; - if (pass == DX11OITShaders::Depth || pass == DX11OITShaders::Color) - { - // Z Write Disable seems to be ignored for punch-through. - // Fixes Worms World Party, Bust-a-Move 4 and Re-Volt - if (Type == ListType_Punch_Through) - zwriteEnable = true; - else - zwriteEnable = !gp->isp.ZWriteDis; - } + bool zwriteEnable; + // Z Write Disable seems to be ignored for punch-through. + // Fixes Worms World Party, Bust-a-Move 4 and Re-Volt + if (Type == ListType_Punch_Through) + zwriteEnable = true; + else + zwriteEnable = !gp->isp.ZWriteDis; + bool needStencil = config::ModifierVolumes && pass == DX11OITShaders::Depth && Type != ListType_Translucent; const u32 stencil = (gp->pcw.Shadow != 0) ? 0x80 : 0; deviceContext->OMSetDepthStencilState(depthStencilStates.getState(true, zwriteEnable, zfunc, needStencil), stencil); @@ -532,8 +530,8 @@ struct DX11OITRenderer : public DX11Renderer // PASS 1: Geometry pass to update depth and stencil // // unbind depth/stencil - ID3D11ShaderResourceView *p = nullptr; - deviceContext->PSSetShaderResources(4, 1, &p); + ID3D11ShaderResourceView * const nullView = nullptr; + deviceContext->PSSetShaderResources(4, 1, &nullView); // disable color writes deviceContext->OMSetBlendState(blendStates.getState(false, 0, 0, true), nullptr, 0xffffffff); deviceContext->OMSetRenderTargetsAndUnorderedAccessViews(1, &opaqueRenderTarget.get(), depthStencilView2, 0, D3D11_KEEP_UNORDERED_ACCESS_VIEWS, nullptr, nullptr); @@ -556,22 +554,22 @@ struct DX11OITRenderer : public DX11Renderer // if (current_pass.autosort) { + deviceContext->PSSetShaderResources(4, 1, &nullView); + deviceContext->OMSetRenderTargetsAndUnorderedAccessViews(1, &opaqueRenderTarget.get(), depthTexView, 0, D3D11_KEEP_UNORDERED_ACCESS_VIEWS, nullptr, nullptr); deviceContext->PSSetShaderResources(4, 1, &depthView.get()); // disable color writes deviceContext->OMSetBlendState(blendStates.getState(false, 0, 0, true), nullptr, 0xffffffff); drawList(pvrrc.global_param_tr, previous_pass.tr_count, tr_count); + // unbind depth tex + deviceContext->PSSetShaderResources(4, 1, &nullView); if (render_pass < render_pass_count - 1) { // // PASS 3b: Geometry pass with TR to update the depth for the next TA render pass // - ID3D11ShaderResourceView *p = nullptr; - deviceContext->PSSetShaderResources(4, 1, &p); - deviceContext->OMSetRenderTargetsAndUnorderedAccessViews(1, &opaqueRenderTarget.get(), depthTexView, 0, D3D11_KEEP_UNORDERED_ACCESS_VIEWS, nullptr, nullptr); + deviceContext->OMSetRenderTargetsAndUnorderedAccessViews(1, &opaqueRenderTarget.get(), depthStencilView2, 0, D3D11_KEEP_UNORDERED_ACCESS_VIEWS, nullptr, nullptr); drawList(pvrrc.global_param_tr, previous_pass.tr_count, tr_count); } - ID3D11ShaderResourceView *p = nullptr; - deviceContext->PSSetShaderResources(4, 1, &p); if (!theDX11Context.isIntel()) { // Intel Iris Plus 640 just crashes @@ -583,8 +581,7 @@ struct DX11OITRenderer : public DX11Renderer } else { - ID3D11ShaderResourceView *p = nullptr; - deviceContext->PSSetShaderResources(4, 1, &p); + deviceContext->PSSetShaderResources(4, 1, &nullView); drawList(pvrrc.global_param_tr, previous_pass.tr_count, tr_count); } if (render_pass < render_pass_count - 1) @@ -607,7 +604,7 @@ struct DX11OITRenderer : public DX11Renderer std::swap(opaqueTex, multipassTex); std::swap(opaqueRenderTarget, multipassRenderTarget); std::swap(opaqueTextureView, multipassTextureView); - deviceContext->PSSetShaderResources(0, 1, &p); + deviceContext->PSSetShaderResources(0, 1, &nullView); deviceContext->IASetInputLayout(mainInputLayout); // Clear the stencil from this pass From 32e08ca1657f05a95753b2ecd861e668f445f2cc Mon Sep 17 00:00:00 2001 From: Flyinghead Date: Fri, 31 Mar 2023 20:03:16 +0200 Subject: [PATCH 02/16] modem: don't crash on unexpected register writes Just log and ignore. Fixes MINIDUMP-62 --- core/hw/modem/modem.cpp | 47 +++++++++++++++++++++-------------------- 1 file changed, 24 insertions(+), 23 deletions(-) diff --git a/core/hw/modem/modem.cpp b/core/hw/modem/modem.cpp index ac206f188..50ec91ecc 100644 --- a/core/hw/modem/modem.cpp +++ b/core/hw/modem/modem.cpp @@ -31,6 +31,7 @@ #ifndef NDEBUG #include "oslib/oslib.h" #endif +#include #define MODEM_COUNTRY_RES 0 #define MODEM_COUNTRY_JAP 1 @@ -52,6 +53,8 @@ const static u32 MODEM_ID[2] = static modemreg_t modem_regs; static u8 dspram[0x1000]; +static_assert(sizeof(regs_write_mask) == sizeof(modem_regs)); +static_assert(sizeof(por_dspram) == sizeof(dspram)); int modem_sched; @@ -344,10 +347,7 @@ static void schedule_callback(int ms) static void NormalDefaultRegs() { - verify(state == MS_NORMAL); - verify(sizeof(regs_write_mask) == sizeof(modem_regs)); - verify(sizeof(por_dspram) == sizeof(dspram)); - + assert(state == MS_NORMAL); // Default values for normal state memset(&modem_regs, 0, sizeof(modem_regs)); memcpy(dspram, por_dspram, sizeof(dspram)); @@ -368,16 +368,16 @@ static void NormalDefaultRegs() } static void DSPTestEnd() { - verify(state==MS_END_DSP); - state=MS_NORMAL; + assert(state == MS_END_DSP); + state = MS_NORMAL; LOG("DSPTestEnd"); NormalDefaultRegs(); } static void DSPTestStart() { - verify(state==MS_ST_DSP); - state=MS_END_DSP; + assert(state == MS_ST_DSP); + state = MS_END_DSP; LOG("DSPTestStart"); modem_regs.reg1e.TDBE = 1; @@ -392,8 +392,8 @@ static void DSPTestStart() } static void ControllerTestEnd() { - verify(state==MS_ST_CONTROLER); - state=MS_ST_DSP; + assert(state == MS_ST_CONTROLER); + state = MS_ST_DSP; schedule_callback(50); } @@ -401,13 +401,13 @@ static void ControllerTestEnd() //End the reset and start internal tests static void ControllerTestStart() { - verify(state==MS_RESETING); + assert(state == MS_RESETING); //Set Self test values :) - state=MS_ST_CONTROLER; + state = MS_ST_CONTROLER; //k, lets set values //1E:3 -> set - modem_regs.reg1e.TDBE=1; + modem_regs.reg1e.TDBE = 1; /* RAM1 Checksum = 0xEA3C or 0x451 @@ -418,13 +418,13 @@ static void ControllerTestStart() Part Number = 0x3730 or 0x3731 Revision Level = 0x4241 */ - SetReg16(0x1D,0x1C,0xEA3C); - SetReg16(0x1B,0x1A,0x5536); - SetReg16(0x19,0x18,0x5F4C); - SetReg16(0x17,0x16,0x3835); - SetReg16(0x15,0x14,0x801); - SetReg16(0x13,0x12,0x3730); - SetReg16(0x11,0x0,0x4241); + SetReg16(0x1D, 0x1C, 0xEA3C); + SetReg16(0x1B, 0x1A, 0x5536); + SetReg16(0x19, 0x18, 0x5F4C); + SetReg16(0x17, 0x16, 0x3835); + SetReg16(0x15, 0x14, 0x801); + SetReg16(0x13, 0x12, 0x3730); + SetReg16(0x11, 0x0, 0x4241); ControllerTestEnd(); } @@ -491,9 +491,9 @@ static void ModemNormalWrite(u32 reg, u32 data) case 0x06: LOG("PEN = %d", modem_regs.reg06.PEN); if (modem_regs.reg06.PEN) - die("PEN = 1"); + WARN_LOG(MODEM, "Parity not supported"); if (modem_regs.reg06.HDLC) - die("HDLC = 1"); + WARN_LOG(MODEM, "HDLC mode not supported"); break; case 0x08: @@ -571,7 +571,8 @@ static void ModemNormalWrite(u32 reg, u32 data) break; case 0x1a: - verify(connect_state != CONNECTED || !modem_regs.reg1a.SCIBE); + if (connect_state == CONNECTED && modem_regs.reg1a.SCIBE) + WARN_LOG(MODEM, "Unexpected state: connected and SCIBE==1"); break; //Address low From d3690b12c6ec6cf82e59266326a4031f0d20f477 Mon Sep 17 00:00:00 2001 From: Flyinghead Date: Fri, 31 Mar 2023 20:09:33 +0200 Subject: [PATCH 03/16] net: don't reset naomi network on soft reset (maxspeed) Resetting makes maxspeed crash as the serial pipe isn't reset and becomes invalid. Fixes MINIDUMP-PJ --- core/emulator.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/emulator.cpp b/core/emulator.cpp index ef3067bbf..96b80b6ed 100644 --- a/core/emulator.cpp +++ b/core/emulator.cpp @@ -369,9 +369,9 @@ static void loadSpecialSettings() void dc_reset(bool hard) { - NetworkHandshake::term(); if (hard) { + NetworkHandshake::term(); memwatch::unprotect(); memwatch::reset(); } From 9d6bfd4786dd81206defd3dfbf1e637ac9ce212c Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 31 Mar 2023 22:19:08 +0000 Subject: [PATCH 04/16] Fetch translations & Recreate libretro_core_options_intl.h --- shell/libretro/libretro_core_options_intl.h | 1699 ++++++++++++++++++- 1 file changed, 1693 insertions(+), 6 deletions(-) diff --git a/shell/libretro/libretro_core_options_intl.h b/shell/libretro/libretro_core_options_intl.h index 21de47d70..603ef5fea 100644 --- a/shell/libretro/libretro_core_options_intl.h +++ b/shell/libretro/libretro_core_options_intl.h @@ -3429,6 +3429,1693 @@ struct retro_core_options_v2 options_ast = { option_defs_ast }; +/* RETRO_LANGUAGE_BE */ + +#define CATEGORY_SYSTEM_LABEL_BE NULL +#define CATEGORY_SYSTEM_INFO_0_BE NULL +#define CATEGORY_VIDEO_LABEL_BE NULL +#define CATEGORY_VIDEO_INFO_0_BE NULL +#define CATEGORY_PERFORMANCE_LABEL_BE NULL +#define CATEGORY_PERFORMANCE_INFO_0_BE NULL +#define CATEGORY_HACKS_LABEL_BE NULL +#define CATEGORY_HACKS_INFO_0_BE NULL +#define CATEGORY_INPUT_LABEL_BE NULL +#define CATEGORY_INPUT_INFO_0_BE NULL +#define CATEGORY_VMU_LABEL_BE NULL +#define CATEGORY_VMU_INFO_0_BE NULL +#define CORE_OPTION_NAME_REGION_LABEL_BE NULL +#define OPTION_VAL_JAPAN_BE NULL +#define OPTION_VAL_USA_BE NULL +#define OPTION_VAL_EUROPE_BE NULL +#define OPTION_VAL_DEFAULT_BE NULL +#define CORE_OPTION_NAME_LANGUAGE_LABEL_BE NULL +#define CORE_OPTION_NAME_LANGUAGE_INFO_0_BE NULL +#define OPTION_VAL_JAPANESE_BE NULL +#define OPTION_VAL_ENGLISH_BE NULL +#define OPTION_VAL_GERMAN_BE NULL +#define OPTION_VAL_FRENCH_BE NULL +#define OPTION_VAL_SPANISH_BE NULL +#define OPTION_VAL_ITALIAN_BE NULL +#define CORE_OPTION_NAME_HLE_BIOS_LABEL_BE NULL +#define CORE_OPTION_NAME_HLE_BIOS_INFO_0_BE NULL +#define CORE_OPTION_NAME_BOOT_TO_BIOS_LABEL_BE NULL +#define CORE_OPTION_NAME_BOOT_TO_BIOS_INFO_0_BE NULL +#define CORE_OPTION_NAME_ENABLE_DSP_LABEL_BE NULL +#define CORE_OPTION_NAME_ENABLE_DSP_INFO_0_BE NULL +#define CORE_OPTION_NAME_FORCE_WINCE_LABEL_BE NULL +#define CORE_OPTION_NAME_FORCE_WINCE_INFO_0_BE NULL +#define CORE_OPTION_NAME_ALLOW_SERVICE_BUTTONS_LABEL_BE NULL +#define CORE_OPTION_NAME_ALLOW_SERVICE_BUTTONS_INFO_0_BE NULL +#define CORE_OPTION_NAME_FORCE_FREEPLAY_LABEL_BE NULL +#define CORE_OPTION_NAME_FORCE_FREEPLAY_INFO_0_BE NULL +#define CORE_OPTION_NAME_EMULATE_BBA_LABEL_BE NULL +#define CORE_OPTION_NAME_EMULATE_BBA_INFO_0_BE NULL +#define CORE_OPTION_NAME_UPNP_LABEL_BE NULL +#define CORE_OPTION_NAME_UPNP_INFO_0_BE NULL +#define CORE_OPTION_NAME_INTERNAL_RESOLUTION_LABEL_BE NULL +#define CORE_OPTION_NAME_INTERNAL_RESOLUTION_INFO_0_BE NULL +#define OPTION_VAL_320X240_BE NULL +#define OPTION_VAL_640X480_BE NULL +#define OPTION_VAL_800X600_BE NULL +#define OPTION_VAL_960X720_BE NULL +#define OPTION_VAL_1024X768_BE NULL +#define OPTION_VAL_1280X960_BE NULL +#define OPTION_VAL_1440X1080_BE NULL +#define OPTION_VAL_1600X1200_BE NULL +#define OPTION_VAL_1920X1440_BE NULL +#define OPTION_VAL_2560X1920_BE NULL +#define OPTION_VAL_2880X2160_BE NULL +#define OPTION_VAL_3200X2400_BE NULL +#define OPTION_VAL_3840X2880_BE NULL +#define OPTION_VAL_4480X3360_BE NULL +#define OPTION_VAL_5120X3840_BE NULL +#define OPTION_VAL_5760X4320_BE NULL +#define OPTION_VAL_6400X4800_BE NULL +#define OPTION_VAL_7040X5280_BE NULL +#define OPTION_VAL_7680X5760_BE NULL +#define OPTION_VAL_8320X6240_BE NULL +#define OPTION_VAL_8960X6720_BE NULL +#define OPTION_VAL_9600X7200_BE NULL +#define OPTION_VAL_10240X7680_BE NULL +#define OPTION_VAL_10880X8160_BE NULL +#define OPTION_VAL_11520X8640_BE NULL +#define OPTION_VAL_12160X9120_BE NULL +#define OPTION_VAL_12800X9600_BE NULL +#define CORE_OPTION_NAME_CABLE_TYPE_LABEL_BE NULL +#define CORE_OPTION_NAME_CABLE_TYPE_INFO_0_BE NULL +#define OPTION_VAL_VGA_BE NULL +#define OPTION_VAL_TV_RGB_BE NULL +#define OPTION_VAL_TV_COMPOSITE_BE NULL +#define CORE_OPTION_NAME_BROADCAST_LABEL_BE NULL +#define OPTION_VAL_NTSC_BE NULL +#define OPTION_VAL_PAL_BE NULL +#define OPTION_VAL_PAL_N_BE NULL +#define OPTION_VAL_PAL_M_BE NULL +#define CORE_OPTION_NAME_SCREEN_ROTATION_LABEL_BE NULL +#define OPTION_VAL_HORIZONTAL_BE NULL +#define OPTION_VAL_VERTICAL_BE NULL +#define CORE_OPTION_NAME_ALPHA_SORTING_LABEL_BE NULL +#define OPTION_VAL_PER_STRIP_FAST_LEAST_ACCURATE_BE NULL +#define OPTION_VAL_PER_TRIANGLE_NORMAL_BE NULL +#define OPTION_VAL_PER_PIXEL_ACCURATE_BE NULL +#define CORE_OPTION_NAME_OIT_ABUFFER_SIZE_LABEL_BE NULL +#define CORE_OPTION_NAME_OIT_ABUFFER_SIZE_INFO_0_BE NULL +#define OPTION_VAL_512MB_BE NULL +#define OPTION_VAL_1GB_BE NULL +#define OPTION_VAL_2GB_BE NULL +#define OPTION_VAL_4GB_BE NULL +#define CORE_OPTION_NAME_OIT_LAYERS_LABEL_BE NULL +#define CORE_OPTION_NAME_OIT_LAYERS_INFO_0_BE NULL +#define CORE_OPTION_NAME_EMULATE_FRAMEBUFFER_LABEL_BE NULL +#define CORE_OPTION_NAME_EMULATE_FRAMEBUFFER_INFO_0_BE NULL +#define CORE_OPTION_NAME_ENABLE_RTTB_LABEL_BE NULL +#define CORE_OPTION_NAME_ENABLE_RTTB_INFO_0_BE NULL +#define CORE_OPTION_NAME_MIPMAPPING_LABEL_BE NULL +#define CORE_OPTION_NAME_FOG_LABEL_BE NULL +#define CORE_OPTION_NAME_VOLUME_MODIFIER_ENABLE_LABEL_BE NULL +#define CORE_OPTION_NAME_VOLUME_MODIFIER_ENABLE_INFO_0_BE NULL +#define CORE_OPTION_NAME_ANISOTROPIC_FILTERING_LABEL_BE NULL +#define CORE_OPTION_NAME_ANISOTROPIC_FILTERING_INFO_0_BE NULL +#define CORE_OPTION_NAME_TEXTURE_FILTERING_LABEL_BE NULL +#define CORE_OPTION_NAME_TEXTURE_FILTERING_INFO_0_BE NULL +#define OPTION_VAL_1_BE NULL +#define OPTION_VAL_2_BE NULL +#define CORE_OPTION_NAME_DELAY_FRAME_SWAPPING_LABEL_BE NULL +#define CORE_OPTION_NAME_DELAY_FRAME_SWAPPING_INFO_0_BE NULL +#define CORE_OPTION_NAME_DETECT_VSYNC_SWAP_INTERVAL_LABEL_BE NULL +#define CORE_OPTION_NAME_DETECT_VSYNC_SWAP_INTERVAL_INFO_0_BE NULL +#define CORE_OPTION_NAME_PVR2_FILTERING_LABEL_BE NULL +#define CORE_OPTION_NAME_PVR2_FILTERING_INFO_0_BE NULL +#define CORE_OPTION_NAME_TEXUPSCALE_LABEL_BE NULL +#define CORE_OPTION_NAME_TEXUPSCALE_INFO_0_BE NULL +#define OPTION_VAL_2_O27_BE NULL +#define OPTION_VAL_4_BE NULL +#define OPTION_VAL_6_BE NULL +#define CORE_OPTION_NAME_TEXUPSCALE_MAX_FILTERED_TEXTURE_SIZE_LABEL_BE NULL +#define CORE_OPTION_NAME_NATIVE_DEPTH_INTERPOLATION_LABEL_BE NULL +#define CORE_OPTION_NAME_NATIVE_DEPTH_INTERPOLATION_INFO_0_BE NULL +#define CORE_OPTION_NAME_THREADED_RENDERING_LABEL_BE NULL +#define CORE_OPTION_NAME_THREADED_RENDERING_INFO_0_BE NULL +#define CORE_OPTION_NAME_AUTO_SKIP_FRAME_LABEL_BE NULL +#define CORE_OPTION_NAME_AUTO_SKIP_FRAME_INFO_0_BE NULL +#define OPTION_VAL_SOME_BE NULL +#define OPTION_VAL_MORE_BE NULL +#define CORE_OPTION_NAME_FRAME_SKIPPING_LABEL_BE NULL +#define CORE_OPTION_NAME_FRAME_SKIPPING_INFO_0_BE NULL +#define CORE_OPTION_NAME_WIDESCREEN_CHEATS_LABEL_BE NULL +#define CORE_OPTION_NAME_WIDESCREEN_CHEATS_INFO_0_BE NULL +#define CORE_OPTION_NAME_WIDESCREEN_HACK_LABEL_BE NULL +#define CORE_OPTION_NAME_WIDESCREEN_HACK_INFO_0_BE NULL +#define CORE_OPTION_NAME_GDROM_FAST_LOADING_LABEL_BE NULL +#define CORE_OPTION_NAME_GDROM_FAST_LOADING_INFO_0_BE NULL +#define CORE_OPTION_NAME_CUSTOM_TEXTURES_LABEL_BE NULL +#define CORE_OPTION_NAME_DUMP_TEXTURES_LABEL_BE NULL +#define CORE_OPTION_NAME_ANALOG_STICK_DEADZONE_LABEL_BE NULL +#define OPTION_VAL_0_BE NULL +#define OPTION_VAL_5_BE NULL +#define OPTION_VAL_10_BE NULL +#define OPTION_VAL_15_BE NULL +#define OPTION_VAL_20_BE NULL +#define OPTION_VAL_25_BE NULL +#define OPTION_VAL_30_BE NULL +#define CORE_OPTION_NAME_TRIGGER_DEADZONE_LABEL_BE NULL +#define CORE_OPTION_NAME_DIGITAL_TRIGGERS_LABEL_BE NULL +#define CORE_OPTION_NAME_ENABLE_PURUPURU_LABEL_BE NULL +#define CORE_OPTION_NAME_ENABLE_PURUPURU_INFO_0_BE NULL +#define CORE_OPTION_NAME_NETWORK_OUTPUT_LABEL_BE NULL +#define CORE_OPTION_NAME_NETWORK_OUTPUT_INFO_0_BE NULL +#define CORE_OPTION_NAME_SHOW_LIGHTGUN_SETTINGS_LABEL_BE NULL +#define CORE_OPTION_NAME_SHOW_LIGHTGUN_SETTINGS_INFO_0_BE NULL +#define CORE_OPTION_NAME_LIGHTGUN1_CROSSHAIR_LABEL_BE NULL +#define OPTION_VAL_WHITE_BE NULL +#define OPTION_VAL_RED_BE NULL +#define OPTION_VAL_GREEN_BE NULL +#define OPTION_VAL_BLUE_BE NULL +#define CORE_OPTION_NAME_LIGHTGUN2_CROSSHAIR_LABEL_BE NULL +#define CORE_OPTION_NAME_LIGHTGUN3_CROSSHAIR_LABEL_BE NULL +#define CORE_OPTION_NAME_LIGHTGUN4_CROSSHAIR_LABEL_BE NULL +#define CORE_OPTION_NAME_PER_CONTENT_VMUS_LABEL_BE NULL +#define CORE_OPTION_NAME_PER_CONTENT_VMUS_LABEL_CAT_BE NULL +#define CORE_OPTION_NAME_PER_CONTENT_VMUS_INFO_0_BE NULL +#define OPTION_VAL_VMU_A1_BE NULL +#define OPTION_VAL_ALL_VMUS_BE NULL +#define CORE_OPTION_NAME_SHOW_VMU_SCREEN_SETTINGS_LABEL_BE NULL +#define CORE_OPTION_NAME_SHOW_VMU_SCREEN_SETTINGS_LABEL_CAT_BE NULL +#define CORE_OPTION_NAME_SHOW_VMU_SCREEN_SETTINGS_INFO_0_BE NULL +#define CORE_OPTION_NAME_VMU1_SCREEN_DISPLAY_LABEL_BE NULL +#define CORE_OPTION_NAME_VMU1_SCREEN_POSITION_LABEL_BE NULL +#define OPTION_VAL_UPPER_LEFT_BE NULL +#define OPTION_VAL_UPPER_RIGHT_BE NULL +#define OPTION_VAL_LOWER_LEFT_BE NULL +#define OPTION_VAL_LOWER_RIGHT_BE NULL +#define CORE_OPTION_NAME_VMU1_SCREEN_SIZE_MULT_LABEL_BE NULL +#define OPTION_VAL_1X_BE NULL +#define OPTION_VAL_3X_BE NULL +#define OPTION_VAL_5X_BE NULL +#define CORE_OPTION_NAME_VMU1_PIXEL_ON_COLOR_LABEL_BE NULL +#define OPTION_VAL_DEFAULT_ON_00_BE NULL +#define OPTION_VAL_DEFAULT_OFF_01_BE NULL +#define OPTION_VAL_BLACK_02_BE NULL +#define OPTION_VAL_LIGHT_BLUE_04_BE NULL +#define OPTION_VAL_CYAN_06_BE NULL +#define OPTION_VAL_CYAN_BLUE_07_BE NULL +#define OPTION_VAL_LIGHT_GREEN_08_BE NULL +#define OPTION_VAL_CYAN_GREEN_09_BE NULL +#define OPTION_VAL_LIGHT_CYAN_10_BE NULL +#define OPTION_VAL_PURPLE_12_BE NULL +#define OPTION_VAL_LIGHT_PURPLE_13_BE NULL +#define OPTION_VAL_YELLOW_14_BE NULL +#define OPTION_VAL_GRAY_15_BE NULL +#define OPTION_VAL_LIGHT_PURPLE_2_16_BE NULL +#define OPTION_VAL_LIGHT_GREEN_2_17_BE NULL +#define OPTION_VAL_LIGHT_GREEN_3_18_BE NULL +#define OPTION_VAL_LIGHT_CYAN_2_19_BE NULL +#define OPTION_VAL_LIGHT_RED_2_20_BE NULL +#define OPTION_VAL_MAGENTA_21_BE NULL +#define OPTION_VAL_LIGHT_PURPLE_3_22_BE NULL +#define OPTION_VAL_LIGHT_ORANGE_23_BE NULL +#define OPTION_VAL_ORANGE_24_BE NULL +#define OPTION_VAL_LIGHT_PURPLE_4_25_BE NULL +#define OPTION_VAL_LIGHT_YELLOW_26_BE NULL +#define OPTION_VAL_LIGHT_YELLOW_2_27_BE NULL +#define CORE_OPTION_NAME_VMU1_PIXEL_OFF_COLOR_LABEL_BE NULL +#define CORE_OPTION_NAME_VMU1_SCREEN_OPACITY_LABEL_BE NULL +#define OPTION_VAL_40_BE NULL +#define OPTION_VAL_50_BE NULL +#define OPTION_VAL_60_BE NULL +#define OPTION_VAL_70_BE NULL +#define OPTION_VAL_80_BE NULL +#define OPTION_VAL_90_BE NULL +#define OPTION_VAL_100_BE NULL +#define CORE_OPTION_NAME_VMU2_SCREEN_DISPLAY_LABEL_BE NULL +#define CORE_OPTION_NAME_VMU2_SCREEN_POSITION_LABEL_BE NULL +#define CORE_OPTION_NAME_VMU2_SCREEN_SIZE_MULT_LABEL_BE NULL +#define CORE_OPTION_NAME_VMU2_PIXEL_ON_COLOR_LABEL_BE NULL +#define CORE_OPTION_NAME_VMU2_PIXEL_OFF_COLOR_LABEL_BE NULL +#define CORE_OPTION_NAME_VMU2_SCREEN_OPACITY_LABEL_BE NULL +#define CORE_OPTION_NAME_VMU3_SCREEN_DISPLAY_LABEL_BE NULL +#define CORE_OPTION_NAME_VMU3_SCREEN_POSITION_LABEL_BE NULL +#define CORE_OPTION_NAME_VMU3_SCREEN_SIZE_MULT_LABEL_BE NULL +#define CORE_OPTION_NAME_VMU3_PIXEL_ON_COLOR_LABEL_BE NULL +#define CORE_OPTION_NAME_VMU3_PIXEL_OFF_COLOR_LABEL_BE NULL +#define CORE_OPTION_NAME_VMU3_SCREEN_OPACITY_LABEL_BE NULL +#define CORE_OPTION_NAME_VMU4_SCREEN_DISPLAY_LABEL_BE NULL +#define CORE_OPTION_NAME_VMU4_SCREEN_POSITION_LABEL_BE NULL +#define CORE_OPTION_NAME_VMU4_SCREEN_SIZE_MULT_LABEL_BE NULL +#define CORE_OPTION_NAME_VMU4_PIXEL_ON_COLOR_LABEL_BE NULL +#define CORE_OPTION_NAME_VMU4_PIXEL_OFF_COLOR_LABEL_BE NULL +#define CORE_OPTION_NAME_VMU4_SCREEN_OPACITY_LABEL_BE NULL + +struct retro_core_option_v2_category option_cats_be[] = { + { + "system", + CATEGORY_SYSTEM_LABEL_BE, + CATEGORY_SYSTEM_INFO_0_BE + }, + { + "video", + CATEGORY_VIDEO_LABEL_BE, + CATEGORY_VIDEO_INFO_0_BE + }, + { + "performance", + CATEGORY_PERFORMANCE_LABEL_BE, + CATEGORY_PERFORMANCE_INFO_0_BE + }, + { + "hacks", + CATEGORY_HACKS_LABEL_BE, + CATEGORY_HACKS_INFO_0_BE + }, + { + "input", + CATEGORY_INPUT_LABEL_BE, + CATEGORY_INPUT_INFO_0_BE + }, + { + "vmu", + CATEGORY_VMU_LABEL_BE, + CATEGORY_VMU_INFO_0_BE + }, + { NULL, NULL, NULL }, +}; +struct retro_core_option_v2_definition option_defs_be[] = { + { + CORE_OPTION_NAME "_region", + CORE_OPTION_NAME_REGION_LABEL_BE, + NULL, + "", + NULL, + "system", + { + { "Japan", OPTION_VAL_JAPAN_BE }, + { "USA", OPTION_VAL_USA_BE }, + { "Europe", OPTION_VAL_EUROPE_BE }, + { "Default", OPTION_VAL_DEFAULT_BE }, + { NULL, NULL }, + }, + "Default", + }, + { + CORE_OPTION_NAME "_language", + CORE_OPTION_NAME_LANGUAGE_LABEL_BE, + NULL, + CORE_OPTION_NAME_LANGUAGE_INFO_0_BE, + NULL, + "system", + { + { "Japanese", OPTION_VAL_JAPANESE_BE }, + { "English", OPTION_VAL_ENGLISH_BE }, + { "German", OPTION_VAL_GERMAN_BE }, + { "French", OPTION_VAL_FRENCH_BE }, + { "Spanish", OPTION_VAL_SPANISH_BE }, + { "Italian", OPTION_VAL_ITALIAN_BE }, + { "Default", OPTION_VAL_DEFAULT_BE }, + { NULL, NULL }, + }, + "Default", + }, + { + CORE_OPTION_NAME "_hle_bios", + CORE_OPTION_NAME_HLE_BIOS_LABEL_BE, + NULL, + CORE_OPTION_NAME_HLE_BIOS_INFO_0_BE, + NULL, + "system", + { + { "disabled", NULL }, + { "enabled", NULL }, + { NULL, NULL}, + }, + "disabled", + }, + { + CORE_OPTION_NAME "_boot_to_bios", + CORE_OPTION_NAME_BOOT_TO_BIOS_LABEL_BE, + NULL, + CORE_OPTION_NAME_BOOT_TO_BIOS_INFO_0_BE, + NULL, + "system", + { + { "disabled", NULL }, + { "enabled", NULL }, + { NULL, NULL }, + }, + "disabled", + }, + { + CORE_OPTION_NAME "_enable_dsp", + CORE_OPTION_NAME_ENABLE_DSP_LABEL_BE, + NULL, + CORE_OPTION_NAME_ENABLE_DSP_INFO_0_BE, + NULL, + "system", + { + { "disabled", NULL }, + { "enabled", NULL }, + { NULL, NULL }, + }, +#ifdef LOW_END + "disabled", +#else + "enabled", +#endif + }, + { + CORE_OPTION_NAME "_force_wince", + CORE_OPTION_NAME_FORCE_WINCE_LABEL_BE, + NULL, + CORE_OPTION_NAME_FORCE_WINCE_INFO_0_BE, + NULL, + "system", + { + { "disabled", NULL }, + { "enabled", NULL }, + { NULL, NULL }, + }, + "disabled", + }, + { + CORE_OPTION_NAME "_allow_service_buttons", + CORE_OPTION_NAME_ALLOW_SERVICE_BUTTONS_LABEL_BE, + NULL, + CORE_OPTION_NAME_ALLOW_SERVICE_BUTTONS_INFO_0_BE, + NULL, + "system", + { + { "disabled", NULL }, + { "enabled", NULL }, + { NULL, NULL }, + }, + "disabled", + }, + { + CORE_OPTION_NAME "_force_freeplay", + CORE_OPTION_NAME_FORCE_FREEPLAY_LABEL_BE, + NULL, + CORE_OPTION_NAME_FORCE_FREEPLAY_INFO_0_BE, + NULL, + "system", + { + { "disabled", NULL }, + { "enabled", NULL }, + { NULL, NULL }, + }, + "enabled", + }, + { + CORE_OPTION_NAME "_emulate_bba", + CORE_OPTION_NAME_EMULATE_BBA_LABEL_BE, + NULL, + CORE_OPTION_NAME_EMULATE_BBA_INFO_0_BE, + NULL, + "system", + { + { "disabled", NULL }, + { "enabled", NULL }, + { NULL, NULL }, + }, + "disabled", + }, + { + CORE_OPTION_NAME "_upnp", + CORE_OPTION_NAME_UPNP_LABEL_BE, + NULL, + CORE_OPTION_NAME_UPNP_INFO_0_BE, + NULL, + "system", + { + { "disabled", NULL }, + { "enabled", NULL }, + { NULL, NULL }, + }, + "enabled", + }, + + { + CORE_OPTION_NAME "_internal_resolution", + CORE_OPTION_NAME_INTERNAL_RESOLUTION_LABEL_BE, + NULL, + CORE_OPTION_NAME_INTERNAL_RESOLUTION_INFO_0_BE, + NULL, + "video", + { + { "320x240", OPTION_VAL_320X240_BE }, + { "640x480", OPTION_VAL_640X480_BE }, + { "800x600", OPTION_VAL_800X600_BE }, + { "960x720", OPTION_VAL_960X720_BE }, + { "1024x768", OPTION_VAL_1024X768_BE }, + { "1280x960", OPTION_VAL_1280X960_BE }, + { "1440x1080", OPTION_VAL_1440X1080_BE }, + { "1600x1200", OPTION_VAL_1600X1200_BE }, + { "1920x1440", OPTION_VAL_1920X1440_BE }, + { "2560x1920", OPTION_VAL_2560X1920_BE }, + { "2880x2160", OPTION_VAL_2880X2160_BE }, + { "3200x2400", OPTION_VAL_3200X2400_BE }, + { "3840x2880", OPTION_VAL_3840X2880_BE }, + { "4480x3360", OPTION_VAL_4480X3360_BE }, + { "5120x3840", OPTION_VAL_5120X3840_BE }, + { "5760x4320", OPTION_VAL_5760X4320_BE }, + { "6400x4800", OPTION_VAL_6400X4800_BE }, + { "7040x5280", OPTION_VAL_7040X5280_BE }, + { "7680x5760", OPTION_VAL_7680X5760_BE }, + { "8320x6240", OPTION_VAL_8320X6240_BE }, + { "8960x6720", OPTION_VAL_8960X6720_BE }, + { "9600x7200", OPTION_VAL_9600X7200_BE }, + { "10240x7680", OPTION_VAL_10240X7680_BE }, + { "10880x8160", OPTION_VAL_10880X8160_BE }, + { "11520x8640", OPTION_VAL_11520X8640_BE }, + { "12160x9120", OPTION_VAL_12160X9120_BE }, + { "12800x9600", OPTION_VAL_12800X9600_BE }, + { NULL, NULL }, + }, +#ifdef LOW_RES + "320x240", +#else + "640x480", +#endif + }, + { + CORE_OPTION_NAME "_cable_type", + CORE_OPTION_NAME_CABLE_TYPE_LABEL_BE, + NULL, + CORE_OPTION_NAME_CABLE_TYPE_INFO_0_BE, + NULL, + "video", + { + { "VGA", OPTION_VAL_VGA_BE }, + { "TV (RGB)", OPTION_VAL_TV_RGB_BE }, + { "TV (Composite)", OPTION_VAL_TV_COMPOSITE_BE }, + { NULL, NULL }, + }, + "TV (Composite)", + }, + { + CORE_OPTION_NAME "_broadcast", + CORE_OPTION_NAME_BROADCAST_LABEL_BE, + NULL, + "", + NULL, + "video", + { + { "NTSC", OPTION_VAL_NTSC_BE }, + { "PAL", OPTION_VAL_PAL_BE }, + { "PAL_N", OPTION_VAL_PAL_N_BE }, + { "PAL_M", OPTION_VAL_PAL_M_BE }, + { "Default", OPTION_VAL_DEFAULT_BE }, + { NULL, NULL }, + }, + "NTSC", + }, + { + CORE_OPTION_NAME "_screen_rotation", + CORE_OPTION_NAME_SCREEN_ROTATION_LABEL_BE, + NULL, + "", + NULL, + "video", + { + { "horizontal", OPTION_VAL_HORIZONTAL_BE }, + { "vertical", OPTION_VAL_VERTICAL_BE }, + { NULL, NULL }, + }, + "horizontal", + }, + {/* TODO: needs explanation */ + CORE_OPTION_NAME "_alpha_sorting", + CORE_OPTION_NAME_ALPHA_SORTING_LABEL_BE, + NULL, + "", + NULL, + "video", + { + { "per-strip (fast, least accurate)", OPTION_VAL_PER_STRIP_FAST_LEAST_ACCURATE_BE }, + { "per-triangle (normal)", OPTION_VAL_PER_TRIANGLE_NORMAL_BE }, +#if defined(HAVE_OIT) || defined(HAVE_VULKAN) || defined(HAVE_D3D11) + { "per-pixel (accurate)", OPTION_VAL_PER_PIXEL_ACCURATE_BE }, +#endif + { NULL, NULL }, + }, +#if defined(LOW_END) + "per-strip (fast, least accurate)", +#else + "per-triangle (normal)", +#endif + }, +#if defined(HAVE_OIT) || defined(HAVE_VULKAN) || defined(HAVE_D3D11) + { + CORE_OPTION_NAME "_oit_abuffer_size", + CORE_OPTION_NAME_OIT_ABUFFER_SIZE_LABEL_BE, + NULL, + CORE_OPTION_NAME_OIT_ABUFFER_SIZE_INFO_0_BE, + NULL, + "video", + { + { "512MB", OPTION_VAL_512MB_BE }, + { "1GB", OPTION_VAL_1GB_BE }, + { "2GB", OPTION_VAL_2GB_BE }, + { "4GB", OPTION_VAL_4GB_BE }, + { NULL, NULL }, + }, + "512MB", + }, + { + CORE_OPTION_NAME "_oit_layers", + CORE_OPTION_NAME_OIT_LAYERS_LABEL_BE, + NULL, + CORE_OPTION_NAME_OIT_LAYERS_INFO_0_BE, + NULL, + "video", + { + { "8", NULL }, + { "16", NULL }, + { "32", NULL }, + { "64", NULL }, + { "128", NULL }, + { NULL, NULL }, + }, + "32", + }, +#endif + { + CORE_OPTION_NAME "_emulate_framebuffer", + CORE_OPTION_NAME_EMULATE_FRAMEBUFFER_LABEL_BE, + NULL, + CORE_OPTION_NAME_EMULATE_FRAMEBUFFER_INFO_0_BE, + NULL, + "video", + { + { "disabled", NULL }, + { "enabled", NULL }, + { NULL, NULL }, + }, + "disabled", + }, + {/* TODO: needs explanation */ + CORE_OPTION_NAME "_enable_rttb", + CORE_OPTION_NAME_ENABLE_RTTB_LABEL_BE, + NULL, + CORE_OPTION_NAME_ENABLE_RTTB_INFO_0_BE, + NULL, + "video", + { + { "disabled", NULL }, + { "enabled", NULL }, + { NULL, NULL }, + }, + "disabled", + }, + {/* TODO: needs explanation */ + CORE_OPTION_NAME "_mipmapping", + CORE_OPTION_NAME_MIPMAPPING_LABEL_BE, + NULL, + "", + NULL, + "video", + { + { "disabled", NULL }, + { "enabled", NULL }, + { NULL, NULL }, + }, + "enabled", + }, + { + CORE_OPTION_NAME "_fog", + CORE_OPTION_NAME_FOG_LABEL_BE, + NULL, + "", + NULL, + "video", + { + { "disabled", NULL }, + { "enabled", NULL }, + { NULL, NULL }, + }, + "enabled", + }, + { + CORE_OPTION_NAME "_volume_modifier_enable", + CORE_OPTION_NAME_VOLUME_MODIFIER_ENABLE_LABEL_BE, + NULL, + CORE_OPTION_NAME_VOLUME_MODIFIER_ENABLE_INFO_0_BE, + NULL, + "video", + { + { "disabled", NULL }, + { "enabled", NULL }, + { NULL, NULL }, + }, + "enabled", + }, + { + CORE_OPTION_NAME "_anisotropic_filtering", + CORE_OPTION_NAME_ANISOTROPIC_FILTERING_LABEL_BE, + NULL, + CORE_OPTION_NAME_ANISOTROPIC_FILTERING_INFO_0_BE, + NULL, + "video", + { + { "off", "disabled" }, + { "2", NULL }, + { "4", NULL }, + { "8", NULL }, + { "16", NULL }, + { NULL, NULL }, + }, + "4", + }, + { + CORE_OPTION_NAME "_texture_filtering", + CORE_OPTION_NAME_TEXTURE_FILTERING_LABEL_BE, + NULL, + CORE_OPTION_NAME_TEXTURE_FILTERING_INFO_0_BE, + NULL, + "video", + { + { "0", OPTION_VAL_DEFAULT_BE }, + { "1", OPTION_VAL_1_BE }, + { "2", OPTION_VAL_2_BE }, + { NULL, NULL }, + }, + "0", + }, + { + CORE_OPTION_NAME "_delay_frame_swapping", + CORE_OPTION_NAME_DELAY_FRAME_SWAPPING_LABEL_BE, + NULL, + CORE_OPTION_NAME_DELAY_FRAME_SWAPPING_INFO_0_BE, + NULL, + "video", + { + { "disabled", NULL }, + { "enabled", NULL }, + { NULL, NULL }, + }, + "disabled", + }, + { + CORE_OPTION_NAME "_detect_vsync_swap_interval", + CORE_OPTION_NAME_DETECT_VSYNC_SWAP_INTERVAL_LABEL_BE, + NULL, + CORE_OPTION_NAME_DETECT_VSYNC_SWAP_INTERVAL_INFO_0_BE, + NULL, + "video", + { + { "disabled", NULL }, + { "enabled", NULL }, + { NULL, NULL }, + }, + "disabled", + }, + { + CORE_OPTION_NAME "_pvr2_filtering", + CORE_OPTION_NAME_PVR2_FILTERING_LABEL_BE, + NULL, + CORE_OPTION_NAME_PVR2_FILTERING_INFO_0_BE, + NULL, + "video", + { + { "disabled", NULL }, + { "enabled", NULL }, + { NULL, NULL }, + }, + "disabled", + }, +#ifdef _OPENMP + { + CORE_OPTION_NAME "_texupscale", + CORE_OPTION_NAME_TEXUPSCALE_LABEL_BE, + NULL, + CORE_OPTION_NAME_TEXUPSCALE_INFO_0_BE, + NULL, + "video", + { + { "1", "disabled" }, + { "2", OPTION_VAL_2_O27_BE }, + { "4", OPTION_VAL_4_BE }, + { "6", OPTION_VAL_6_BE }, + { NULL, NULL }, + }, + "1", + }, + {/* TODO: needs clarification */ + CORE_OPTION_NAME "_texupscale_max_filtered_texture_size", + CORE_OPTION_NAME_TEXUPSCALE_MAX_FILTERED_TEXTURE_SIZE_LABEL_BE, + NULL, + "", + NULL, + "video", + { + { "256", NULL }, + { "512", NULL }, + { "1024", NULL }, + { NULL, NULL }, + }, + "256", + }, +#endif + { + CORE_OPTION_NAME "_native_depth_interpolation", + CORE_OPTION_NAME_NATIVE_DEPTH_INTERPOLATION_LABEL_BE, + NULL, + CORE_OPTION_NAME_NATIVE_DEPTH_INTERPOLATION_INFO_0_BE, + NULL, + "video", + { + { "disabled", NULL }, + { "enabled", NULL }, + { NULL, NULL }, + }, + "disabled", + }, + { + CORE_OPTION_NAME "_threaded_rendering", + CORE_OPTION_NAME_THREADED_RENDERING_LABEL_BE, + NULL, + CORE_OPTION_NAME_THREADED_RENDERING_INFO_0_BE, + NULL, + "performance", + { + { "disabled", NULL }, + { "enabled", NULL }, + { NULL, NULL }, + }, + "enabled", + }, + { + CORE_OPTION_NAME "_auto_skip_frame", + CORE_OPTION_NAME_AUTO_SKIP_FRAME_LABEL_BE, + NULL, + CORE_OPTION_NAME_AUTO_SKIP_FRAME_INFO_0_BE, + NULL, + "performance", + { + { "disabled", NULL }, + { "some", OPTION_VAL_SOME_BE }, + { "more", OPTION_VAL_MORE_BE }, + { NULL, NULL }, + }, +#ifdef LOW_END + "some", +#else + "disabled", +#endif + }, + { + CORE_OPTION_NAME "_frame_skipping", + CORE_OPTION_NAME_FRAME_SKIPPING_LABEL_BE, + NULL, + CORE_OPTION_NAME_FRAME_SKIPPING_INFO_0_BE, + NULL, + "performance", + { + { "disabled", NULL }, + { "1", NULL }, + { "2", NULL }, + { "3", NULL }, + { "4", NULL }, + { "5", NULL }, + { "6", NULL }, + { NULL, NULL }, + }, + "disabled", + }, + { + CORE_OPTION_NAME "_widescreen_cheats", + CORE_OPTION_NAME_WIDESCREEN_CHEATS_LABEL_BE, + NULL, + CORE_OPTION_NAME_WIDESCREEN_CHEATS_INFO_0_BE, + NULL, + "hacks", + { + { "disabled", NULL }, + { "enabled", NULL }, + { NULL, NULL }, + }, + "disabled", + }, + { + CORE_OPTION_NAME "_widescreen_hack", + CORE_OPTION_NAME_WIDESCREEN_HACK_LABEL_BE, + NULL, + CORE_OPTION_NAME_WIDESCREEN_HACK_INFO_0_BE, + NULL, + "hacks", + { + { "disabled", NULL }, + { "enabled", NULL }, + { NULL, NULL }, + }, + "disabled", + }, + { + CORE_OPTION_NAME "_gdrom_fast_loading", + CORE_OPTION_NAME_GDROM_FAST_LOADING_LABEL_BE, + NULL, + CORE_OPTION_NAME_GDROM_FAST_LOADING_INFO_0_BE, + NULL, + "hacks", + { + { "disabled", NULL }, + { "enabled", NULL }, + { NULL, NULL }, + }, +#ifdef LOW_END + "enabled", +#else + "disabled", +#endif + }, + { + CORE_OPTION_NAME "_custom_textures", + CORE_OPTION_NAME_CUSTOM_TEXTURES_LABEL_BE, + NULL, + "", + NULL, + "hacks", + { + { "disabled", NULL }, + { "enabled", NULL }, + { NULL, NULL }, + }, + "disabled", + }, + {/* TODO: probably needs explanation */ + CORE_OPTION_NAME "_dump_textures", + CORE_OPTION_NAME_DUMP_TEXTURES_LABEL_BE, + NULL, + "", + NULL, + "hacks", + { + { "disabled", NULL }, + { "enabled", NULL }, + { NULL, NULL }, + }, + "disabled", + }, + { + CORE_OPTION_NAME "_analog_stick_deadzone", + CORE_OPTION_NAME_ANALOG_STICK_DEADZONE_LABEL_BE, + NULL, + "", + NULL, + "input", + { + { "0%", OPTION_VAL_0_BE }, + { "5%", OPTION_VAL_5_BE }, + { "10%", OPTION_VAL_10_BE }, + { "15%", OPTION_VAL_15_BE }, + { "20%", OPTION_VAL_20_BE }, + { "25%", OPTION_VAL_25_BE }, + { "30%", OPTION_VAL_30_BE }, + { NULL, NULL }, + }, + "15%", + }, + { + CORE_OPTION_NAME "_trigger_deadzone", + CORE_OPTION_NAME_TRIGGER_DEADZONE_LABEL_BE, + NULL, + "", + NULL, + "input", + { + { "0%", OPTION_VAL_0_BE }, + { "5%", OPTION_VAL_5_BE }, + { "10%", OPTION_VAL_10_BE }, + { "15%", OPTION_VAL_15_BE }, + { "20%", OPTION_VAL_20_BE }, + { "25%", OPTION_VAL_25_BE }, + { "30%", OPTION_VAL_30_BE }, + { NULL, NULL }, + }, + "0%", + }, + { + CORE_OPTION_NAME "_digital_triggers", + CORE_OPTION_NAME_DIGITAL_TRIGGERS_LABEL_BE, + NULL, + "", + NULL, + "input", + { + { "disabled", NULL }, + { "enabled", NULL }, + { NULL, NULL }, + }, + "disabled", + }, + { + CORE_OPTION_NAME "_enable_purupuru", + CORE_OPTION_NAME_ENABLE_PURUPURU_LABEL_BE, + NULL, + CORE_OPTION_NAME_ENABLE_PURUPURU_INFO_0_BE, + NULL, + "input", + { + { "disabled", NULL }, + { "enabled", NULL }, + { NULL, NULL }, + }, + "enabled", + }, + { + CORE_OPTION_NAME "_network_output", + CORE_OPTION_NAME_NETWORK_OUTPUT_LABEL_BE, + NULL, + CORE_OPTION_NAME_NETWORK_OUTPUT_INFO_0_BE, + NULL, + "input", + { + { "disabled", NULL }, + { "enabled", NULL }, + { NULL, NULL }, + }, + "disabled", + }, + { + CORE_OPTION_NAME "_show_lightgun_settings", + CORE_OPTION_NAME_SHOW_LIGHTGUN_SETTINGS_LABEL_BE, + NULL, + CORE_OPTION_NAME_SHOW_LIGHTGUN_SETTINGS_INFO_0_BE, + NULL, + "input", + { + { "enabled", NULL }, + { "disabled", NULL }, + { NULL, NULL}, + }, + "disabled" + }, + { + CORE_OPTION_NAME "_lightgun1_crosshair", + CORE_OPTION_NAME_LIGHTGUN1_CROSSHAIR_LABEL_BE, + NULL, + "", + NULL, + "input", + { + { "disabled", NULL }, + { "White", OPTION_VAL_WHITE_BE }, + { "Red", OPTION_VAL_RED_BE }, + { "Green", OPTION_VAL_GREEN_BE }, + { "Blue", OPTION_VAL_BLUE_BE }, + { NULL, NULL }, + }, + "disabled", + }, + { + CORE_OPTION_NAME "_lightgun2_crosshair", + CORE_OPTION_NAME_LIGHTGUN2_CROSSHAIR_LABEL_BE, + NULL, + "", + NULL, + "input", + { + { "disabled", NULL }, + { "White", OPTION_VAL_WHITE_BE }, + { "Red", OPTION_VAL_RED_BE }, + { "Green", OPTION_VAL_GREEN_BE }, + { "Blue", OPTION_VAL_BLUE_BE }, + { NULL, NULL }, + }, + "disabled", + }, + { + CORE_OPTION_NAME "_lightgun3_crosshair", + CORE_OPTION_NAME_LIGHTGUN3_CROSSHAIR_LABEL_BE, + NULL, + "", + NULL, + "input", + { + { "disabled", NULL }, + { "White", OPTION_VAL_WHITE_BE }, + { "Red", OPTION_VAL_RED_BE }, + { "Green", OPTION_VAL_GREEN_BE }, + { "Blue", OPTION_VAL_BLUE_BE }, + { NULL, NULL }, + }, + "disabled", + }, + { + CORE_OPTION_NAME "_lightgun4_crosshair", + CORE_OPTION_NAME_LIGHTGUN4_CROSSHAIR_LABEL_BE, + NULL, + "", + NULL, + "input", + { + { "disabled", NULL }, + { "White", OPTION_VAL_WHITE_BE }, + { "Red", OPTION_VAL_RED_BE }, + { "Green", OPTION_VAL_GREEN_BE }, + { "Blue", OPTION_VAL_BLUE_BE }, + { NULL, NULL }, + }, + "disabled", + }, + { + CORE_OPTION_NAME "_per_content_vmus", + CORE_OPTION_NAME_PER_CONTENT_VMUS_LABEL_BE, + CORE_OPTION_NAME_PER_CONTENT_VMUS_LABEL_CAT_BE, + CORE_OPTION_NAME_PER_CONTENT_VMUS_INFO_0_BE, + NULL, + "vmu", + { + { "disabled", NULL }, + { "VMU A1", OPTION_VAL_VMU_A1_BE }, + { "All VMUs", OPTION_VAL_ALL_VMUS_BE }, + { NULL, NULL}, + }, + "disabled", + }, + { + CORE_OPTION_NAME "_show_vmu_screen_settings", + CORE_OPTION_NAME_SHOW_VMU_SCREEN_SETTINGS_LABEL_BE, + CORE_OPTION_NAME_SHOW_VMU_SCREEN_SETTINGS_LABEL_CAT_BE, + CORE_OPTION_NAME_SHOW_VMU_SCREEN_SETTINGS_INFO_0_BE, + NULL, + "vmu", + { + { "enabled", NULL }, + { "disabled", NULL }, + { NULL, NULL}, + }, + "disabled" + }, + { + CORE_OPTION_NAME "_vmu1_screen_display", + CORE_OPTION_NAME_VMU1_SCREEN_DISPLAY_LABEL_BE, + NULL, + "", + NULL, + "vmu", + { + { "disabled", NULL }, + { "enabled", NULL }, + { NULL, NULL }, + }, + "disabled", + }, + { + CORE_OPTION_NAME "_vmu1_screen_position", + CORE_OPTION_NAME_VMU1_SCREEN_POSITION_LABEL_BE, + NULL, + "", + NULL, + "vmu", + { + { "Upper Left", OPTION_VAL_UPPER_LEFT_BE }, + { "Upper Right", OPTION_VAL_UPPER_RIGHT_BE }, + { "Lower Left", OPTION_VAL_LOWER_LEFT_BE }, + { "Lower Right", OPTION_VAL_LOWER_RIGHT_BE }, + { NULL, NULL }, + }, + "Upper Left", + }, + { + CORE_OPTION_NAME "_vmu1_screen_size_mult", + CORE_OPTION_NAME_VMU1_SCREEN_SIZE_MULT_LABEL_BE, + NULL, + "", + NULL, + "vmu", + { + { "1x", OPTION_VAL_1X_BE }, + { "2x", OPTION_VAL_2_O27_BE }, + { "3x", OPTION_VAL_3X_BE }, + { "4x", OPTION_VAL_4_BE }, + { "5x", OPTION_VAL_5X_BE }, + { NULL, NULL }, + }, + "1x", + }, + { + CORE_OPTION_NAME "_vmu1_pixel_on_color", + CORE_OPTION_NAME_VMU1_PIXEL_ON_COLOR_LABEL_BE, + NULL, + "", + NULL, + "vmu", + { + { "DEFAULT_ON 00", OPTION_VAL_DEFAULT_ON_00_BE }, + { "DEFAULT_OFF 01", OPTION_VAL_DEFAULT_OFF_01_BE }, + { "BLACK 02", OPTION_VAL_BLACK_02_BE }, + { "BLUE 03", OPTION_VAL_BLUE_BE }, + { "LIGHT_BLUE 04", OPTION_VAL_LIGHT_BLUE_04_BE }, + { "GREEN 05", OPTION_VAL_GREEN_BE }, + { "CYAN 06", OPTION_VAL_CYAN_06_BE }, + { "CYAN_BLUE 07", OPTION_VAL_CYAN_BLUE_07_BE }, + { "LIGHT_GREEN 08", OPTION_VAL_LIGHT_GREEN_08_BE }, + { "CYAN_GREEN 09", OPTION_VAL_CYAN_GREEN_09_BE }, + { "LIGHT_CYAN 10", OPTION_VAL_LIGHT_CYAN_10_BE }, + { "RED 11", OPTION_VAL_RED_BE }, + { "PURPLE 12", OPTION_VAL_PURPLE_12_BE }, + { "LIGHT_PURPLE 13", OPTION_VAL_LIGHT_PURPLE_13_BE }, + { "YELLOW 14", OPTION_VAL_YELLOW_14_BE }, + { "GRAY 15", OPTION_VAL_GRAY_15_BE }, + { "LIGHT_PURPLE_2 16", OPTION_VAL_LIGHT_PURPLE_2_16_BE }, + { "LIGHT_GREEN_2 17", OPTION_VAL_LIGHT_GREEN_2_17_BE }, + { "LIGHT_GREEN_3 18", OPTION_VAL_LIGHT_GREEN_3_18_BE }, + { "LIGHT_CYAN_2 19", OPTION_VAL_LIGHT_CYAN_2_19_BE }, + { "LIGHT_RED_2 20", OPTION_VAL_LIGHT_RED_2_20_BE }, + { "MAGENTA 21", OPTION_VAL_MAGENTA_21_BE }, + { "LIGHT_PURPLE_3 22", OPTION_VAL_LIGHT_PURPLE_3_22_BE }, + { "LIGHT_ORANGE 23", OPTION_VAL_LIGHT_ORANGE_23_BE }, + { "ORANGE 24", OPTION_VAL_ORANGE_24_BE }, + { "LIGHT_PURPLE_4 25", OPTION_VAL_LIGHT_PURPLE_4_25_BE }, + { "LIGHT_YELLOW 26", OPTION_VAL_LIGHT_YELLOW_26_BE }, + { "LIGHT_YELLOW_2 27", OPTION_VAL_LIGHT_YELLOW_2_27_BE }, + { "WHITE 28", OPTION_VAL_WHITE_BE }, + { NULL, NULL }, + }, + "DEFAULT_ON 00", + }, + { + CORE_OPTION_NAME "_vmu1_pixel_off_color", + CORE_OPTION_NAME_VMU1_PIXEL_OFF_COLOR_LABEL_BE, + NULL, + "", + NULL, + "vmu", + { + { "DEFAULT_OFF 01", OPTION_VAL_DEFAULT_OFF_01_BE }, + { "DEFAULT_ON 00", OPTION_VAL_DEFAULT_ON_00_BE }, + { "BLACK 02", OPTION_VAL_BLACK_02_BE }, + { "BLUE 03", OPTION_VAL_BLUE_BE }, + { "LIGHT_BLUE 04", OPTION_VAL_LIGHT_BLUE_04_BE }, + { "GREEN 05", OPTION_VAL_GREEN_BE }, + { "CYAN 06", OPTION_VAL_CYAN_06_BE }, + { "CYAN_BLUE 07", OPTION_VAL_CYAN_BLUE_07_BE }, + { "LIGHT_GREEN 08", OPTION_VAL_LIGHT_GREEN_08_BE }, + { "CYAN_GREEN 09", OPTION_VAL_CYAN_GREEN_09_BE }, + { "LIGHT_CYAN 10", OPTION_VAL_LIGHT_CYAN_10_BE }, + { "RED 11", OPTION_VAL_RED_BE }, + { "PURPLE 12", OPTION_VAL_PURPLE_12_BE }, + { "LIGHT_PURPLE 13", OPTION_VAL_LIGHT_PURPLE_13_BE }, + { "YELLOW 14", OPTION_VAL_YELLOW_14_BE }, + { "GRAY 15", OPTION_VAL_GRAY_15_BE }, + { "LIGHT_PURPLE_2 16", OPTION_VAL_LIGHT_PURPLE_2_16_BE }, + { "LIGHT_GREEN_2 17", OPTION_VAL_LIGHT_GREEN_2_17_BE }, + { "LIGHT_GREEN_3 18", OPTION_VAL_LIGHT_GREEN_3_18_BE }, + { "LIGHT_CYAN_2 19", OPTION_VAL_LIGHT_CYAN_2_19_BE }, + { "LIGHT_RED_2 20", OPTION_VAL_LIGHT_RED_2_20_BE }, + { "MAGENTA 21", OPTION_VAL_MAGENTA_21_BE }, + { "LIGHT_PURPLE_3 22", OPTION_VAL_LIGHT_PURPLE_3_22_BE }, + { "LIGHT_ORANGE 23", OPTION_VAL_LIGHT_ORANGE_23_BE }, + { "ORANGE 24", OPTION_VAL_ORANGE_24_BE }, + { "LIGHT_PURPLE_4 25", OPTION_VAL_LIGHT_PURPLE_4_25_BE }, + { "LIGHT_YELLOW 26", OPTION_VAL_LIGHT_YELLOW_26_BE }, + { "LIGHT_YELLOW_2 27", OPTION_VAL_LIGHT_YELLOW_2_27_BE }, + { "WHITE 28", OPTION_VAL_WHITE_BE }, + { NULL, NULL }, + }, + "DEFAULT_OFF 01", + }, + { + CORE_OPTION_NAME "_vmu1_screen_opacity", + CORE_OPTION_NAME_VMU1_SCREEN_OPACITY_LABEL_BE, + NULL, + "", + NULL, + "vmu", + { + { "10%", OPTION_VAL_10_BE }, + { "20%", OPTION_VAL_20_BE }, + { "30%", OPTION_VAL_30_BE }, + { "40%", OPTION_VAL_40_BE }, + { "50%", OPTION_VAL_50_BE }, + { "60%", OPTION_VAL_60_BE }, + { "70%", OPTION_VAL_70_BE }, + { "80%", OPTION_VAL_80_BE }, + { "90%", OPTION_VAL_90_BE }, + { "100%", OPTION_VAL_100_BE }, + { NULL, NULL }, + }, + "100%", + }, + { + CORE_OPTION_NAME "_vmu2_screen_display", + CORE_OPTION_NAME_VMU2_SCREEN_DISPLAY_LABEL_BE, + NULL, + "", + NULL, + "vmu", + { + { "disabled", NULL }, + { "enabled", NULL }, + { NULL, NULL }, + }, + "disabled", + }, + { + CORE_OPTION_NAME "_vmu2_screen_position", + CORE_OPTION_NAME_VMU2_SCREEN_POSITION_LABEL_BE, + NULL, + "", + NULL, + "vmu", + { + { "Upper Left", OPTION_VAL_UPPER_LEFT_BE }, + { "Upper Right", OPTION_VAL_UPPER_RIGHT_BE }, + { "Lower Left", OPTION_VAL_LOWER_LEFT_BE }, + { "Lower Right", OPTION_VAL_LOWER_RIGHT_BE }, + { NULL, NULL }, + }, + "Upper Left", + }, + { + CORE_OPTION_NAME "_vmu2_screen_size_mult", + CORE_OPTION_NAME_VMU2_SCREEN_SIZE_MULT_LABEL_BE, + NULL, + "", + NULL, + "vmu", + { + { "1x", OPTION_VAL_1X_BE }, + { "2x", OPTION_VAL_2_O27_BE }, + { "3x", OPTION_VAL_3X_BE }, + { "4x", OPTION_VAL_4_BE }, + { "5x", OPTION_VAL_5X_BE }, + { NULL, NULL }, + }, + "1x", + }, + { + CORE_OPTION_NAME "_vmu2_pixel_on_color", + CORE_OPTION_NAME_VMU2_PIXEL_ON_COLOR_LABEL_BE, + NULL, + "", + NULL, + "vmu", + { + { "DEFAULT_ON 00", OPTION_VAL_DEFAULT_ON_00_BE }, + { "DEFAULT_OFF 01", OPTION_VAL_DEFAULT_OFF_01_BE }, + { "BLACK 02", OPTION_VAL_BLACK_02_BE }, + { "BLUE 03", OPTION_VAL_BLUE_BE }, + { "LIGHT_BLUE 04", OPTION_VAL_LIGHT_BLUE_04_BE }, + { "GREEN 05", OPTION_VAL_GREEN_BE }, + { "CYAN 06", OPTION_VAL_CYAN_06_BE }, + { "CYAN_BLUE 07", OPTION_VAL_CYAN_BLUE_07_BE }, + { "LIGHT_GREEN 08", OPTION_VAL_LIGHT_GREEN_08_BE }, + { "CYAN_GREEN 09", OPTION_VAL_CYAN_GREEN_09_BE }, + { "LIGHT_CYAN 10", OPTION_VAL_LIGHT_CYAN_10_BE }, + { "RED 11", OPTION_VAL_RED_BE }, + { "PURPLE 12", OPTION_VAL_PURPLE_12_BE }, + { "LIGHT_PURPLE 13", OPTION_VAL_LIGHT_PURPLE_13_BE }, + { "YELLOW 14", OPTION_VAL_YELLOW_14_BE }, + { "GRAY 15", OPTION_VAL_GRAY_15_BE }, + { "LIGHT_PURPLE_2 16", OPTION_VAL_LIGHT_PURPLE_2_16_BE }, + { "LIGHT_GREEN_2 17", OPTION_VAL_LIGHT_GREEN_2_17_BE }, + { "LIGHT_GREEN_3 18", OPTION_VAL_LIGHT_GREEN_3_18_BE }, + { "LIGHT_CYAN_2 19", OPTION_VAL_LIGHT_CYAN_2_19_BE }, + { "LIGHT_RED_2 20", OPTION_VAL_LIGHT_RED_2_20_BE }, + { "MAGENTA 21", OPTION_VAL_MAGENTA_21_BE }, + { "LIGHT_PURPLE_3 22", OPTION_VAL_LIGHT_PURPLE_3_22_BE }, + { "LIGHT_ORANGE 23", OPTION_VAL_LIGHT_ORANGE_23_BE }, + { "ORANGE 24", OPTION_VAL_ORANGE_24_BE }, + { "LIGHT_PURPLE_4 25", OPTION_VAL_LIGHT_PURPLE_4_25_BE }, + { "LIGHT_YELLOW 26", OPTION_VAL_LIGHT_YELLOW_26_BE }, + { "LIGHT_YELLOW_2 27", OPTION_VAL_LIGHT_YELLOW_2_27_BE }, + { "WHITE 28", OPTION_VAL_WHITE_BE }, + { NULL, NULL }, + }, + "DEFAULT_ON 00", + }, + { + CORE_OPTION_NAME "_vmu2_pixel_off_color", + CORE_OPTION_NAME_VMU2_PIXEL_OFF_COLOR_LABEL_BE, + NULL, + "", + NULL, + "vmu", + { + { "DEFAULT_OFF 01", OPTION_VAL_DEFAULT_OFF_01_BE }, + { "DEFAULT_ON 00", OPTION_VAL_DEFAULT_ON_00_BE }, + { "BLACK 02", OPTION_VAL_BLACK_02_BE }, + { "BLUE 03", OPTION_VAL_BLUE_BE }, + { "LIGHT_BLUE 04", OPTION_VAL_LIGHT_BLUE_04_BE }, + { "GREEN 05", OPTION_VAL_GREEN_BE }, + { "CYAN 06", OPTION_VAL_CYAN_06_BE }, + { "CYAN_BLUE 07", OPTION_VAL_CYAN_BLUE_07_BE }, + { "LIGHT_GREEN 08", OPTION_VAL_LIGHT_GREEN_08_BE }, + { "CYAN_GREEN 09", OPTION_VAL_CYAN_GREEN_09_BE }, + { "LIGHT_CYAN 10", OPTION_VAL_LIGHT_CYAN_10_BE }, + { "RED 11", OPTION_VAL_RED_BE }, + { "PURPLE 12", OPTION_VAL_PURPLE_12_BE }, + { "LIGHT_PURPLE 13", OPTION_VAL_LIGHT_PURPLE_13_BE }, + { "YELLOW 14", OPTION_VAL_YELLOW_14_BE }, + { "GRAY 15", OPTION_VAL_GRAY_15_BE }, + { "LIGHT_PURPLE_2 16", OPTION_VAL_LIGHT_PURPLE_2_16_BE }, + { "LIGHT_GREEN_2 17", OPTION_VAL_LIGHT_GREEN_2_17_BE }, + { "LIGHT_GREEN_3 18", OPTION_VAL_LIGHT_GREEN_3_18_BE }, + { "LIGHT_CYAN_2 19", OPTION_VAL_LIGHT_CYAN_2_19_BE }, + { "LIGHT_RED_2 20", OPTION_VAL_LIGHT_RED_2_20_BE }, + { "MAGENTA 21", OPTION_VAL_MAGENTA_21_BE }, + { "LIGHT_PURPLE_3 22", OPTION_VAL_LIGHT_PURPLE_3_22_BE }, + { "LIGHT_ORANGE 23", OPTION_VAL_LIGHT_ORANGE_23_BE }, + { "ORANGE 24", OPTION_VAL_ORANGE_24_BE }, + { "LIGHT_PURPLE_4 25", OPTION_VAL_LIGHT_PURPLE_4_25_BE }, + { "LIGHT_YELLOW 26", OPTION_VAL_LIGHT_YELLOW_26_BE }, + { "LIGHT_YELLOW_2 27", OPTION_VAL_LIGHT_YELLOW_2_27_BE }, + { "WHITE 28", OPTION_VAL_WHITE_BE }, + { NULL, NULL }, + }, + "DEFAULT_OFF 01", + }, + { + CORE_OPTION_NAME "_vmu2_screen_opacity", + CORE_OPTION_NAME_VMU2_SCREEN_OPACITY_LABEL_BE, + NULL, + "", + NULL, + "vmu", + { + { "10%", OPTION_VAL_10_BE }, + { "20%", OPTION_VAL_20_BE }, + { "30%", OPTION_VAL_30_BE }, + { "40%", OPTION_VAL_40_BE }, + { "50%", OPTION_VAL_50_BE }, + { "60%", OPTION_VAL_60_BE }, + { "70%", OPTION_VAL_70_BE }, + { "80%", OPTION_VAL_80_BE }, + { "90%", OPTION_VAL_90_BE }, + { "100%", OPTION_VAL_100_BE }, + { NULL, NULL }, + }, + "100%", + }, + { + CORE_OPTION_NAME "_vmu3_screen_display", + CORE_OPTION_NAME_VMU3_SCREEN_DISPLAY_LABEL_BE, + NULL, + "", + NULL, + "vmu", + { + { "disabled", NULL }, + { "enabled", NULL }, + { NULL, NULL }, + }, + "disabled", + }, + { + CORE_OPTION_NAME "_vmu3_screen_position", + CORE_OPTION_NAME_VMU3_SCREEN_POSITION_LABEL_BE, + NULL, + "", + NULL, + "vmu", + { + { "Upper Left", OPTION_VAL_UPPER_LEFT_BE }, + { "Upper Right", OPTION_VAL_UPPER_RIGHT_BE }, + { "Lower Left", OPTION_VAL_LOWER_LEFT_BE }, + { "Lower Right", OPTION_VAL_LOWER_RIGHT_BE }, + { NULL, NULL }, + }, + "Upper Left", + }, + { + CORE_OPTION_NAME "_vmu3_screen_size_mult", + CORE_OPTION_NAME_VMU3_SCREEN_SIZE_MULT_LABEL_BE, + NULL, + "", + NULL, + "vmu", + { + { "1x", OPTION_VAL_1X_BE }, + { "2x", OPTION_VAL_2_O27_BE }, + { "3x", OPTION_VAL_3X_BE }, + { "4x", OPTION_VAL_4_BE }, + { "5x", OPTION_VAL_5X_BE }, + { NULL, NULL }, + }, + "1x", + }, + { + CORE_OPTION_NAME "_vmu3_pixel_on_color", + CORE_OPTION_NAME_VMU3_PIXEL_ON_COLOR_LABEL_BE, + NULL, + "", + NULL, + "vmu", + { + { "DEFAULT_ON 00", OPTION_VAL_DEFAULT_ON_00_BE }, + { "DEFAULT_OFF 01", OPTION_VAL_DEFAULT_OFF_01_BE }, + { "BLACK 02", OPTION_VAL_BLACK_02_BE }, + { "BLUE 03", OPTION_VAL_BLUE_BE }, + { "LIGHT_BLUE 04", OPTION_VAL_LIGHT_BLUE_04_BE }, + { "GREEN 05", OPTION_VAL_GREEN_BE }, + { "CYAN 06", OPTION_VAL_CYAN_06_BE }, + { "CYAN_BLUE 07", OPTION_VAL_CYAN_BLUE_07_BE }, + { "LIGHT_GREEN 08", OPTION_VAL_LIGHT_GREEN_08_BE }, + { "CYAN_GREEN 09", OPTION_VAL_CYAN_GREEN_09_BE }, + { "LIGHT_CYAN 10", OPTION_VAL_LIGHT_CYAN_10_BE }, + { "RED 11", OPTION_VAL_RED_BE }, + { "PURPLE 12", OPTION_VAL_PURPLE_12_BE }, + { "LIGHT_PURPLE 13", OPTION_VAL_LIGHT_PURPLE_13_BE }, + { "YELLOW 14", OPTION_VAL_YELLOW_14_BE }, + { "GRAY 15", OPTION_VAL_GRAY_15_BE }, + { "LIGHT_PURPLE_2 16", OPTION_VAL_LIGHT_PURPLE_2_16_BE }, + { "LIGHT_GREEN_2 17", OPTION_VAL_LIGHT_GREEN_2_17_BE }, + { "LIGHT_GREEN_3 18", OPTION_VAL_LIGHT_GREEN_3_18_BE }, + { "LIGHT_CYAN_2 19", OPTION_VAL_LIGHT_CYAN_2_19_BE }, + { "LIGHT_RED_2 20", OPTION_VAL_LIGHT_RED_2_20_BE }, + { "MAGENTA 21", OPTION_VAL_MAGENTA_21_BE }, + { "LIGHT_PURPLE_3 22", OPTION_VAL_LIGHT_PURPLE_3_22_BE }, + { "LIGHT_ORANGE 23", OPTION_VAL_LIGHT_ORANGE_23_BE }, + { "ORANGE 24", OPTION_VAL_ORANGE_24_BE }, + { "LIGHT_PURPLE_4 25", OPTION_VAL_LIGHT_PURPLE_4_25_BE }, + { "LIGHT_YELLOW 26", OPTION_VAL_LIGHT_YELLOW_26_BE }, + { "LIGHT_YELLOW_2 27", OPTION_VAL_LIGHT_YELLOW_2_27_BE }, + { "WHITE 28", OPTION_VAL_WHITE_BE }, + { NULL, NULL }, + }, + "DEFAULT_ON 00", + }, + { + CORE_OPTION_NAME "_vmu3_pixel_off_color", + CORE_OPTION_NAME_VMU3_PIXEL_OFF_COLOR_LABEL_BE, + NULL, + "", + NULL, + "vmu", + { + { "DEFAULT_OFF 01", OPTION_VAL_DEFAULT_OFF_01_BE }, + { "DEFAULT_ON 00", OPTION_VAL_DEFAULT_ON_00_BE }, + { "BLACK 02", OPTION_VAL_BLACK_02_BE }, + { "BLUE 03", OPTION_VAL_BLUE_BE }, + { "LIGHT_BLUE 04", OPTION_VAL_LIGHT_BLUE_04_BE }, + { "GREEN 05", OPTION_VAL_GREEN_BE }, + { "CYAN 06", OPTION_VAL_CYAN_06_BE }, + { "CYAN_BLUE 07", OPTION_VAL_CYAN_BLUE_07_BE }, + { "LIGHT_GREEN 08", OPTION_VAL_LIGHT_GREEN_08_BE }, + { "CYAN_GREEN 09", OPTION_VAL_CYAN_GREEN_09_BE }, + { "LIGHT_CYAN 10", OPTION_VAL_LIGHT_CYAN_10_BE }, + { "RED 11", OPTION_VAL_RED_BE }, + { "PURPLE 12", OPTION_VAL_PURPLE_12_BE }, + { "LIGHT_PURPLE 13", OPTION_VAL_LIGHT_PURPLE_13_BE }, + { "YELLOW 14", OPTION_VAL_YELLOW_14_BE }, + { "GRAY 15", OPTION_VAL_GRAY_15_BE }, + { "LIGHT_PURPLE_2 16", OPTION_VAL_LIGHT_PURPLE_2_16_BE }, + { "LIGHT_GREEN_2 17", OPTION_VAL_LIGHT_GREEN_2_17_BE }, + { "LIGHT_GREEN_3 18", OPTION_VAL_LIGHT_GREEN_3_18_BE }, + { "LIGHT_CYAN_2 19", OPTION_VAL_LIGHT_CYAN_2_19_BE }, + { "LIGHT_RED_2 20", OPTION_VAL_LIGHT_RED_2_20_BE }, + { "MAGENTA 21", OPTION_VAL_MAGENTA_21_BE }, + { "LIGHT_PURPLE_3 22", OPTION_VAL_LIGHT_PURPLE_3_22_BE }, + { "LIGHT_ORANGE 23", OPTION_VAL_LIGHT_ORANGE_23_BE }, + { "ORANGE 24", OPTION_VAL_ORANGE_24_BE }, + { "LIGHT_PURPLE_4 25", OPTION_VAL_LIGHT_PURPLE_4_25_BE }, + { "LIGHT_YELLOW 26", OPTION_VAL_LIGHT_YELLOW_26_BE }, + { "LIGHT_YELLOW_2 27", OPTION_VAL_LIGHT_YELLOW_2_27_BE }, + { "WHITE 28", OPTION_VAL_WHITE_BE }, + { NULL, NULL }, + }, + "DEFAULT_OFF 01", + }, + { + CORE_OPTION_NAME "_vmu3_screen_opacity", + CORE_OPTION_NAME_VMU3_SCREEN_OPACITY_LABEL_BE, + NULL, + "", + NULL, + "vmu", + { + { "10%", OPTION_VAL_10_BE }, + { "20%", OPTION_VAL_20_BE }, + { "30%", OPTION_VAL_30_BE }, + { "40%", OPTION_VAL_40_BE }, + { "50%", OPTION_VAL_50_BE }, + { "60%", OPTION_VAL_60_BE }, + { "70%", OPTION_VAL_70_BE }, + { "80%", OPTION_VAL_80_BE }, + { "90%", OPTION_VAL_90_BE }, + { "100%", OPTION_VAL_100_BE }, + { NULL, NULL }, + }, + "100%", + }, + { + CORE_OPTION_NAME "_vmu4_screen_display", + CORE_OPTION_NAME_VMU4_SCREEN_DISPLAY_LABEL_BE, + NULL, + "", + NULL, + "vmu", + { + { "disabled", NULL }, + { "enabled", NULL }, + { NULL, NULL }, + }, + "disabled", + }, + { + CORE_OPTION_NAME "_vmu4_screen_position", + CORE_OPTION_NAME_VMU4_SCREEN_POSITION_LABEL_BE, + NULL, + "", + NULL, + "vmu", + { + { "Upper Left", OPTION_VAL_UPPER_LEFT_BE }, + { "Upper Right", OPTION_VAL_UPPER_RIGHT_BE }, + { "Lower Left", OPTION_VAL_LOWER_LEFT_BE }, + { "Lower Right", OPTION_VAL_LOWER_RIGHT_BE }, + { NULL, NULL }, + }, + "Upper Left", + }, + { + CORE_OPTION_NAME "_vmu4_screen_size_mult", + CORE_OPTION_NAME_VMU4_SCREEN_SIZE_MULT_LABEL_BE, + NULL, + "", + NULL, + "vmu", + { + { "1x", OPTION_VAL_1X_BE }, + { "2x", OPTION_VAL_2_O27_BE }, + { "3x", OPTION_VAL_3X_BE }, + { "4x", OPTION_VAL_4_BE }, + { "5x", OPTION_VAL_5X_BE }, + { NULL, NULL }, + }, + "1x", + }, + { + CORE_OPTION_NAME "_vmu4_pixel_on_color", + CORE_OPTION_NAME_VMU4_PIXEL_ON_COLOR_LABEL_BE, + NULL, + "", + NULL, + "vmu", + { + { "DEFAULT_ON 00", OPTION_VAL_DEFAULT_ON_00_BE }, + { "DEFAULT_OFF 01", OPTION_VAL_DEFAULT_OFF_01_BE }, + { "BLACK 02", OPTION_VAL_BLACK_02_BE }, + { "BLUE 03", OPTION_VAL_BLUE_BE }, + { "LIGHT_BLUE 04", OPTION_VAL_LIGHT_BLUE_04_BE }, + { "GREEN 05", OPTION_VAL_GREEN_BE }, + { "CYAN 06", OPTION_VAL_CYAN_06_BE }, + { "CYAN_BLUE 07", OPTION_VAL_CYAN_BLUE_07_BE }, + { "LIGHT_GREEN 08", OPTION_VAL_LIGHT_GREEN_08_BE }, + { "CYAN_GREEN 09", OPTION_VAL_CYAN_GREEN_09_BE }, + { "LIGHT_CYAN 10", OPTION_VAL_LIGHT_CYAN_10_BE }, + { "RED 11", OPTION_VAL_RED_BE }, + { "PURPLE 12", OPTION_VAL_PURPLE_12_BE }, + { "LIGHT_PURPLE 13", OPTION_VAL_LIGHT_PURPLE_13_BE }, + { "YELLOW 14", OPTION_VAL_YELLOW_14_BE }, + { "GRAY 15", OPTION_VAL_GRAY_15_BE }, + { "LIGHT_PURPLE_2 16", OPTION_VAL_LIGHT_PURPLE_2_16_BE }, + { "LIGHT_GREEN_2 17", OPTION_VAL_LIGHT_GREEN_2_17_BE }, + { "LIGHT_GREEN_3 18", OPTION_VAL_LIGHT_GREEN_3_18_BE }, + { "LIGHT_CYAN_2 19", OPTION_VAL_LIGHT_CYAN_2_19_BE }, + { "LIGHT_RED_2 20", OPTION_VAL_LIGHT_RED_2_20_BE }, + { "MAGENTA 21", OPTION_VAL_MAGENTA_21_BE }, + { "LIGHT_PURPLE_3 22", OPTION_VAL_LIGHT_PURPLE_3_22_BE }, + { "LIGHT_ORANGE 23", OPTION_VAL_LIGHT_ORANGE_23_BE }, + { "ORANGE 24", OPTION_VAL_ORANGE_24_BE }, + { "LIGHT_PURPLE_4 25", OPTION_VAL_LIGHT_PURPLE_4_25_BE }, + { "LIGHT_YELLOW 26", OPTION_VAL_LIGHT_YELLOW_26_BE }, + { "LIGHT_YELLOW_2 27", OPTION_VAL_LIGHT_YELLOW_2_27_BE }, + { "WHITE 28", OPTION_VAL_WHITE_BE }, + { NULL, NULL }, + }, + "DEFAULT_ON 00", + }, + { + CORE_OPTION_NAME "_vmu4_pixel_off_color", + CORE_OPTION_NAME_VMU4_PIXEL_OFF_COLOR_LABEL_BE, + NULL, + "", + NULL, + "vmu", + { + { "DEFAULT_OFF 01", OPTION_VAL_DEFAULT_OFF_01_BE }, + { "DEFAULT_ON 00", OPTION_VAL_DEFAULT_ON_00_BE }, + { "BLACK 02", OPTION_VAL_BLACK_02_BE }, + { "BLUE 03", OPTION_VAL_BLUE_BE }, + { "LIGHT_BLUE 04", OPTION_VAL_LIGHT_BLUE_04_BE }, + { "GREEN 05", OPTION_VAL_GREEN_BE }, + { "CYAN 06", OPTION_VAL_CYAN_06_BE }, + { "CYAN_BLUE 07", OPTION_VAL_CYAN_BLUE_07_BE }, + { "LIGHT_GREEN 08", OPTION_VAL_LIGHT_GREEN_08_BE }, + { "CYAN_GREEN 09", OPTION_VAL_CYAN_GREEN_09_BE }, + { "LIGHT_CYAN 10", OPTION_VAL_LIGHT_CYAN_10_BE }, + { "RED 11", OPTION_VAL_RED_BE }, + { "PURPLE 12", OPTION_VAL_PURPLE_12_BE }, + { "LIGHT_PURPLE 13", OPTION_VAL_LIGHT_PURPLE_13_BE }, + { "YELLOW 14", OPTION_VAL_YELLOW_14_BE }, + { "GRAY 15", OPTION_VAL_GRAY_15_BE }, + { "LIGHT_PURPLE_2 16", OPTION_VAL_LIGHT_PURPLE_2_16_BE }, + { "LIGHT_GREEN_2 17", OPTION_VAL_LIGHT_GREEN_2_17_BE }, + { "LIGHT_GREEN_3 18", OPTION_VAL_LIGHT_GREEN_3_18_BE }, + { "LIGHT_CYAN_2 19", OPTION_VAL_LIGHT_CYAN_2_19_BE }, + { "LIGHT_RED_2 20", OPTION_VAL_LIGHT_RED_2_20_BE }, + { "MAGENTA 21", OPTION_VAL_MAGENTA_21_BE }, + { "LIGHT_PURPLE_3 22", OPTION_VAL_LIGHT_PURPLE_3_22_BE }, + { "LIGHT_ORANGE 23", OPTION_VAL_LIGHT_ORANGE_23_BE }, + { "ORANGE 24", OPTION_VAL_ORANGE_24_BE }, + { "LIGHT_PURPLE_4 25", OPTION_VAL_LIGHT_PURPLE_4_25_BE }, + { "LIGHT_YELLOW 26", OPTION_VAL_LIGHT_YELLOW_26_BE }, + { "LIGHT_YELLOW_2 27", OPTION_VAL_LIGHT_YELLOW_2_27_BE }, + { "WHITE 28", OPTION_VAL_WHITE_BE }, + { NULL, NULL }, + }, + "DEFAULT_OFF 01", + }, + { + CORE_OPTION_NAME "_vmu4_screen_opacity", + CORE_OPTION_NAME_VMU4_SCREEN_OPACITY_LABEL_BE, + NULL, + "", + NULL, + "vmu", + { + { "10%", OPTION_VAL_10_BE }, + { "20%", OPTION_VAL_20_BE }, + { "30%", OPTION_VAL_30_BE }, + { "40%", OPTION_VAL_40_BE }, + { "50%", OPTION_VAL_50_BE }, + { "60%", OPTION_VAL_60_BE }, + { "70%", OPTION_VAL_70_BE }, + { "80%", OPTION_VAL_80_BE }, + { "90%", OPTION_VAL_90_BE }, + { "100%", OPTION_VAL_100_BE }, + { NULL, NULL }, + }, + "100%", + }, + { NULL, NULL, NULL, NULL, NULL, NULL, {{0}}, NULL }, +}; +struct retro_core_options_v2 options_be = { + option_cats_be, + option_defs_be +}; + /* RETRO_LANGUAGE_CA */ #define CATEGORY_SYSTEM_LABEL_CA "Sistema" @@ -6817,7 +8504,7 @@ struct retro_core_options_v2 options_chs = { #define CATEGORY_INPUT_INFO_0_CHT NULL #define CATEGORY_VMU_LABEL_CHT NULL #define CATEGORY_VMU_INFO_0_CHT NULL -#define CORE_OPTION_NAME_REGION_LABEL_CHT "地區" +#define CORE_OPTION_NAME_REGION_LABEL_CHT "發售地" #define OPTION_VAL_JAPAN_CHT NULL #define OPTION_VAL_USA_CHT NULL #define OPTION_VAL_EUROPE_CHT NULL @@ -50737,12 +52424,12 @@ struct retro_core_options_v2 options_ru = { #define OPTION_VAL_11520X8640_SK NULL #define OPTION_VAL_12160X9120_SK NULL #define OPTION_VAL_12800X9600_SK NULL -#define CORE_OPTION_NAME_CABLE_TYPE_LABEL_SK NULL +#define CORE_OPTION_NAME_CABLE_TYPE_LABEL_SK "Typ kábla" #define CORE_OPTION_NAME_CABLE_TYPE_INFO_0_SK NULL #define OPTION_VAL_VGA_SK NULL #define OPTION_VAL_TV_RGB_SK NULL #define OPTION_VAL_TV_COMPOSITE_SK "TV (composite)" -#define CORE_OPTION_NAME_BROADCAST_LABEL_SK NULL +#define CORE_OPTION_NAME_BROADCAST_LABEL_SK "Vysielací štandard" #define OPTION_VAL_NTSC_SK NULL #define OPTION_VAL_PAL_SK "PAL (svet)" #define OPTION_VAL_PAL_N_SK "PAL-N (Argentína, Paraguaj, Uruguaj)" @@ -50770,7 +52457,7 @@ struct retro_core_options_v2 options_ru = { #define CORE_OPTION_NAME_FOG_LABEL_SK NULL #define CORE_OPTION_NAME_VOLUME_MODIFIER_ENABLE_LABEL_SK NULL #define CORE_OPTION_NAME_VOLUME_MODIFIER_ENABLE_INFO_0_SK NULL -#define CORE_OPTION_NAME_ANISOTROPIC_FILTERING_LABEL_SK NULL +#define CORE_OPTION_NAME_ANISOTROPIC_FILTERING_LABEL_SK "Anizotropné filtrovanie" #define CORE_OPTION_NAME_ANISOTROPIC_FILTERING_INFO_0_SK NULL #define CORE_OPTION_NAME_TEXTURE_FILTERING_LABEL_SK "Filtrovanie textúr" #define CORE_OPTION_NAME_TEXTURE_FILTERING_INFO_0_SK NULL @@ -50842,8 +52529,8 @@ struct retro_core_options_v2 options_ru = { #define CORE_OPTION_NAME_VMU1_SCREEN_POSITION_LABEL_SK NULL #define OPTION_VAL_UPPER_LEFT_SK "Hore vľavo" #define OPTION_VAL_UPPER_RIGHT_SK "Hore vpravo" -#define OPTION_VAL_LOWER_LEFT_SK NULL -#define OPTION_VAL_LOWER_RIGHT_SK NULL +#define OPTION_VAL_LOWER_LEFT_SK "Vľavo dolu" +#define OPTION_VAL_LOWER_RIGHT_SK "Vpravo dolu" #define CORE_OPTION_NAME_VMU1_SCREEN_SIZE_MULT_LABEL_SK NULL #define OPTION_VAL_1X_SK NULL #define OPTION_VAL_3X_SK NULL From 252ad711f10521afb11dffe213f29180d659a70c Mon Sep 17 00:00:00 2001 From: Flyinghead Date: Sun, 2 Apr 2023 22:02:53 +0200 Subject: [PATCH 05/16] vk: throw if vmaMapMemory fails MINIDUMP-PX --- core/rend/vulkan/vmallocator.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/core/rend/vulkan/vmallocator.h b/core/rend/vulkan/vmallocator.h index c6e89d4c2..4d61d4f10 100644 --- a/core/rend/vulkan/vmallocator.h +++ b/core/rend/vulkan/vmallocator.h @@ -63,7 +63,9 @@ public: if (allocInfo.pMappedData != nullptr) return allocInfo.pMappedData; void *p; - vmaMapMemory(allocator, allocation, &p); + VkResult res = vmaMapMemory(allocator, allocation, &p); + if (res != VK_SUCCESS) + vk::throwResultException((vk::Result)res, "vmaMapMemory failed"); VkMemoryPropertyFlags flags; vmaGetMemoryTypeProperties(allocator, allocInfo.memoryType, &flags); if ((flags & VK_MEMORY_PROPERTY_HOST_CACHED_BIT) && (flags & VK_MEMORY_PROPERTY_HOST_COHERENT_BIT) == 0) From f94a08f12f98500c674079d152d0d63ef8c8bf84 Mon Sep 17 00:00:00 2001 From: Flyinghead Date: Sun, 2 Apr 2023 22:06:22 +0200 Subject: [PATCH 06/16] mmu: avoid crash due to approximative fast mmu matching Fixes MINIDUMP-EA (Sonic Shuffle) --- core/hw/sh4/modules/mmu.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/core/hw/sh4/modules/mmu.cpp b/core/hw/sh4/modules/mmu.cpp index 49aa9ceeb..bda465e3e 100644 --- a/core/hw/sh4/modules/mmu.cpp +++ b/core/hw/sh4/modules/mmu.cpp @@ -467,7 +467,13 @@ retry_ITLB_Match: if (entry == 4) { - verify(mmach == false); +#ifndef FAST_MMU + verify(!mmach); +#else + // the matching may be approximative + if (mmach) + return MMU_ERROR_TLB_MISS; +#endif const TLB_Entry *tlb_entry; u32 lookup = mmu_full_lookup(va, &tlb_entry, rv); From 187674ddac84038922bb29a0f89e99ecf3135e52 Mon Sep 17 00:00:00 2001 From: Flyinghead Date: Tue, 4 Apr 2023 22:37:06 +0200 Subject: [PATCH 07/16] uTip is no more --- .github/FUNDING.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index 8dcaf19dd..dc16c8846 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -1 +1 @@ -custom: ['https://utip.io/flyinghead', 'https://www.paypal.com/paypalme/FlycastEmu'] +custom: ['https://www.paypal.com/paypalme/FlycastEmu'] From c8a45d95a799cd8445cc1f0cbbebcbb59eafc6d2 Mon Sep 17 00:00:00 2001 From: Flyinghead Date: Mon, 24 Apr 2023 17:38:49 +0200 Subject: [PATCH 08/16] dynarec: fix mov64 edge case when registers must be swapped Handle case where mov64 must swap its operands depending on register allocation. Fix canonical call for FSCA when return operands are register-allocated. Issue #1020 --- core/rec-ARM/rec_arm.cpp | 30 ++++++++++++++++++++-- core/rec-ARM64/rec_arm64.cpp | 27 ++++++++++++++++--- core/rec-x64/rec_x64.cpp | 50 ++++++++++++++++++++++++++---------- 3 files changed, 88 insertions(+), 19 deletions(-) diff --git a/core/rec-ARM/rec_arm.cpp b/core/rec-ARM/rec_arm.cpp index 78faad946..bdd06dcf5 100644 --- a/core/rec-ARM/rec_arm.cpp +++ b/core/rec-ARM/rec_arm.cpp @@ -543,6 +543,17 @@ void ngen_CC_Call(shil_opcode* op, void* function) fd = SRegister(fd.GetCode() + 1); } call(function); + for (const CC_PS& ccParam : CC_pars) + { + const shil_param& prm = *ccParam.par; + if (ccParam.type == CPT_ptr && prm.count() == 2 && reg.IsAllocf(prm) && (op->rd._reg == prm._reg || op->rd2._reg == prm._reg)) + { + // fsca rd param is a pointer to a 64-bit reg so reload the regs if allocated + const int shRegOffs = (u8*)GetRegPtr(prm._reg) - (u8*)&p_sh4rcb->cntx - sizeof(Sh4cntx); + ass.Vldr(reg.mapFReg(prm, 0), MemOperand(r8, shRegOffs)); + ass.Vldr(reg.mapFReg(prm, 1), MemOperand(r8, shRegOffs + 4)); + } + } } void ngen_CC_Finish(shil_opcode* op) @@ -1415,8 +1426,23 @@ static void ngen_compile_opcode(RuntimeBlockInfo* block, shil_opcode* op, bool o if (reg.IsAllocf(op->rd)) { verify(reg.IsAllocf(op->rs1)); - ass.Vmov(reg.mapFReg(op->rd, 0), reg.mapFReg(op->rs1, 0)); - ass.Vmov(reg.mapFReg(op->rd, 1), reg.mapFReg(op->rs1, 1)); + SRegister rd0 = reg.mapFReg(op->rd, 0); + SRegister rs0 = reg.mapFReg(op->rs1, 0); + SRegister rd1 = reg.mapFReg(op->rd, 1); + SRegister rs1 = reg.mapFReg(op->rs1, 1); + if (rd0.Is(rs1)) + { + ass.Vmov(s0, rd0); + ass.Vmov(rd0, rs0); + ass.Vmov(rd1, s0); + } + else + { + if (!rd0.Is(rs0)) + ass.Vmov(rd0, rs0); + if (!rd1.Is(rs1)) + ass.Vmov(rd1, rs1); + } } else { diff --git a/core/rec-ARM64/rec_arm64.cpp b/core/rec-ARM64/rec_arm64.cpp index 3463d1e6c..2f447b808 100644 --- a/core/rec-ARM64/rec_arm64.cpp +++ b/core/rec-ARM64/rec_arm64.cpp @@ -401,12 +401,21 @@ public: { const VRegister& rd0 = regalloc.MapVRegister(op.rd, 0); const VRegister& rs0 = regalloc.MapVRegister(op.rs1, 0); - if (!rd0.Is(rs0)) - Fmov(rd0, rs0); const VRegister& rd1 = regalloc.MapVRegister(op.rd, 1); const VRegister& rs1 = regalloc.MapVRegister(op.rs1, 1); - if (!rd1.Is(rs1)) - Fmov(rd1, rs1); + if (rd0.Is(rs1)) + { + Fmov(w0, rd0); + Fmov(rd0, rs0); + Fmov(rd1, w0); + } + else + { + if (!rd0.Is(rs0)) + Fmov(rd0, rs0); + if (!rd1.Is(rs1)) + Fmov(rd1, rs1); + } } } break; @@ -1092,6 +1101,16 @@ public: } } GenCallRuntime((void (*)())function); + for (const CC_PS& ccParam : CC_pars) + { + const shil_param& prm = *ccParam.prm; + if (ccParam.type == CPT_ptr && prm.count() == 2 && regalloc.IsAllocf(prm) && (op->rd._reg == prm._reg || op->rd2._reg == prm._reg)) + { + // fsca rd param is a pointer to a 64-bit reg so reload the regs if allocated + Ldr(regalloc.MapVRegister(prm, 0), sh4_context_mem_operand(GetRegPtr(prm._reg))); + Ldr(regalloc.MapVRegister(prm, 1), sh4_context_mem_operand(GetRegPtr(prm._reg + 1))); + } + } } MemOperand sh4_context_mem_operand(void *p) diff --git a/core/rec-x64/rec_x64.cpp b/core/rec-x64/rec_x64.cpp index d0ad9ac27..011f8a81e 100644 --- a/core/rec-x64/rec_x64.cpp +++ b/core/rec-x64/rec_x64.cpp @@ -223,14 +223,23 @@ public: mov(rcx, (uintptr_t)op.rd.reg_ptr()); mov(qword[rcx], rax); #else - Xbyak::Xmm rd = regalloc.MapXRegister(op.rd, 0); - Xbyak::Xmm rs = regalloc.MapXRegister(op.rs1, 0); - if (rd != rs) - movss(rd, rs); - rd = regalloc.MapXRegister(op.rd, 1); - rs = regalloc.MapXRegister(op.rs1, 1); - if (rd != rs) - movss(rd, rs); + Xbyak::Xmm rd0 = regalloc.MapXRegister(op.rd, 0); + Xbyak::Xmm rs0 = regalloc.MapXRegister(op.rs1, 0); + Xbyak::Xmm rd1 = regalloc.MapXRegister(op.rd, 1); + Xbyak::Xmm rs1 = regalloc.MapXRegister(op.rs1, 1); + if (rd0 == rs1) + { + movss(xmm0, rd0); + movss(rd0, rs0); + movss(rd1, xmm0); + } + else + { + if (rd0 != rs0) + movss(rd0, rs0); + if (rd1 != rs1) + movss(rd1, rs1); + } #endif } break; @@ -265,7 +274,10 @@ public: } else #endif - host_reg_to_shil_param(op.rd, rax); + { + mov(rcx, rax); + host_reg_to_shil_param(op.rd, rcx); + } } break; @@ -554,7 +566,6 @@ public: } break; - // store from EAX case CPT_u64rvL: case CPT_u32rv: @@ -598,16 +609,28 @@ public: //push the ptr itself case CPT_ptr: verify(prm.is_reg()); - mov(call_regs64[regused++], (size_t)prm.reg_ptr()); - break; + default: // Other cases handled in ngen_CC_param break; } } GenCall((void (*)())function); +#if ALLOC_F64 == true + for (const CC_PS& ccParam : CC_pars) + { + const shil_param& prm = *ccParam.prm; + if (ccParam.type == CPT_ptr && prm.count() == 2 && regalloc.IsAllocf(prm) && (op.rd._reg == prm._reg || op.rd2._reg == prm._reg)) { + // fsca rd param is a pointer to a 64-bit reg so reload the regs if allocated + mov(rax, (size_t)GetRegPtr(prm._reg)); + movss(regalloc.MapXRegister(prm, 0), dword[rax]); + mov(rax, (size_t)GetRegPtr(prm._reg + 1)); + movss(regalloc.MapXRegister(prm, 1), dword[rax]); + } + } +#endif } void RegPreload(u32 reg, Xbyak::Operand::Code nreg) @@ -961,7 +984,8 @@ private: die("Invalid immediate size"); break; } - host_reg_to_shil_param(op.rd, eax); + mov(ecx, eax); + host_reg_to_shil_param(op.rd, ecx); } } From 9d1a5cf0d330cb9565f2dde37265d9982dfc7d5d Mon Sep 17 00:00:00 2001 From: Flyinghead Date: Mon, 24 Apr 2023 17:41:42 +0200 Subject: [PATCH 09/16] ui: allow horizontal screen stretching up to 250% Issue #1012 Issue #609 --- core/rend/gui.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/rend/gui.cpp b/core/rend/gui.cpp index d98e51803..29a61076b 100644 --- a/core/rend/gui.cpp +++ b/core/rend/gui.cpp @@ -1851,7 +1851,7 @@ static void gui_display_settings() ImGui::SameLine(); ShowHelpMarker("Internal render resolution. Higher is better, but more demanding on the GPU. Values higher than your display resolution (but no more than double your display resolution) can be used for supersampling, which provides high-quality antialiasing without reducing sharpness."); - OptionSlider("Horizontal Stretching", config::ScreenStretching, 100, 150, + OptionSlider("Horizontal Stretching", config::ScreenStretching, 100, 250, "Stretch the screen horizontally"); OptionArrowButtons("Frame Skipping", config::SkipFrame, 0, 6, "Number of frames to skip between two actually rendered frames"); From 1fe7352ed0c68b34da94c1a68b838ef10ad8639a Mon Sep 17 00:00:00 2001 From: Eric Warmenhoven Date: Tue, 25 Apr 2023 02:26:49 -0400 Subject: [PATCH 10/16] libretro: avoid exporting symbols on osx On Mac when running a debug build of flycast and retroarch in the debugger, it gets confused about which glsl to pick. The easiest way to fix this is to build the flycast core in a way where it's only exporting symbols that are going to be called by retroarch directly. --- CMakeLists.txt | 1 + shell/libretro/libretro.osx.def | 27 +++++++++++++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 shell/libretro/libretro.osx.def diff --git a/CMakeLists.txt b/CMakeLists.txt index 3b76b5ffa..b38094235 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -118,6 +118,7 @@ elseif(LIBRETRO) add_library(${PROJECT_NAME} SHARED core/emulator.cpp) if(APPLE) set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-undefined,error") + set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-exported_symbols_list,${CMAKE_CURRENT_SOURCE_DIR}/shell/libretro/libretro.osx.def") else() set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--no-undefined") endif() diff --git a/shell/libretro/libretro.osx.def b/shell/libretro/libretro.osx.def new file mode 100644 index 000000000..53a556a60 --- /dev/null +++ b/shell/libretro/libretro.osx.def @@ -0,0 +1,27 @@ +#LIBRARY "libretro" +#EXPORTS +_retro_set_environment +_retro_set_video_refresh +_retro_set_audio_sample +_retro_set_audio_sample_batch +_retro_set_input_poll +_retro_set_input_state +_retro_init +_retro_deinit +_retro_api_version +_retro_get_system_info +_retro_get_system_av_info +_retro_set_controller_port_device +_retro_reset +_retro_run +_retro_serialize_size +_retro_serialize +_retro_unserialize +_retro_cheat_reset +_retro_cheat_set +_retro_load_game +_retro_load_game_special +_retro_unload_game +_retro_get_region +_retro_get_memory_data +_retro_get_memory_size From d3a3cab425b402b39e71751fa0b064a4d687a666 Mon Sep 17 00:00:00 2001 From: Eric Warmenhoven Date: Tue, 25 Apr 2023 21:35:56 -0400 Subject: [PATCH 11/16] Build iOS libretro core --- .gitlab-ci.yml | 15 +++++++++ CMakeLists.txt | 14 +++++++-- core/deps/libretro-common/include/libretro.h | 33 ++++++++++++++++++++ core/wsi/libretro.h | 4 +++ shell/libretro/libretro.cpp | 10 ++++++ 5 files changed, 73 insertions(+), 3 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 55dc4fbd3..ec509441a 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -28,6 +28,12 @@ CORE_ARGS: -DLIBRETRO=ON -G Xcode -DCMAKE_BUILD_TYPE=Release EXTRA_PATH: Release +.core-defs-ios-arm64: + extends: .core-defs + variables: + CORE_ARGS: -DLIBRETRO=ON -G Xcode -DCMAKE_BUILD_TYPE=Release + EXTRA_PATH: Release-iphoneos + .core-defs-android: extends: .core-defs script: @@ -62,6 +68,10 @@ include: - project: 'libretro-infrastructure/ci-templates' file: '/android-cmake.yml' + # iOS arm64 + - project: 'libretro-infrastructure/ci-templates' + file: '/ios-cmake.yml' + ################################## CONSOLES ################################ # Nintendo Switch # - project: 'libretro-infrastructure/ci-templates' @@ -139,6 +149,11 @@ android-x86: - .libretro-android-cmake-x86 - .core-defs-android +libretro-build-ios-arm64: + extends: + - .libretro-ios-cmake-arm64 + - .core-defs-ios-arm64 + ################################### CONSOLES ################################# # Nintendo Switch #libretro-build-libnx-aarch64: diff --git a/CMakeLists.txt b/CMakeLists.txt index b38094235..b9ccfc08c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -52,7 +52,7 @@ option(ENABLE_GDB_SERVER "Build with GDB debugging support" OFF) option(ENABLE_DC_PROFILER "Build with support for target machine (SH4) profiler" OFF) option(ENABLE_FC_PROFILER "Build with support for host app (Flycast) profiler" OFF) -if(IOS) +if(IOS AND NOT LIBRETRO) set(USE_VULKAN OFF CACHE BOOL "Force vulkan off" FORCE) endif() @@ -122,7 +122,10 @@ elseif(LIBRETRO) else() set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--no-undefined") endif() - set_target_properties(${PROJECT_NAME} PROPERTIES OUTPUT_NAME "flycast_libretro") + set_target_properties(${PROJECT_NAME} PROPERTIES OUTPUT_NAME "flycast_libretro" + XCODE_ATTRIBUTE_CODE_SIGNING_ALLOWED "NO" + XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "" + ) set(CMAKE_SHARED_LIBRARY_PREFIX "") set(CMAKE_POSITION_INDEPENDENT_CODE ON) target_compile_definitions(${PROJECT_NAME} PRIVATE LIBRETRO) @@ -130,6 +133,11 @@ elseif(LIBRETRO) target_compile_definitions(${PROJECT_NAME} PRIVATE GLES GLES3 HAVE_OPENGLES HAVE_OPENGLES3) find_library(GLES3_LIBRARIES NAMES GLESv3 GLESv2 NO_CACHE REQUIRED) target_link_libraries(${PROJECT_NAME} PRIVATE ${GLES3_LIBRARIES}) + elseif(IOS) + target_compile_definitions(${PROJECT_NAME} PRIVATE GLES GLES3 HAVE_OPENGLES HAVE_OPENGLES3) + find_library(OPENGLES OpenGLES) + find_library(GLKIT GLKit) + target_link_libraries(${PROJECT_NAME} PRIVATE ${OPENGLES} ${GLKIT}) elseif(USE_GLES2) target_compile_definitions(${PROJECT_NAME} PRIVATE GLES GLES2 HAVE_OPENGLES HAVE_OPENGLES2) if(USE_VIDEOCORE) @@ -697,7 +705,7 @@ if(LIBRETRO) target_sources(${PROJECT_NAME} PRIVATE core/deps/libretro-common/glsm/glsm.c core/deps/libretro-common/glsym/rglgen.c) - if(ANDROID OR USE_GLES) + if(ANDROID OR IOS OR USE_GLES) target_sources(${PROJECT_NAME} PRIVATE core/deps/libretro-common/glsym/glsym_es3.c) elseif(USE_GLES2) target_sources(${PROJECT_NAME} PRIVATE core/deps/libretro-common/glsym/glsym_es2.c) diff --git a/core/deps/libretro-common/include/libretro.h b/core/deps/libretro-common/include/libretro.h index 4bd3f2f0c..983ebfc2c 100644 --- a/core/deps/libretro-common/include/libretro.h +++ b/core/deps/libretro-common/include/libretro.h @@ -1767,6 +1767,39 @@ enum retro_mod * (see enum retro_savestate_context) */ +#define RETRO_ENVIRONMENT_GET_HW_RENDER_CONTEXT_NEGOTIATION_INTERFACE_SUPPORT (73 | RETRO_ENVIRONMENT_EXPERIMENTAL) + /* struct retro_hw_render_context_negotiation_interface * -- + * Before calling SET_HW_RNEDER_CONTEXT_NEGOTIATION_INTERFACE, a core can query + * which version of the interface is supported. + * + * Frontend looks at interface_type and returns the maximum supported + * context negotiation interface version. + * If the interface_type is not supported or recognized by the frontend, a version of 0 + * must be returned in interface_version and true is returned by frontend. + * + * If this environment call returns true with interface_version greater than 0, + * a core can always use a negotiation interface version larger than what the frontend returns, but only + * earlier versions of the interface will be used by the frontend. + * A frontend must not reject a negotiation interface version that is larger than + * what the frontend supports. Instead, the frontend will use the older entry points that it recognizes. + * If this is incompatible with a particular core's requirements, it can error out early. + * + * Backwards compatibility note: + * This environment call was introduced after Vulkan v1 context negotiation. + * If this environment call is not supported by frontend - i.e. the environment call returns false - + * only Vulkan v1 context negotiation is supported (if Vulkan HW rendering is supported at all). + * If a core uses Vulkan negotiation interface with version > 1, negotiation may fail unexpectedly. + * All future updates to the context negotiation interface implies that frontend must support + * this environment call to query support. + */ + +#define RETRO_ENVIRONMENT_GET_JIT_CAPABLE 74 + /* bool * -- + * Result is set to true if the frontend has already verified JIT can be + * used, mainly for use iOS/tvOS. On other platforms the result is true. + */ + + /* VFS functionality */ /* File paths: diff --git a/core/wsi/libretro.h b/core/wsi/libretro.h index 1b4e25190..3b1c8f737 100644 --- a/core/wsi/libretro.h +++ b/core/wsi/libretro.h @@ -18,6 +18,10 @@ */ #pragma once #if defined(LIBRETRO) && (defined(HAVE_OPENGL) || defined(HAVE_OPENGLES)) +#if defined(TARGET_IPHONE) //apple-specific ogles3 headers +#include +#include +#endif #include "gl_context.h" #include #include diff --git a/shell/libretro/libretro.cpp b/shell/libretro/libretro.cpp index 1c0d57fec..9e1f893c2 100644 --- a/shell/libretro/libretro.cpp +++ b/shell/libretro/libretro.cpp @@ -1793,6 +1793,16 @@ static bool set_dx11_hw_render() // Loading/unloading games bool retro_load_game(const struct retro_game_info *game) { +#if defined(IOS) + bool can_jit; + if (environ_cb(RETRO_ENVIRONMENT_GET_JIT_CAPABLE, &can_jit) && !can_jit) { + // jit is required both for performance and for audio. trying to run + // without the jit will cause a crash. + gui_display_notification("Cannot run without JIT", 5000); + return false; + } +#endif + NOTICE_LOG(BOOT, "retro_load_game: %s", game->path); extract_basename(g_base_name, game->path, sizeof(g_base_name)); From fc3b9046d8f0432b25546380f12f8b8393c11697 Mon Sep 17 00:00:00 2001 From: Eric Warmenhoven Date: Wed, 26 Apr 2023 19:36:33 -0400 Subject: [PATCH 12/16] Build fix: iOS libretro core using Xcode 12.2 --- CMakeLists.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b9ccfc08c..922659800 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -117,7 +117,9 @@ if(NINTENDO_SWITCH) elseif(LIBRETRO) add_library(${PROJECT_NAME} SHARED core/emulator.cpp) if(APPLE) - set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-undefined,error") + if(NOT IOS) + set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-undefined,error") + endif() set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-exported_symbols_list,${CMAKE_CURRENT_SOURCE_DIR}/shell/libretro/libretro.osx.def") else() set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--no-undefined") From 5f161df06b0c206d0a43494a8435b545e6d2748a Mon Sep 17 00:00:00 2001 From: Eric Warmenhoven Date: Fri, 28 Apr 2023 10:31:05 -0400 Subject: [PATCH 13/16] libretro: Don't use Xcode cmake generator for iOS --- .gitlab-ci.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index ec509441a..dcf0e33a1 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -31,8 +31,7 @@ .core-defs-ios-arm64: extends: .core-defs variables: - CORE_ARGS: -DLIBRETRO=ON -G Xcode -DCMAKE_BUILD_TYPE=Release - EXTRA_PATH: Release-iphoneos + CORE_ARGS: -DLIBRETRO=ON -DCMAKE_BUILD_TYPE=Release .core-defs-android: extends: .core-defs From 06270e66c8ba7d166dcd8552315c1b8c5a90703b Mon Sep 17 00:00:00 2001 From: Eric Warmenhoven Date: Mon, 8 May 2023 14:01:51 -0400 Subject: [PATCH 14/16] Build tvOS libretro core --- .gitlab-ci.yml | 10 ++++++++++ CMakeLists.txt | 3 +++ 2 files changed, 13 insertions(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index dcf0e33a1..d2f50b97e 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -76,6 +76,10 @@ include: # - project: 'libretro-infrastructure/ci-templates' # file: '/libnx-static.yml' + # tvOS arm64 + - project: 'libretro-infrastructure/ci-templates' + file: '/tvos-cmake.yml' + # Stages for building stages: - build-prepare @@ -159,3 +163,9 @@ libretro-build-ios-arm64: # extends: # - .libretro-libnx-static-retroarch-master # - .core-defs + +# tvOS arm64 +libretro-build-tvos-arm64: + extends: + - .libretro-tvos-cmake-arm64 + - .core-defs-ios-arm64 diff --git a/CMakeLists.txt b/CMakeLists.txt index 922659800..648761758 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,6 +14,9 @@ if(APPLE) if(CMAKE_SYSTEM_NAME STREQUAL iOS) set(CMAKE_OSX_DEPLOYMENT_TARGET "12.0" CACHE STRING "Minimum iOS deployment version") set(CMAKE_OSX_ARCHITECTURES "arm64" CACHE STRING "") + elseif(CMAKE_SYSTEM_NAME STREQUAL tvOS) + set(CMAKE_OSX_DEPLOYMENT_TARGET "12.0" CACHE STRING "Minimum tvOS deployment version") + set(CMAKE_OSX_ARCHITECTURES "arm64" CACHE STRING "") else() set(CMAKE_OSX_DEPLOYMENT_TARGET "10.9" CACHE STRING "Minimum macOS deployment version") set(CMAKE_OSX_ARCHITECTURES "x86_64;arm64" CACHE STRING "") From 97bd3fc082a4f4dfff6077c0a912949cbda5a628 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 12 May 2023 22:19:18 +0000 Subject: [PATCH 15/16] Fetch translations & Recreate libretro_core_options_intl.h --- shell/libretro/libretro_core_options_intl.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shell/libretro/libretro_core_options_intl.h b/shell/libretro/libretro_core_options_intl.h index 603ef5fea..a255816e4 100644 --- a/shell/libretro/libretro_core_options_intl.h +++ b/shell/libretro/libretro_core_options_intl.h @@ -3433,7 +3433,7 @@ struct retro_core_options_v2 options_ast = { #define CATEGORY_SYSTEM_LABEL_BE NULL #define CATEGORY_SYSTEM_INFO_0_BE NULL -#define CATEGORY_VIDEO_LABEL_BE NULL +#define CATEGORY_VIDEO_LABEL_BE "Відэа" #define CATEGORY_VIDEO_INFO_0_BE NULL #define CATEGORY_PERFORMANCE_LABEL_BE NULL #define CATEGORY_PERFORMANCE_INFO_0_BE NULL From 541544292a3d051839672ffa7bd4524a3e1c1c51 Mon Sep 17 00:00:00 2001 From: flyinghead Date: Sat, 13 May 2023 15:09:27 +0200 Subject: [PATCH 16/16] dx11 oit: resize to null width and height when rendering to texture Regression introduced by d2e8c9465b783243cc421a2c94714a331d1bf434 Issue #974 --- core/rend/dx11/oit/dx11_oitrenderer.cpp | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/core/rend/dx11/oit/dx11_oitrenderer.cpp b/core/rend/dx11/oit/dx11_oitrenderer.cpp index 8129c76e3..64eab0170 100644 --- a/core/rend/dx11/oit/dx11_oitrenderer.cpp +++ b/core/rend/dx11/oit/dx11_oitrenderer.cpp @@ -96,14 +96,14 @@ struct DX11OITRenderer : public DX11Renderer return success; } - void resize(int w, int h) override + void resize(int w, int h) override { - if (w == (int)width && h == (int)height && opaqueTex != nullptr) - return; - DX11Renderer::resize(w, h); - buffers.resize(w, h); + if (w == (int)width && h == (int)height && opaqueTex != nullptr) + return; + DX11Renderer::resize(w, h); + buffers.resize(w, h); - createTexAndRenderTarget(opaqueTex, opaqueRenderTarget, width, height); + createTexAndRenderTarget(opaqueTex, opaqueRenderTarget, width, height); multipassTex.reset(); multipassRenderTarget.reset(); multipassTextureView.reset(); @@ -115,7 +115,7 @@ struct DX11OITRenderer : public DX11Renderer device->CreateShaderResourceView(opaqueTex, &viewDesc, &opaqueTextureView.get()); // For depth pass. Use a 32-bit format for depth to avoid loss of precision - createDepthTexAndView(depthStencilTex2, depthStencilView2, width, height, DXGI_FORMAT_R32G8X24_TYPELESS, D3D11_BIND_SHADER_RESOURCE); + createDepthTexAndView(depthStencilTex2, depthStencilView2, width, height, DXGI_FORMAT_R32G8X24_TYPELESS, D3D11_BIND_SHADER_RESOURCE); stencilView.reset(); viewDesc.Format = DXGI_FORMAT_X32_TYPELESS_G8X24_UINT; device->CreateShaderResourceView(depthStencilTex2, &viewDesc, &stencilView.get()); @@ -124,11 +124,11 @@ struct DX11OITRenderer : public DX11Renderer viewDesc.Format = DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS; device->CreateShaderResourceView(depthStencilTex2, &viewDesc, &depthView.get()); - createDepthTexAndView(depthTex, depthTexView, width, height, DXGI_FORMAT_R32G8X24_TYPELESS); + createDepthTexAndView(depthTex, depthTexView, width, height, DXGI_FORMAT_R32G8X24_TYPELESS); } void setRTTSize(int width, int height) override { - buffers.resize(width, height); + buffers.resize(width, height); } void Term() override @@ -622,7 +622,10 @@ struct DX11OITRenderer : public DX11Renderer bool Render() override { - resize(pvrrc.framebufferWidth, pvrrc.framebufferHeight); + bool is_rtt = pvrrc.isRTT; + + if (!is_rtt) + resize(pvrrc.framebufferWidth, pvrrc.framebufferHeight); if (pixelBufferSize != config::PixelBufferSize) { buffers.init(device, deviceContext); @@ -636,8 +639,6 @@ struct DX11OITRenderer : public DX11Renderer deviceContext->OMSetRenderTargets(1, &fbRenderTarget.get(), nullptr); configVertexShader(); - bool is_rtt = pvrrc.isRTT; - deviceContext->IASetInputLayout(mainInputLayout); n2Helper.resetCache();