Open cmitu opened 2 years ago
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.
Platform / OS / Hardware
master
@ 1f61f80c9Description 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 "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