Is there an existing issue for this?
Description
I'm trying to dial in RetroArch on an AYN Odin 3 with its 120 Hz screen, using the Vulkan video driver.
Issue:
- VSync Swap Interval = Auto or 2: normal gameplay seems fine, but toggling fast forward on will randomly crash RetroArch.
- VSync Swap Interval = 1: no crash, but I get very obvious frame pacing stutter during gameplay.
- It happens across multiple cores, including mGBA and gambatte, so it does not seem tied to one specific core or hardware-rendered emulator. My other cores mesen, bsnes, melonDS DS, and SwanStaion seem fine.
- My AYN Thor does not have this issue, even though it also has a 120 Hz screen (probably the exact same panel).
- I already tried the Odin screen calibration tool and RetroArch now reports around 119.962 Hz, so refresh calibration should be reasonably close now.
At this point I suspect some kind of Vulkan + high refresh + Odin 3 / Snapdragon 8 Elite driver issue, but I'm not sure.
Update:
- The crashes only happen when a handheld color correction shader is applied (e.g.
lcd-grid-v2-gba-color.slangp) or even handheld/color-mod/gba-color.slangp.
- Tested gbc-color and nds-color. They crash as well.
- Base LCD shaders like lcd-grid-v2 itself doesn't trigger crashes.
Expected behavior
No response
Steps to reproduce the bug
- On AYN Odin 3
- Set video driver to Vulkan
- Set VSync Swap Interval to Auto/2
- Play a GBA game on mGBA
- Rapidly toggle fast forward on/off multiple times and RetroArch will crash
Version/Commit
1.22.2
Bisect Results
No response
Present in the nightly version
I don't know
Platform & operating system
AYN Odin 3, Android 15
Affected Cores
mGBA, gambatte
Environment information
No response
Relevant log output
[Video] Set video size to: 960x720.
[Vulkan] Vulkan dynamic library loaded.
[Vulkan] Setting swap interval: 1.
[Vulkan] Created Android surface: 502889576368.
[Vulkan] Found GPU at index 0: "Adreno (TM) 830".
[Vulkan] Using GPU index 0.
[Vulkan] Using semaphores for WSI acquire.
[Vulkan] Using GPU: "Adreno (TM) 830".
[Vulkan] Queue family 0 supports 3 sub-queues.
[Vulkan] Got 4 swapchain images.
[Vulkan] Native window size: 1920x1080.
[Vulkan] Using resolution 1920x1080.
[Vulkan] Using RGB565 format.
[Vulkan] Loading stock shader.
[Input] Found joypad driver: "android".
[Audio] Set audio input rate to: 48000.00 Hz.
[OpenSL] Requested audio latency: 32 ms.
[OpenSL] Setting audio latency: Block size = 576, Blocks = 11, Total = 6336...
[Audio] Started synchronous audio driver.
[Display] Found display driver: "vulkan".
[Vulkan] Native window size: 1920x1080.
[Core] Using content: "/storage/D2D8-3B0B/Roms/GBA/Castlevania - Aria of Sorrow (USA).zip#Castlevania - Aria of Sorrow (USA).gba".
[Core] Unloading core...
[Core] Unloading core symbols...
RetroArch 1.22.2 (Git 69a4f0e)
=== Build =======================================
Capabilities: ASIMD
[INFO] Version: 1.22.2
[INFO] Git: 69a4f0e
[INFO] Built: Nov 20 2025
[INFO] =================================================
[Input] Found input driver: "android".
[Core] Loading dynamic libretro core from: "/data/user/0/com.retroarch.aarch64/cores/mgba_libretro_android.so".
[Override] Redirecting save file to "/storage/emulated/0/RetroArch/saves/mGBA/Castlevania - Aria of Sorrow (USA).srm".
[Override] Redirecting save state to "/storage/emulated/0/RetroArch/states/mGBA/Castlevania - Aria of Sorrow (USA).state".
[Environ] GET_CORE_OPTIONS_VERSION.
[Environ] GET_LANGUAGE: "0".
[Environ] SET_CORE_OPTIONS_V2_INTL.
[Remap] Core-specific remap found at "/storage/emulated/0/RetroArch/config/remaps/mGBA/mGBA.rmp".
[Environ] SET_PIXEL_FORMAT: RGB565.
[Environ] SET_INPUT_DESCRIPTORS.
[Environ] GET_LOG_INTERFACE.
[Content] Loading content file: "/storage/D2D8-3B0B/Roms/GBA/Castlevania - Aria of Sorrow (USA).zip#Castlevania - Aria of Sorrow (USA).gba".
[Content] CRC32: 0x47a42f0e.
[Environ] SET_AUDIO_BUFFER_STATUS_CALLBACK.
[Environ] GET_SYSTEM_DIRECTORY: "/storage/emulated/0/RetroArch/system".
[Core] Version of libretro API: 1, Compiled against API: 1
[Core] Geometry: 240x160, Aspect: 1.500, FPS: 59.73, Sample rate: 48000.00 Hz.
[Video] Set video size to: 720x480.
[Vulkan] Vulkan dynamic library loaded.
[Vulkan] Setting swap interval: 2.
[Vulkan] Created Android surface: 502889407888.
[Vulkan] Found GPU at index 0: "Adreno (TM) 830".
[Vulkan] Using GPU index 0.
[Vulkan] Using semaphores for WSI acquire.
[Vulkan] Using GPU: "Adreno (TM) 830".
[Vulkan] Queue family 0 supports 3 sub-queues.
[Vulkan] Got 4 swapchain images.
[Vulkan] Native window size: 1920x1080.
[Vulkan] Using resolution 1920x1080.
[Vulkan] Using RGB565 format.
[Shaders] Specific shader preset found at "/storage/emulated/0/RetroArch/config/mGBA/mGBA.slangp".
[Slang] Compiling shader: "/data/user/0/com.retroarch.aarch64/shaders/shaders_slang/handheld/shaders/color/lut/GBA-LUT.slang".
[Vulkan] Using render target format R8G8B8A8_UNORM for pass output #0.
[Slang] Compiling shader: "/data/user/0/com.retroarch.aarch64/shaders/shaders_slang/handheld/shaders/lcd-cgwg/lcd-grid-v2.slang".
[Vulkan] Using render target format R8G8B8A8_UNORM for pass output #1.
[Slang] Compiling shader: "/data/user/0/com.retroarch.aarch64/shaders/shaders_slang/handheld/shaders/color/gba-color.slang".
[Vulkan] Using render target format R8G8B8A8_UNORM for pass output #2.
[Vulkan] Creating framebuffer 256x256 (max 1 level(s)).
[Vulkan] Creating framebuffer 1620x1080 (max 1 level(s)).
[Vulkan] Creating framebuffer 1620x1080 (max 1 level(s)).
[Input] Found joypad driver: "android".
[Video] Found display server: "android".
[Audio] Set audio input rate to: 48203.57 Hz.
[Vulkan] Creating framebuffer 256x256 (max 1 level(s)).
[Vulkan] Creating framebuffer 1620x1080 (max 1 level(s)).
[Vulkan] Creating framebuffer 1620x1080 (max 1 level(s)).
[OpenSL] Requested audio latency: 32 ms.
[OpenSL] Setting audio latency: Block size = 576, Blocks = 11, Total = 6336...
[Audio] Started synchronous audio driver.
[Display] Found display driver: "vulkan".
[Playlist] Loading favorites file: "/storage/emulated/0/RetroArch/playlists/builtin/content_favorites.lpl".
[Playlist] Loading history file: "/storage/emulated/0/RetroArch/playlists/builtin/content_history.lpl".
[Playlist] Loading history file: "/storage/emulated/0/RetroArch/playlists/builtin/content_image_history.lpl".
[Playlist] Loading history file: "/storage/emulated/0/RetroArch/playlists/builtin/content_music_history.lpl".
[Environ] SET_MEMORY_MAPS.
[Environ] SET_SUPPORT_ACHIEVEMENTS: yes.
[Environ] SET_MINIMUM_AUDIO_LATENCY.
[Environ] GET_RUMBLE_INTERFACE.
[Vulkan] Updating framebuffer size 240x160 (format: 37).
[Vulkan] Native window size: 1920x1080.
[Vulkan] Creating framebuffer 256x256 (max 1 level(s)).
[Vulkan] Creating framebuffer 1620x1080 (max 1 level(s)).
[Vulkan] Creating framebuffer 1620x1080 (max 1 level(s)).
[Vulkan] Updating framebuffer size 240x160 (format: 37).
GBA Memory: Detected SRAM savegame
[Vulkan] Setting swap interval: 0.
[Vulkan] Native window size: 1920x1080.
[Vulkan] Creating framebuffer 256x256 (max 1 level(s)).
[Vulkan] Creating framebuffer 1620x1080 (max 1 level(s)).
[Vulkan] Creating framebuffer 1620x1080 (max 1 level(s)).
[Vulkan] Updating framebuffer size 240x160 (format: 37).
[Vulkan] Setting swap interval: 2.
[Vulkan] Native window size: 1920x1080.
[Vulkan] Creating framebuffer 256x256 (max 1 level(s)).
[Vulkan] Creating framebuffer 1620x1080 (max 1 level(s)).
[Vulkan] Creating framebuffer 1620x1080 (max 1 level(s)).
[Vulkan] Updating framebuffer size 240x160 (format: 37).
[Vulkan] Setting swap interval: 0.
[Vulkan] Native window size: 1920x1080.
[Vulkan] Creating framebuffer 256x256 (max 1 level(s)).
[Vulkan] Creating framebuffer 1620x1080 (max 1 level(s)).
[Vulkan] Creating framebuffer 1620x1080 (max 1 level(s)).
[Vulkan] Updating framebuffer size 240x160 (format: 37).
[Vulkan] Setting swap interval: 2.
[Vulkan] Native window size: 1920x1080.
[Vulkan] Creating framebuffer 256x256 (max 1 level(s)).
[Vulkan] Creating framebuffer 1620x1080 (max 1 level(s)).
[Vulkan] Creating framebuffer 1620x1080 (max 1 level(s)).
[Vulkan] Updating framebuffer size 240x160 (format: 37).
[Vulkan] Setting swap interval: 0.
[Vulkan] Native window size: 1920x1080.
[Vulkan] Creating framebuffer 256x256 (max 1 level(s)).
[Vulkan] Creating framebuffer 1620x1080 (max 1 level(s)).
[Vulkan] Creating framebuffer 1620x1080 (max 1 level(s)).
[Vulkan] Updating framebuffer size 240x160 (format: 37).
[Vulkan] Setting swap interval: 2.
[Vulkan] Native window size: 1920x1080.
[Vulkan] Creating framebuffer 256x256 (max 1 level(s)).
[Vulkan] Creating framebuffer 1620x1080 (max 1 level(s)).
[Vulkan] Creating framebuffer 1620x1080 (max 1 level(s)).
[Vulkan] Updating framebuffer size 240x160 (format: 37).
[Vulkan] Setting swap interval: 0.
[Vulkan] Native window size: 1920x1080.
[Vulkan] Creating framebuffer 256x256 (max 1 level(s)).
[Vulkan] Creating framebuffer 1620x1080 (max 1 level(s)).
[Vulkan] Creating framebuffer 1620x1080 (max 1 level(s)).
[Vulkan] Updating framebuffer size 240x160 (format: 37).
[Vulkan] Setting swap interval: 2.
[Vulkan] Native window size: 1920x1080.
[Vulkan] Creating framebuffer 256x256 (max 1 level(s)).
[Vulkan] Creating framebuffer 1620x1080 (max 1 level(s)).
[Vulkan] Creating framebuffer 1620x1080 (max 1 level(s)).
[Vulkan] Updating framebuffer size 240x160 (format: 37).
[Vulkan] Setting swap interval: 0.
[Vulkan] Native window size: 1920x1080.
[Vulkan] Creating framebuffer 256x256 (max 1 level(s)).
[Vulkan] Creating framebuffer 1620x1080 (max 1 level(s)).
[Vulkan] Creating framebuffer 1620x1080 (max 1 level(s)).
[Vulkan] Updating framebuffer size 240x160 (format: 37).
[Vulkan] Setting swap interval: 2.
[Vulkan] Native window size: 1920x1080.
[Vulkan] Creating framebuffer 256x256 (max 1 level(s)).
[Vulkan] Creating framebuffer 1620x1080 (max 1 level(s)).
[Vulkan] Creating framebuffer 1620x1080 (max 1 level(s)).
[Vulkan] Updating framebuffer size 0x0 (format: 37).
Is there an existing issue for this?
Description
I'm trying to dial in RetroArch on an AYN Odin 3 with its 120 Hz screen, using the Vulkan video driver.
Issue:
At this point I suspect some kind of Vulkan + high refresh + Odin 3 / Snapdragon 8 Elite driver issue, but I'm not sure.
Update:
lcd-grid-v2-gba-color.slangp) or evenhandheld/color-mod/gba-color.slangp.Expected behavior
No response
Steps to reproduce the bug
Version/Commit
1.22.2
Bisect Results
No response
Present in the nightly version
I don't know
Platform & operating system
AYN Odin 3, Android 15
Affected Cores
mGBA, gambatte
Environment information
No response
Relevant log output
[Video] Set video size to: 960x720.
[Vulkan] Vulkan dynamic library loaded.
[Vulkan] Setting swap interval: 1.
[Vulkan] Created Android surface: 502889576368.
[Vulkan] Found GPU at index 0: "Adreno (TM) 830".
[Vulkan] Using GPU index 0.
[Vulkan] Using semaphores for WSI acquire.
[Vulkan] Using GPU: "Adreno (TM) 830".
[Vulkan] Queue family 0 supports 3 sub-queues.
[Vulkan] Got 4 swapchain images.
[Vulkan] Native window size: 1920x1080.
[Vulkan] Using resolution 1920x1080.
[Vulkan] Using RGB565 format.
[Vulkan] Loading stock shader.
[Input] Found joypad driver: "android".
[Audio] Set audio input rate to: 48000.00 Hz.
[OpenSL] Requested audio latency: 32 ms.
[OpenSL] Setting audio latency: Block size = 576, Blocks = 11, Total = 6336...
[Audio] Started synchronous audio driver.
[Display] Found display driver: "vulkan".
[Vulkan] Native window size: 1920x1080.
[Core] Using content: "/storage/D2D8-3B0B/Roms/GBA/Castlevania - Aria of Sorrow (USA).zip#Castlevania - Aria of Sorrow (USA).gba".
[Core] Unloading core...
[Core] Unloading core symbols...
RetroArch 1.22.2 (Git 69a4f0e)
=== Build =======================================
Capabilities: ASIMD
[INFO] Version: 1.22.2
[INFO] Git: 69a4f0e
[INFO] Built: Nov 20 2025
[INFO] =================================================
[Input] Found input driver: "android".
[Core] Loading dynamic libretro core from: "/data/user/0/com.retroarch.aarch64/cores/mgba_libretro_android.so".
[Override] Redirecting save file to "/storage/emulated/0/RetroArch/saves/mGBA/Castlevania - Aria of Sorrow (USA).srm".
[Override] Redirecting save state to "/storage/emulated/0/RetroArch/states/mGBA/Castlevania - Aria of Sorrow (USA).state".
[Environ] GET_CORE_OPTIONS_VERSION.
[Environ] GET_LANGUAGE: "0".
[Environ] SET_CORE_OPTIONS_V2_INTL.
[Remap] Core-specific remap found at "/storage/emulated/0/RetroArch/config/remaps/mGBA/mGBA.rmp".
[Environ] SET_PIXEL_FORMAT: RGB565.
[Environ] SET_INPUT_DESCRIPTORS.
[Environ] GET_LOG_INTERFACE.
[Content] Loading content file: "/storage/D2D8-3B0B/Roms/GBA/Castlevania - Aria of Sorrow (USA).zip#Castlevania - Aria of Sorrow (USA).gba".
[Content] CRC32: 0x47a42f0e.
[Environ] SET_AUDIO_BUFFER_STATUS_CALLBACK.
[Environ] GET_SYSTEM_DIRECTORY: "/storage/emulated/0/RetroArch/system".
[Core] Version of libretro API: 1, Compiled against API: 1
[Core] Geometry: 240x160, Aspect: 1.500, FPS: 59.73, Sample rate: 48000.00 Hz.
[Video] Set video size to: 720x480.
[Vulkan] Vulkan dynamic library loaded.
[Vulkan] Setting swap interval: 2.
[Vulkan] Created Android surface: 502889407888.
[Vulkan] Found GPU at index 0: "Adreno (TM) 830".
[Vulkan] Using GPU index 0.
[Vulkan] Using semaphores for WSI acquire.
[Vulkan] Using GPU: "Adreno (TM) 830".
[Vulkan] Queue family 0 supports 3 sub-queues.
[Vulkan] Got 4 swapchain images.
[Vulkan] Native window size: 1920x1080.
[Vulkan] Using resolution 1920x1080.
[Vulkan] Using RGB565 format.
[Shaders] Specific shader preset found at "/storage/emulated/0/RetroArch/config/mGBA/mGBA.slangp".
[Slang] Compiling shader: "/data/user/0/com.retroarch.aarch64/shaders/shaders_slang/handheld/shaders/color/lut/GBA-LUT.slang".
[Vulkan] Using render target format R8G8B8A8_UNORM for pass output #0.
[Slang] Compiling shader: "/data/user/0/com.retroarch.aarch64/shaders/shaders_slang/handheld/shaders/lcd-cgwg/lcd-grid-v2.slang".
[Vulkan] Using render target format R8G8B8A8_UNORM for pass output #1.
[Slang] Compiling shader: "/data/user/0/com.retroarch.aarch64/shaders/shaders_slang/handheld/shaders/color/gba-color.slang".
[Vulkan] Using render target format R8G8B8A8_UNORM for pass output #2.
[Vulkan] Creating framebuffer 256x256 (max 1 level(s)).
[Vulkan] Creating framebuffer 1620x1080 (max 1 level(s)).
[Vulkan] Creating framebuffer 1620x1080 (max 1 level(s)).
[Input] Found joypad driver: "android".
[Video] Found display server: "android".
[Audio] Set audio input rate to: 48203.57 Hz.
[Vulkan] Creating framebuffer 256x256 (max 1 level(s)).
[Vulkan] Creating framebuffer 1620x1080 (max 1 level(s)).
[Vulkan] Creating framebuffer 1620x1080 (max 1 level(s)).
[OpenSL] Requested audio latency: 32 ms.
[OpenSL] Setting audio latency: Block size = 576, Blocks = 11, Total = 6336...
[Audio] Started synchronous audio driver.
[Display] Found display driver: "vulkan".
[Playlist] Loading favorites file: "/storage/emulated/0/RetroArch/playlists/builtin/content_favorites.lpl".
[Playlist] Loading history file: "/storage/emulated/0/RetroArch/playlists/builtin/content_history.lpl".
[Playlist] Loading history file: "/storage/emulated/0/RetroArch/playlists/builtin/content_image_history.lpl".
[Playlist] Loading history file: "/storage/emulated/0/RetroArch/playlists/builtin/content_music_history.lpl".
[Environ] SET_MEMORY_MAPS.
[Environ] SET_SUPPORT_ACHIEVEMENTS: yes.
[Environ] SET_MINIMUM_AUDIO_LATENCY.
[Environ] GET_RUMBLE_INTERFACE.
[Vulkan] Updating framebuffer size 240x160 (format: 37).
[Vulkan] Native window size: 1920x1080.
[Vulkan] Creating framebuffer 256x256 (max 1 level(s)).
[Vulkan] Creating framebuffer 1620x1080 (max 1 level(s)).
[Vulkan] Creating framebuffer 1620x1080 (max 1 level(s)).
[Vulkan] Updating framebuffer size 240x160 (format: 37).
GBA Memory: Detected SRAM savegame
[Vulkan] Setting swap interval: 0.
[Vulkan] Native window size: 1920x1080.
[Vulkan] Creating framebuffer 256x256 (max 1 level(s)).
[Vulkan] Creating framebuffer 1620x1080 (max 1 level(s)).
[Vulkan] Creating framebuffer 1620x1080 (max 1 level(s)).
[Vulkan] Updating framebuffer size 240x160 (format: 37).
[Vulkan] Setting swap interval: 2.
[Vulkan] Native window size: 1920x1080.
[Vulkan] Creating framebuffer 256x256 (max 1 level(s)).
[Vulkan] Creating framebuffer 1620x1080 (max 1 level(s)).
[Vulkan] Creating framebuffer 1620x1080 (max 1 level(s)).
[Vulkan] Updating framebuffer size 240x160 (format: 37).
[Vulkan] Setting swap interval: 0.
[Vulkan] Native window size: 1920x1080.
[Vulkan] Creating framebuffer 256x256 (max 1 level(s)).
[Vulkan] Creating framebuffer 1620x1080 (max 1 level(s)).
[Vulkan] Creating framebuffer 1620x1080 (max 1 level(s)).
[Vulkan] Updating framebuffer size 240x160 (format: 37).
[Vulkan] Setting swap interval: 2.
[Vulkan] Native window size: 1920x1080.
[Vulkan] Creating framebuffer 256x256 (max 1 level(s)).
[Vulkan] Creating framebuffer 1620x1080 (max 1 level(s)).
[Vulkan] Creating framebuffer 1620x1080 (max 1 level(s)).
[Vulkan] Updating framebuffer size 240x160 (format: 37).
[Vulkan] Setting swap interval: 0.
[Vulkan] Native window size: 1920x1080.
[Vulkan] Creating framebuffer 256x256 (max 1 level(s)).
[Vulkan] Creating framebuffer 1620x1080 (max 1 level(s)).
[Vulkan] Creating framebuffer 1620x1080 (max 1 level(s)).
[Vulkan] Updating framebuffer size 240x160 (format: 37).
[Vulkan] Setting swap interval: 2.
[Vulkan] Native window size: 1920x1080.
[Vulkan] Creating framebuffer 256x256 (max 1 level(s)).
[Vulkan] Creating framebuffer 1620x1080 (max 1 level(s)).
[Vulkan] Creating framebuffer 1620x1080 (max 1 level(s)).
[Vulkan] Updating framebuffer size 240x160 (format: 37).
[Vulkan] Setting swap interval: 0.
[Vulkan] Native window size: 1920x1080.
[Vulkan] Creating framebuffer 256x256 (max 1 level(s)).
[Vulkan] Creating framebuffer 1620x1080 (max 1 level(s)).
[Vulkan] Creating framebuffer 1620x1080 (max 1 level(s)).
[Vulkan] Updating framebuffer size 240x160 (format: 37).
[Vulkan] Setting swap interval: 2.
[Vulkan] Native window size: 1920x1080.
[Vulkan] Creating framebuffer 256x256 (max 1 level(s)).
[Vulkan] Creating framebuffer 1620x1080 (max 1 level(s)).
[Vulkan] Creating framebuffer 1620x1080 (max 1 level(s)).
[Vulkan] Updating framebuffer size 240x160 (format: 37).
[Vulkan] Setting swap interval: 0.
[Vulkan] Native window size: 1920x1080.
[Vulkan] Creating framebuffer 256x256 (max 1 level(s)).
[Vulkan] Creating framebuffer 1620x1080 (max 1 level(s)).
[Vulkan] Creating framebuffer 1620x1080 (max 1 level(s)).
[Vulkan] Updating framebuffer size 240x160 (format: 37).
[Vulkan] Setting swap interval: 2.
[Vulkan] Native window size: 1920x1080.
[Vulkan] Creating framebuffer 256x256 (max 1 level(s)).
[Vulkan] Creating framebuffer 1620x1080 (max 1 level(s)).
[Vulkan] Creating framebuffer 1620x1080 (max 1 level(s)).
[Vulkan] Updating framebuffer size 0x0 (format: 37).