Visual artifacts with GLES2/VC GPU (Libretro core)
Platform / OS / Hardware
- OS: Raspbian Linux, ARM 32bit.
- Github hash: current
master@ 1f61f80c9 - Hardware: Raspberry Pi3B, GLES2 renderer
Description of the issue
Using the Libretro core produces some wrong colors and missing textures (?) in a few games, regardless of the video options used (tried to disable Mipmapping, Fog, Anisotropic filtering, any enhancements turned off). Games tested - SF3 3rd Strike, Capcom vs. SNK: Millennium Fight 2000.
Debugging Steps Tested
Tried toggling any of the video and perf. options, but it doesn't seem to have any effect.
Standalone Flycast works without an issue though so it doesn't seem GPU/driver related. The old libretro core from libretro/flycast also doesn't exhibit this problem.
Logs Gathered Verbose log from running the libretro core:
Retroarch log
Executing: /opt/retropie/emulators/retroarch/bin/retroarch -L /opt/retropie/libretrocores/lr-flycast/flycast_libretro.so </dev/null --config /opt/retropie/configs/dreamcast/retroarch.cfg "/home/pi/RetroPie/roms/dreamcast/Street Fighter 3 3rd Strike.cdi" --verbose --appendconfig /dev/shm/retroarch.cfg
[INFO] [Config]: Loading config from: "/opt/retropie/configs/dreamcast/retroarch.cfg".
[INFO] [Config]: Appending config "/dev/shm/retroarch.cfg".
[WARN] [GameMode]: GameMode cannot be enabled on this system ("dlopen failed - libgamemode.so: cannot open shared object file: No such file or directory.") https://github.com/FeralInteractive/gamemode needs to be installed.
[WARN] [Config]: GameMode unsupported - disabling...
[INFO] RetroArch 1.10.0 (Git e9e85f3)
[INFO] === Build =======================================
[INFO] Capabilities: NEON VFPv3 VFPv4
[INFO] Built: Jan 30 2022
[INFO] Version: 1.10.0
[INFO] Git: e9e85f3
[INFO] =================================================
[INFO] [Input]: Found input driver: "udev".
[INFO] [Core]: Loading dynamic libretro core from: "/opt/retropie/libretrocores/lr-flycast/flycast_libretro.so"
[INFO] [Overrides]: No core-specific overrides found at "/home/pi/.config/retroarch/config/Flycast/Flycast.cfg".
[INFO] [Overrides]: No content-dir-specific overrides found at "/home/pi/.config/retroarch/config/Flycast/dreamcast.cfg".
[INFO] [Overrides]: No game-specific overrides found at "/home/pi/.config/retroarch/config/Flycast/Street Fighter 3 3rd Strike.cfg".
[INFO] [Environ]: GET_CORE_OPTIONS_VERSION.
[INFO] [Environ]: GET_LANGUAGE: "0".
[INFO] [Environ]: RETRO_ENVIRONMENT_SET_CORE_OPTIONS_V2_INTL.
[INFO] [Environ]: SET_CONTROLLER_INFO.
[INFO] Controller port: 1
[INFO] Controller (ID: 1)
[INFO] Arcade Stick (ID: 1025)
[INFO] Keyboard (ID: 3)
[INFO] Mouse (ID: 2)
[INFO] Light Gun (ID: 4)
[INFO] Twin Stick (ID: 513)
[INFO] Saturn Twin-Stick (ID: 769)
[INFO] Controller port: 2
[INFO] Controller (ID: 1)
[INFO] Arcade Stick (ID: 1025)
[INFO] Keyboard (ID: 3)
[INFO] Mouse (ID: 2)
[INFO] Light Gun (ID: 4)
[INFO] Twin Stick (ID: 513)
[INFO] Saturn Twin-Stick (ID: 769)
[INFO] Controller port: 3
[INFO] Controller (ID: 1)
[INFO] Arcade Stick (ID: 1025)
[INFO] Keyboard (ID: 3)
[INFO] Mouse (ID: 2)
[INFO] Light Gun (ID: 4)
[INFO] Twin Stick (ID: 513)
[INFO] Saturn Twin-Stick (ID: 769)
[INFO] Controller port: 4
[INFO] Controller (ID: 1)
[INFO] Arcade Stick (ID: 1025)
[INFO] Keyboard (ID: 3)
[INFO] Mouse (ID: 2)
[INFO] Light Gun (ID: 4)
[INFO] Twin Stick (ID: 513)
[INFO] Saturn Twin-Stick (ID: 769)
[INFO] [Remaps]: Remap directory: "/opt/retropie/configs/dreamcast/".
[INFO] [Overrides]: Redirecting save file to "/home/pi/RetroPie/roms/dreamcast/Street Fighter 3 3rd Strike.srm".
[INFO] [Overrides]: Redirecting save state to "/home/pi/RetroPie/roms/dreamcast/Street Fighter 3 3rd Strike.state".
[INFO] [Environ]: GET_LOG_INTERFACE.
[libretro INFO] shell/libretro/libretro.cpp:297 N[BOOT]: retro_init
[INFO] [Environ]: GET_PERF_INTERFACE.
[INFO] [Environ]: SET_PIXEL_FORMAT: XRGB8888.
[INFO] [Environ]: SET_KEYBOARD_CALLBACK.
[INFO] [Environ]: GET_DISK_CONTROL_INTERFACE_VERSION.
[INFO] [Environ]: SET_DISK_CONTROL_EXT_INTERFACE.
[INFO] [Content]: Content loading skipped. Implementation will load it on its own.
[libretro INFO] shell/libretro/libretro.cpp:1693 N[BOOT]: retro_load_game: /home/pi/RetroPie/roms/dreamcast/Street Fighter 3 3rd Strike.cdi
[INFO] [Environ]: GET_RUMBLE_INTERFACE.
[libretro DEBUG] Rumble interface supported!
[INFO] [Environ]: SYSTEM_DIRECTORY: "/home/pi/RetroPie/BIOS".
[INFO] [Environ]: GET_SAVE_DIRECTORY.
[INFO] [Environ]: GET_VARIABLE: reicast_region = "Default"
[INFO] [Environ]: GET_VARIABLE: reicast_broadcast = "NTSC"
[INFO] [Environ]: GET_VARIABLE: reicast_language = "Default"
[INFO] [Environ]: GET_VARIABLE: reicast_force_wince = "disabled"
[INFO] [Environ]: GET_VARIABLE: reicast_enable_dsp = "disabled"
[INFO] [Environ]: GET_VARIABLE: pvr.rend = "N/A"
[INFO] [Environ]: GET_VARIABLE: reicast_mipmapping = "enabled"
[INFO] [Environ]: GET_VARIABLE: reicast_widescreen_hack = "disabled"
[INFO] [Environ]: GET_VARIABLE: reicast_enable_rttb = "enabled"
[INFO] [Environ]: GET_VARIABLE: reicast_volume_modifier_enable = "disabled"
[INFO] [Environ]: GET_VARIABLE: reicast_texupscale = "1"
[INFO] [Environ]: GET_VARIABLE: reicast_texupscale_max_filtered_texture_size = "256"
[INFO] [Environ]: GET_VARIABLE: reicast_custom_textures = "disabled"
[INFO] [Environ]: GET_VARIABLE: reicast_dump_textures = "disabled"
[INFO] [Environ]: GET_VARIABLE: reicast_fog = "disabled"
[INFO] [Environ]: GET_VARIABLE: rend.PerStripSorting = "N/A"
[INFO] [Environ]: GET_VARIABLE: reicast_delay_frame_swapping = "disabled"
[INFO] [Environ]: GET_VARIABLE: reicast_widescreen_cheats = "disabled"
[INFO] [Environ]: GET_VARIABLE: reicast_frame_skipping = "disabled"
[INFO] [Environ]: GET_VARIABLE: reicast_auto_skip_frame = "some"
[INFO] [Environ]: GET_VARIABLE: reicast_threaded_rendering = "enabled"
[INFO] [Environ]: GET_VARIABLE: reicast_anisotropic_filtering = "off"
[INFO] [Environ]: GET_VARIABLE: reicast_pvr2_filtering = "disabled"
[INFO] [Environ]: GET_VARIABLE: reicast_hle_bios = "disabled"
[INFO] [Environ]: GET_VARIABLE: reicast_gdrom_fast_loading = "enabled"
[INFO] [Environ]: GET_VARIABLE: reicast_per_content_vmus = "disabled"
[INFO] [Environ]: GET_VARIABLE: reicast_screen_rotation = "horizontal"
[INFO] [Environ]: GET_VARIABLE: reicast_internal_resolution = "640x480"
[INFO] [Environ]: GET_VARIABLE: reicast_boot_to_bios = "disabled"
[INFO] [Environ]: GET_VARIABLE: reicast_alpha_sorting = "per-strip (fast, least accurate)"
[INFO] [Environ]: SET_SAVE_STATE_IN_BACKGROUND: yes.
[INFO] [Environ]: GET_VARIABLE: reicast_cable_type = "TV (RGB)"
[INFO] [Environ]: GET_VARIABLE: reicast_enable_purupuru = "enabled"
[INFO] [Environ]: GET_VARIABLE: reicast_analog_stick_deadzone = "15%"
[INFO] [Environ]: GET_VARIABLE: reicast_trigger_deadzone = "0%"
[INFO] [Environ]: GET_VARIABLE: reicast_digital_triggers = "disabled"
[INFO] [Environ]: GET_VARIABLE: reicast_allow_service_buttons = "disabled"
[INFO] [Environ]: GET_VARIABLE: reicast_lightgun1_crosshair = "disabled"
[INFO] [Environ]: GET_VARIABLE: reicast_vmu1_screen_display = "enabled"
[INFO] [Environ]: GET_VARIABLE: reicast_vmu1_screen_position = "Upper Left"
[INFO] [Environ]: GET_VARIABLE: reicast_vmu1_screen_size_mult = "1x"
[INFO] [Environ]: GET_VARIABLE: reicast_vmu1_screen_opacity = "100%"
[INFO] [Environ]: GET_VARIABLE: reicast_vmu1_pixel_on_color = "DEFAULT_ON 00"
[INFO] [Environ]: GET_VARIABLE: reicast_vmu1_pixel_off_color = "DEFAULT_OFF 01"
[INFO] [Environ]: GET_VARIABLE: reicast_lightgun2_crosshair = "disabled"
[INFO] [Environ]: GET_VARIABLE: reicast_vmu2_screen_display = "disabled"
[INFO] [Environ]: GET_VARIABLE: reicast_vmu2_screen_position = "Upper Left"
[INFO] [Environ]: GET_VARIABLE: reicast_vmu2_screen_size_mult = "1x"
[INFO] [Environ]: GET_VARIABLE: reicast_vmu2_screen_opacity = "100%"
[INFO] [Environ]: GET_VARIABLE: reicast_vmu2_pixel_on_color = "DEFAULT_ON 00"
[INFO] [Environ]: GET_VARIABLE: reicast_vmu2_pixel_off_color = "DEFAULT_OFF 01"
[INFO] [Environ]: GET_VARIABLE: reicast_lightgun3_crosshair = "disabled"
[INFO] [Environ]: GET_VARIABLE: reicast_vmu3_screen_display = "disabled"
[INFO] [Environ]: GET_VARIABLE: reicast_vmu3_screen_position = "Upper Left"
[INFO] [Environ]: GET_VARIABLE: reicast_vmu3_screen_size_mult = "1x"
[INFO] [Environ]: GET_VARIABLE: reicast_vmu3_screen_opacity = "100%"
[INFO] [Environ]: GET_VARIABLE: reicast_vmu3_pixel_on_color = "DEFAULT_ON 00"
[INFO] [Environ]: GET_VARIABLE: reicast_vmu3_pixel_off_color = "DEFAULT_OFF 01"
[INFO] [Environ]: GET_VARIABLE: reicast_lightgun4_crosshair = "disabled"
[INFO] [Environ]: GET_VARIABLE: reicast_vmu4_screen_display = "disabled"
[INFO] [Environ]: GET_VARIABLE: reicast_vmu4_screen_position = "Upper Left"
[INFO] [Environ]: GET_VARIABLE: reicast_vmu4_screen_size_mult = "1x"
[INFO] [Environ]: GET_VARIABLE: reicast_vmu4_screen_opacity = "100%"
[INFO] [Environ]: GET_VARIABLE: reicast_vmu4_pixel_on_color = "DEFAULT_ON 00"
[INFO] [Environ]: GET_VARIABLE: reicast_vmu4_pixel_off_color = "DEFAULT_OFF 01"
[INFO] [Environ]: GET_VARIABLE: reicast_threaded_rendering = "enabled"
[INFO] [Environ]: GET_VARIABLE: reicast_texupscale = "1"
[libretro INFO] File extension is: .cdi
[INFO] [Environ]: GET_PREFERRED_HW_RENDER, video driver name: gl.
[INFO] [Environ]: GET_PREFERRED_HW_RENDER - Context callback set to RETRO_HW_CONTEXT_OPENGL.
[INFO] [Environ]: SET_HW_RENDER, context type: gl.
[INFO] Requesting OpenGLES2 context.
[INFO] Reached end of SET_HW_RENDER.
[libretro INFO] core/hw/mem/_vmem.cpp:483 N[VMEM]: Info: nvmem is enabled, with addr space of size 512MB
[libretro INFO] core/hw/mem/_vmem.cpp:576 N[VMEM]: BASE 0x4ce10000 RAM(16 MB) 0x58e10000 VRAM64(8 MB) 0x50e10000 ARAM(2 MB) 0x6ce10000
[libretro INFO] core/hw/mem/_vmem.cpp:483 N[VMEM]: Info: nvmem is enabled, with addr space of size 512MB
[libretro INFO] core/hw/mem/_vmem.cpp:576 N[VMEM]: BASE 0x4ce10000 RAM(16 MB) 0x58e10000 VRAM64(8 MB) 0x50e10000 ARAM(2 MB) 0x6ce10000
[INFO] [Environ]: GET_VARIABLE: reicast_region = "Default"
[INFO] [Environ]: GET_VARIABLE: reicast_broadcast = "NTSC"
[INFO] [Environ]: GET_VARIABLE: reicast_language = "Default"
[INFO] [Environ]: GET_VARIABLE: reicast_force_wince = "disabled"
[INFO] [Environ]: GET_VARIABLE: reicast_enable_dsp = "disabled"
[INFO] [Environ]: GET_VARIABLE: pvr.rend = "N/A"
[INFO] [Environ]: GET_VARIABLE: reicast_mipmapping = "enabled"
[INFO] [Environ]: GET_VARIABLE: reicast_widescreen_hack = "disabled"
[INFO] [Environ]: GET_VARIABLE: reicast_enable_rttb = "enabled"
[INFO] [Environ]: GET_VARIABLE: reicast_volume_modifier_enable = "disabled"
[INFO] [Environ]: GET_VARIABLE: reicast_texupscale = "1"
[INFO] [Environ]: GET_VARIABLE: reicast_texupscale_max_filtered_texture_size = "256"
[INFO] [Environ]: GET_VARIABLE: reicast_custom_textures = "disabled"
[INFO] [Environ]: GET_VARIABLE: reicast_dump_textures = "disabled"
[INFO] [Environ]: GET_VARIABLE: reicast_fog = "disabled"
[INFO] [Environ]: GET_VARIABLE: rend.PerStripSorting = "N/A"
[INFO] [Environ]: GET_VARIABLE: reicast_delay_frame_swapping = "disabled"
[INFO] [Environ]: GET_VARIABLE: reicast_widescreen_cheats = "disabled"
[INFO] [Environ]: GET_VARIABLE: reicast_frame_skipping = "disabled"
[INFO] [Environ]: GET_VARIABLE: reicast_auto_skip_frame = "some"
[INFO] [Environ]: GET_VARIABLE: reicast_threaded_rendering = "enabled"
[INFO] [Environ]: GET_VARIABLE: reicast_anisotropic_filtering = "off"
[INFO] [Environ]: GET_VARIABLE: reicast_pvr2_filtering = "disabled"
[INFO] [Environ]: GET_VARIABLE: reicast_hle_bios = "disabled"
[INFO] [Environ]: GET_VARIABLE: reicast_gdrom_fast_loading = "enabled"
[libretro WARN] core/imgread/common.cpp:94 W[GDROM]: Warning: CDI Image Loaded! Many CDI images are known to be defective, GDI, CUE or CHD format is preferred. Please only file bug reports when using images known to be good (GDI, CUE or CHD).
[libretro INFO] core/emulator.cpp:56 N[BOOT]: Game ID is [T7013D-50]
[INFO] [Environ]: SET_ROTATION: 0
[INFO] [Environ]: GET_VARIABLE: reicast_threaded_rendering = "enabled"
[INFO] [Environ]: GET_VARIABLE: reicast_texupscale = "1"
[INFO] [SRAM]: Skipping SRAM load.
[INFO] [Core]: Version of libretro API: 1, Compiled against API: 1
[libretro INFO] shell/libretro/libretro.cpp:2018 N[RENDERER]: retro_get_system_av_info: Res=480
[INFO] [Audio]: Set audio input rate to: 44100.00 Hz.
[INFO] [Video]: Set video size to: 1440x1080.
[INFO] [Video]: Using HW render, OpenGL driver forced.
[INFO] [Video]: Using configured "gl" driver for GL HW render.
[INFO] [EGL] Falling back to eglGetDisplay
[INFO] [EGL]: EGL version: 1.4
[INFO] [EGL]: Current context: 0x1.
[INFO] [GL]: Found GL context: "egl_videocore".
[INFO] [GL]: Detecting screen resolution: 1280x720.
[INFO] [GL]: Vendor: Broadcom, Renderer: VideoCore IV HW.
[INFO] [GL]: Version: OpenGL ES 2.0.
[INFO] [GL]: Using resolution 1280x720.
[INFO] [GL]: Default shader backend found: glsl.
[INFO] [Shader driver]: Using GLSL shader backend.
[WARN] [GL]: Stock GLSL shaders will be used.
[INFO] [GLSL]: Found GLSL vertex shader.
[INFO] Shader log: Compiled
[INFO] [GLSL]: Found GLSL fragment shader.
[INFO] Shader log: Compiled
[INFO] [GLSL]: Linking GLSL program.
[INFO] [GLSL]: Found GLSL vertex shader.
[INFO] Shader log: Compiled
[INFO] [GLSL]: Found GLSL fragment shader.
[INFO] Shader log: Compiled
[INFO] [GLSL]: Linking GLSL program.
[INFO] [GLSL]: Found GLSL vertex shader.
[INFO] Shader log: Compiled
[INFO] [GLSL]: Found GLSL fragment shader.
[INFO] Shader log: Compiled
[INFO] [GLSL]: Linking GLSL program.
[INFO] [GL]: Using 1 textures.
[INFO] [GL]: Loaded 1 program(s).
[INFO] [GL]: Initializing HW render (1024x1024).
[INFO] [GL]: Max texture size: 2048 px, renderbuffer size: 2048 px.
[INFO] [GL]: Supports FBO (render-to-texture).
[INFO] [Font]: Using font rendering backend: "stb-unicode".
[INFO] [Video]: Graphics driver did not initialize an input driver. Attempting to pick a suitable driver.
[WARN] [udev]: Couldn't open any keyboard, mouse or touchpad. Are permissions set correctly for /dev/input/event*?
[WARN] [udev]: Full-screen pointer won't be available.
[INFO] [udev]: Pad #0 (/dev/input/event0) supports 0 force feedback effects.
[INFO] [Joypad]: Found joypad driver: "udev".
[INFO] [Video]: Found display server: "null".
glGetError 0x500
[libretro INFO] core/rend/gles/gles.cpp:534 N[RENDERER]: Open GLES version 2.0
[INFO] ALSA: Using floating point format.
[INFO] ALSA: Period size: 480 frames
[INFO] ALSA: Buffer size: 1536 frames
[INFO] [Display]: Found display driver: "gl".
[INFO] [Playlist]: Loading history file: "/opt/retropie/configs/dreamcast/content_history.lpl".
[INFO] [Playlist]: Loading history file: "/opt/retropie/configs/dreamcast/content_music_history.lpl".
[INFO] [Playlist]: Loading history file: "/opt/retropie/configs/dreamcast/content_video_history.lpl".
[INFO] [Playlist]: Loading history file: "/opt/retropie/configs/dreamcast/content_image_history.lpl".
[INFO] [Playlist]: Loading favorites file: "/opt/retropie/configs/dreamcast/content_favorites.lpl".
[INFO] [Playlist]: Written to playlist file: /opt/retropie/configs/dreamcast/content_history.lpl
[INFO] [Environ]: SET_INPUT_DESCRIPTORS:
[INFO] RetroPad, Port 1, Button "B (bottom)" => "A"
[INFO] RetroPad, Port 1, Button "Y (left)" => "X"
[INFO] RetroPad, Port 1, Button "Start" => "Start"
[INFO] RetroPad, Port 1, Button "D-Pad Up" => "D-Pad Up"
[INFO] RetroPad, Port 1, Button "D-Pad Down" => "D-Pad Down"
[INFO] RetroPad, Port 1, Button "D-Pad Left" => "D-Pad Left"
[INFO] RetroPad, Port 1, Button "D-Pad Right" => "D-Pad Right"
[INFO] RetroPad, Port 1, Button "A (right)" => "B"
[INFO] RetroPad, Port 1, Button "X (up)" => "Y"
[INFO] RetroPad, Port 1, Button "L2" => "L Trigger"
[INFO] RetroPad, Port 1, Button "R2" => "R Trigger"
[INFO] RetroPad, Port 2, Button "B (bottom)" => "A"
[INFO] RetroPad, Port 2, Button "Y (left)" => "X"
[INFO] RetroPad, Port 2, Button "Start" => "Start"
[INFO] RetroPad, Port 2, Button "D-Pad Up" => "D-Pad Up"
[INFO] RetroPad, Port 2, Button "D-Pad Down" => "D-Pad Down"
[INFO] RetroPad, Port 2, Button "D-Pad Left" => "D-Pad Left"
[INFO] RetroPad, Port 2, Button "D-Pad Right" => "D-Pad Right"
[INFO] RetroPad, Port 2, Button "A (right)" => "B"
[INFO] RetroPad, Port 2, Button "X (up)" => "Y"
[INFO] RetroPad, Port 2, Button "L2" => "L Trigger"
[INFO] RetroPad, Port 2, Button "R2" => "R Trigger"
[INFO] RetroPad, Port 3, Button "B (bottom)" => "A"
[INFO] RetroPad, Port 3, Button "Y (left)" => "X"
[INFO] RetroPad, Port 3, Button "Start" => "Start"
[INFO] RetroPad, Port 3, Button "D-Pad Up" => "D-Pad Up"
[INFO] RetroPad, Port 3, Button "D-Pad Down" => "D-Pad Down"
[INFO] RetroPad, Port 3, Button "D-Pad Left" => "D-Pad Left"
[INFO] RetroPad, Port 3, Button "D-Pad Right" => "D-Pad Right"
[INFO] RetroPad, Port 3, Button "A (right)" => "B"
[INFO] RetroPad, Port 3, Button "X (up)" => "Y"
[INFO] RetroPad, Port 3, Button "L2" => "L Trigger"
[INFO] RetroPad, Port 3, Button "R2" => "R Trigger"
[INFO] RetroPad, Port 4, Button "B (bottom)" => "A"
[INFO] RetroPad, Port 4, Button "Y (left)" => "X"
[INFO] RetroPad, Port 4, Button "Start" => "Start"
[INFO] RetroPad, Port 4, Button "D-Pad Up" => "D-Pad Up"
[INFO] RetroPad, Port 4, Button "D-Pad Down" => "D-Pad Down"
[INFO] RetroPad, Port 4, Button "D-Pad Left" => "D-Pad Left"
[INFO] RetroPad, Port 4, Button "D-Pad Right" => "D-Pad Right"
[INFO] RetroPad, Port 4, Button "A (right)" => "B"
[INFO] RetroPad, Port 4, Button "X (up)" => "Y"
[INFO] RetroPad, Port 4, Button "L2" => "L Trigger"
[INFO] RetroPad, Port 4, Button "R2" => "R Trigger"
[INFO] [Environ]: GET_VARIABLE: reicast_threaded_rendering = "enabled"
[INFO] [Environ]: GET_VARIABLE: reicast_texupscale = "1"
[INFO] [Environ]: GET_VARIABLE: reicast_region = "Default"
[INFO] [Environ]: GET_VARIABLE: reicast_broadcast = "NTSC"
[INFO] [Environ]: GET_VARIABLE: reicast_language = "Default"
[INFO] [Environ]: GET_VARIABLE: reicast_force_wince = "disabled"
[INFO] [Environ]: GET_VARIABLE: reicast_enable_dsp = "disabled"
[INFO] [Environ]: GET_VARIABLE: pvr.rend = "N/A"
[INFO] [Environ]: GET_VARIABLE: reicast_mipmapping = "enabled"
[INFO] [Environ]: GET_VARIABLE: reicast_widescreen_hack = "disabled"
[INFO] [Environ]: GET_VARIABLE: reicast_enable_rttb = "enabled"
[INFO] [Environ]: GET_VARIABLE: reicast_volume_modifier_enable = "disabled"
[INFO] [Environ]: GET_VARIABLE: reicast_texupscale = "1"
[INFO] [Environ]: GET_VARIABLE: reicast_texupscale_max_filtered_texture_size = "256"
[INFO] [Environ]: GET_VARIABLE: reicast_custom_textures = "disabled"
[INFO] [Environ]: GET_VARIABLE: reicast_dump_textures = "disabled"
[INFO] [Environ]: GET_VARIABLE: reicast_fog = "disabled"
[INFO] [Environ]: GET_VARIABLE: rend.PerStripSorting = "N/A"
[INFO] [Environ]: GET_VARIABLE: reicast_delay_frame_swapping = "enabled"
[INFO] [Environ]: GET_VARIABLE: reicast_widescreen_cheats = "disabled"
[INFO] [Environ]: GET_VARIABLE: reicast_frame_skipping = "disabled"
[INFO] [Environ]: GET_VARIABLE: reicast_auto_skip_frame = "some"
[INFO] [Environ]: GET_VARIABLE: reicast_threaded_rendering = "enabled"
[INFO] [Environ]: GET_VARIABLE: reicast_anisotropic_filtering = "off"
[INFO] [Environ]: GET_VARIABLE: reicast_pvr2_filtering = "disabled"
[INFO] [Environ]: GET_VARIABLE: reicast_hle_bios = "disabled"
[INFO] [Environ]: GET_VARIABLE: reicast_gdrom_fast_loading = "enabled"
[INFO] [Environ]: GET_VARIABLE: reicast_per_content_vmus = "disabled"
[INFO] [Environ]: GET_VARIABLE: reicast_screen_rotation = "horizontal"
[INFO] [Environ]: GET_VARIABLE: reicast_internal_resolution = "640x480"
[INFO] [Environ]: GET_VARIABLE: reicast_boot_to_bios = "disabled"
[INFO] [Environ]: GET_VARIABLE: reicast_alpha_sorting = "per-strip (fast, least accurate)"
[INFO] [Environ]: GET_VARIABLE: reicast_enable_purupuru = "enabled"
[INFO] [Environ]: GET_VARIABLE: reicast_analog_stick_deadzone = "15%"
[INFO] [Environ]: GET_VARIABLE: reicast_trigger_deadzone = "0%"
[INFO] [Environ]: GET_VARIABLE: reicast_digital_triggers = "disabled"
[INFO] [Environ]: GET_VARIABLE: reicast_allow_service_buttons = "disabled"
[INFO] [Environ]: GET_VARIABLE: reicast_lightgun1_crosshair = "disabled"
[INFO] [Environ]: GET_VARIABLE: reicast_vmu1_screen_display = "enabled"
[INFO] [Environ]: GET_VARIABLE: reicast_vmu1_screen_position = "Upper Left"
[INFO] [Environ]: GET_VARIABLE: reicast_vmu1_screen_size_mult = "1x"
[INFO] [Environ]: GET_VARIABLE: reicast_vmu1_screen_opacity = "100%"
[INFO] [Environ]: GET_VARIABLE: reicast_vmu1_pixel_on_color = "DEFAULT_ON 00"
[INFO] [Environ]: GET_VARIABLE: reicast_vmu1_pixel_off_color = "DEFAULT_OFF 01"
[INFO] [Environ]: GET_VARIABLE: reicast_lightgun2_crosshair = "disabled"
[INFO] [Environ]: GET_VARIABLE: reicast_vmu2_screen_display = "disabled"
[INFO] [Environ]: GET_VARIABLE: reicast_vmu2_screen_position = "Upper Left"
[INFO] [Environ]: GET_VARIABLE: reicast_vmu2_screen_size_mult = "1x"
[INFO] [Environ]: GET_VARIABLE: reicast_vmu2_screen_opacity = "100%"
[INFO] [Environ]: GET_VARIABLE: reicast_vmu2_pixel_on_color = "DEFAULT_ON 00"
[INFO] [Environ]: GET_VARIABLE: reicast_vmu2_pixel_off_color = "DEFAULT_OFF 01"
[INFO] [Environ]: GET_VARIABLE: reicast_lightgun3_crosshair = "disabled"
[INFO] [Environ]: GET_VARIABLE: reicast_vmu3_screen_display = "disabled"
[INFO] [Environ]: GET_VARIABLE: reicast_vmu3_screen_position = "Upper Left"
[INFO] [Environ]: GET_VARIABLE: reicast_vmu3_screen_size_mult = "1x"
[INFO] [Environ]: GET_VARIABLE: reicast_vmu3_screen_opacity = "100%"
[INFO] [Environ]: GET_VARIABLE: reicast_vmu3_pixel_on_color = "DEFAULT_ON 00"
[INFO] [Environ]: GET_VARIABLE: reicast_vmu3_pixel_off_color = "DEFAULT_OFF 01"
[INFO] [Environ]: GET_VARIABLE: reicast_lightgun4_crosshair = "disabled"
[INFO] [Environ]: GET_VARIABLE: reicast_vmu4_screen_display = "disabled"
[INFO] [Environ]: GET_VARIABLE: reicast_vmu4_screen_position = "Upper Left"
[INFO] [Environ]: GET_VARIABLE: reicast_vmu4_screen_size_mult = "1x"
[INFO] [Environ]: GET_VARIABLE: reicast_vmu4_screen_opacity = "100%"
[INFO] [Environ]: GET_VARIABLE: reicast_vmu4_pixel_on_color = "DEFAULT_ON 00"
[INFO] [Environ]: GET_VARIABLE: reicast_vmu4_pixel_off_color = "DEFAULT_OFF 01"
[INFO] [Environ]: GET_VARIABLE: reicast_threaded_rendering = "enabled"
[INFO] [Environ]: GET_VARIABLE: reicast_texupscale = "1"
[INFO] [Core]: Content ran for a total of: 00 hours, 00 minutes, 51 seconds.
[INFO] [Core]: Unloading game..
[INFO] [Environ]: GET_VARIABLE: reicast_region = "Default"
[INFO] [Environ]: GET_VARIABLE: reicast_broadcast = "NTSC"
[INFO] [Environ]: GET_VARIABLE: reicast_language = "Default"
[INFO] [Environ]: GET_VARIABLE: reicast_force_wince = "disabled"
[INFO] [Environ]: GET_VARIABLE: reicast_enable_dsp = "disabled"
[INFO] [Environ]: GET_VARIABLE: pvr.rend = "N/A"
[INFO] [Environ]: GET_VARIABLE: reicast_mipmapping = "enabled"
[INFO] [Environ]: GET_VARIABLE: reicast_widescreen_hack = "disabled"
[INFO] [Environ]: GET_VARIABLE: reicast_enable_rttb = "enabled"
[INFO] [Environ]: GET_VARIABLE: reicast_volume_modifier_enable = "disabled"
[INFO] [Environ]: GET_VARIABLE: reicast_texupscale = "1"
[INFO] [Environ]: GET_VARIABLE: reicast_texupscale_max_filtered_texture_size = "256"
[INFO] [Environ]: GET_VARIABLE: reicast_custom_textures = "disabled"
[INFO] [Environ]: GET_VARIABLE: reicast_dump_textures = "disabled"
[INFO] [Environ]: GET_VARIABLE: reicast_fog = "disabled"
[INFO] [Environ]: GET_VARIABLE: rend.PerStripSorting = "N/A"
[INFO] [Environ]: GET_VARIABLE: reicast_delay_frame_swapping = "enabled"
[INFO] [Environ]: GET_VARIABLE: reicast_widescreen_cheats = "disabled"
[INFO] [Environ]: GET_VARIABLE: reicast_frame_skipping = "disabled"
[INFO] [Environ]: GET_VARIABLE: reicast_auto_skip_frame = "some"
[INFO] [Environ]: GET_VARIABLE: reicast_threaded_rendering = "enabled"
[INFO] [Environ]: GET_VARIABLE: reicast_anisotropic_filtering = "off"
[INFO] [Environ]: GET_VARIABLE: reicast_pvr2_filtering = "disabled"
[INFO] [Environ]: GET_VARIABLE: reicast_hle_bios = "disabled"
[INFO] [Environ]: GET_VARIABLE: reicast_gdrom_fast_loading = "enabled"
[INFO] [Core]: Unloading core..
[INFO] [Core]: Unloading core symbols..
[INFO] [Core]: Saved core options file to "/opt/retropie/configs/all/retroarch-core-options.cfg".
Screenshots
| SF3 intro | SF3 fight |
|---|---|
![]() |
![]() |
This looks like an issue with palettes handled on the gpu side. No idea why standalone would act differently from the LR core but it's not the first time it happens.
Enabling Dump Textures should fix the problem and confirm it's indeed the case.
Yes, with rend.DumpTextures = yes the artifacts are not longer present, thank you.
Re-tested using the standalone version (latest commit) and indeed the issue is present there also - I may have been erroneously testing with the older Libretro core. I'll see if I can narrow this down, otherwise will test with the MESA GLES driver (which is the default on the latest RaspiOS) and see if it has the same issue.
So it confirms that this is the infamous palette issue. This is the corresponding GLSL code (in rend/gles/gles.cpp):
highp int color_idx = int(floor(texture(tex, coords.xy).FOG_CHANNEL * 255.0 + 0.5)) + palette_index;
highp vec2 c = vec2((mod(float(color_idx), 32.0) * 2.0 + 1.0) / 64.0, (float(color_idx / 32) * 2.0 + 1.0) / 64.0);
return texture(palette, c);
Everything is using high precision, except palette_index.
Thanks for the pointer. Looks similar to https://github.com/flyinghead/flycast/issues/117 indeed.
I tried declaring palette_index as highp and, going further, changing the return type of palettePixel to highp vec4, but there's no change in behavior.

