hrydgard / ppsspp

A PSP emulator for Android, Windows, Mac and Linux, written in C++. Want to contribute? Join us on Discord at https://discord.gg/5NJB6dD or just send pull requests / issues. For discussion use the forums at forums.ppsspp.org.
https://www.ppsspp.org
Other
11.36k stars 2.18k forks source link

Compilation failure on Raspberry Pi 4: SDLGLGraphicsContext.cpp:90:37: error: 'XOpenDisplay' was not declared in this scope #12346

Closed neilmunday closed 5 years ago

neilmunday commented 5 years ago

What happens?

Compilation failure under Arch Linux on Raspberry Pi 4 with SDL 2.0.10.

What should happen?

Successful compilation.

What hardware, operating system, and PPSSPP version? On desktop, GPU matters for graphical issues.

Raspberry Pi4, Arch Linux, PPSSPPP git clone.

Compilation error:

[ 15%] Building CXX object CMakeFiles/native.dir/SDL/SDLGLGraphicsContext.cpp.o
cc1plus: warning: switch -mcpu=cortex-a72 conflicts with -march=armv7-a switch
/home/pi/pes-build/ppsspp/SDL/SDLGLGraphicsContext.cpp: In function 'int8_t EGL_Open(SDL_Window*)':
/home/pi/pes-build/ppsspp/SDL/SDLGLGraphicsContext.cpp:90:37: error: 'XOpenDisplay' was not declared in this scope
   g_Display = (EGLNativeDisplayType)XOpenDisplay(nullptr);
                                     ^~~~~~~~~~~~
/home/pi/pes-build/ppsspp/SDL/SDLGLGraphicsContext.cpp:90:37: note: suggested alternative: 'g_Display'
   g_Display = (EGLNativeDisplayType)XOpenDisplay(nullptr);
                                     ^~~~~~~~~~~~
                                     g_Display
/home/pi/pes-build/ppsspp/SDL/SDLGLGraphicsContext.cpp:98:51: error: 'union SDL_SysWMinfo::<unnamed>' has no member named 'x11'
    g_Display = (EGLNativeDisplayType)sysInfo.info.x11.display;
                                                   ^~~
/home/pi/pes-build/ppsspp/SDL/SDLGLGraphicsContext.cpp:99:49: error: 'union SDL_SysWMinfo::<unnamed>' has no member named 'x11'
    g_Window = (EGLNativeWindowType)sysInfo.info.x11.window;
                                                 ^~~
/home/pi/pes-build/ppsspp/SDL/SDLGLGraphicsContext.cpp:123:38: error: 'XOpenDisplay' was not declared in this scope
    g_Display = (EGLNativeDisplayType)XOpenDisplay(nullptr);
                                      ^~~~~~~~~~~~
/home/pi/pes-build/ppsspp/SDL/SDLGLGraphicsContext.cpp:123:38: note: suggested alternative: 'g_Display'
    g_Display = (EGLNativeDisplayType)XOpenDisplay(nullptr);
                                      ^~~~~~~~~~~~
                                      g_Display
/home/pi/pes-build/ppsspp/SDL/SDLGLGraphicsContext.cpp: In function 'void EGL_Close()':
/home/pi/pes-build/ppsspp/SDL/SDLGLGraphicsContext.cpp:286:19: error: 'Display' was not declared in this scope
    XCloseDisplay((Display *)g_Display);
                   ^~~~~~~
/home/pi/pes-build/ppsspp/SDL/SDLGLGraphicsContext.cpp:286:19: note: suggested alternative: 'g_Display'
    XCloseDisplay((Display *)g_Display);
                   ^~~~~~~
                   g_Display
/home/pi/pes-build/ppsspp/SDL/SDLGLGraphicsContext.cpp:286:28: error: expected primary-expression before ')' token
    XCloseDisplay((Display *)g_Display);
                            ^
/home/pi/pes-build/ppsspp/SDL/SDLGLGraphicsContext.cpp:286:4: error: 'XCloseDisplay' was not declared in this scope
    XCloseDisplay((Display *)g_Display);
    ^~~~~~~~~~~~~
/home/pi/pes-build/ppsspp/SDL/SDLGLGraphicsContext.cpp:286:4: note: suggested alternative: 'eglGetDisplay'
    XCloseDisplay((Display *)g_Display);
    ^~~~~~~~~~~~~
    eglGetDisplay
At global scope:
cc1plus: warning: unrecognized command line option '-Wno-deprecated-register'
make[2]: *** [CMakeFiles/native.dir/build.make:89: CMakeFiles/native.dir/SDL/SDLGLGraphicsContext.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:266: CMakeFiles/native.dir/all] Error 2
make: *** [Makefile:130: all] Error 2
unknownbrackets commented 5 years ago

How do you configure? It seems like it's not being compiled with X?

-[Unknown]

neilmunday commented 5 years ago

Correct, I am trying to build PPSSPP without X. I have done this in the past for the Raspberry Pi 2 and 3.

Here are the commands I am using to build PPSSPP:

git clone git://github.com/hrydgard/ppsspp
git submodule init
git submodule update
./linux_rpi.sh
mkdir build
cd build
cmake -D SDL2_LIBRARY:PATH=/opt/sdl2/default/lib/libSDL2.so \
-D SDL2_INCLUDE_DIR:PATH=/opt/sdl2/default/include/SDL2 \
-D CMAKE_INSTALL_PREFIX:PATH=/opt/ppsspp \
-D CMAKE_TOOLCHAIN_FILE=../cmake/Toolchains/raspberry.armv7.cmake \
-D USING_X11_VULKAN=0 \
..

I am also using the vc4-fkms-v3d dtoverlay for the Raspberry Pi 4 in /boot/config.txt.

SDL2 2.0.10 was configured with the following configure flags:

./configure --prefix=/opt/sdl2/default --enable-assertions=disabled --disable-video-opengl --disable-video-x11 --disable-pulseaudio --disable-esd --enable-video-opengles --enable-libudev --disable-video-rpi --enable-video-kmsdrm

unknownbrackets commented 5 years ago

With the Pi 4, apparently it now works to use X and get hardware acceleration (so I understand, haven't tried a Pi 4.)

As such, USING_FBDEV is not forced on for Pi 4: https://github.com/hrydgard/ppsspp/blob/6a1676413ee8bdbb53e0c133e02cf74a8950a13a/cmake/Toolchains/raspberry.armv7.cmake#L35-L39

If you want fbdev still on Pi 4, just pass -D USING_FBDEV=ON to cmake (you can safely pass this for Pi 2/3/etc. as well.)

-[Unknown]

neilmunday commented 5 years ago

Thanks for the info. I'll give it go over the next few days and feedback.

neilmunday commented 5 years ago

Although PPSSPP now compiles, it fails at run time:

./PPSSPPSDL
I: VulkanLoader.cpp:264: VulkanMayBeAvailable: Device allowed ('SDL:Linux')
I: VulkanLoader.cpp:280: Vulkan loader: Library not available
DEBUG: Vulkan is not available, not using Vulkan.
I: Config.cpp:517: Longest display side: -1 pixels. Choosing scale 1
48:49:392 Core/Config.cpp:1188 I[LOADER]: Loading controller config: /home/pi/.config/ppsspp/PSP/SYSTEM/controls.ini
48:49:398 UI/NativeApp.cpp:389 E[LOADER]: Failed graphics backends: OPENGL,ALL,ALL,ALL,ALL
48:49:398 Core/Config.cpp:599 E[LOADER]: Graphics backend failed for 0, trying another
48:49:398 Core/Config.cpp:624 E[LOADER]: All graphics backends failed
48:49:408 Core/Config.cpp:1273 I[LOADER]: Config saved (got storage permission): '/home/pi/.config/ppsspp/PSP/SYSTEM/ppsspp.ini'
48:49:409 Core/Config.cpp:1286 I[LOADER]: Controller config saved: /home/pi/.config/ppsspp/PSP/SYSTEM/controls.ini
Pixels: 3840 x 2160
Virtual pixels: 3840 x 2160
* failed to add service - already in use?

It looks like it might be trying to use the /opt/vc libraries which don't work on the Raspberry Pi 4.

LunaMoo commented 5 years ago

See #12388, closing since it compiles and the runtime issue was reported a new driver problem.

unknownbrackets commented 5 years ago

It would be interesting to know if other GL apps using fbdev still work fine. We're not really doing anything strange.

-[Unknown]

neilmunday commented 5 years ago

I've compiled RetroArch and Mupen64Plus (standalone) and they both work for me. Retroarch is using OpenGL/KMS and Mupen64Plus is using GLES and SDL2 (built with kms also). I think PPSSPP is picking up the GLES libraries under /opt/vc which aren't supported on the Raspberry Pi 4. I'll try telling PPSSPP to use the GLES libraries under /usr/lib instead.

unknownbrackets commented 5 years ago

If it works to move set(CMAKE_EXE_LINKER_FLAGS "-L/opt/vc/lib" CACHE STRING "" FORCE) inside the if to, that seems reasonable.

People had reported it working on Pi 4, so IO wonder what changed. Unfortunately, I don't have a device to test with.

-[Unknown]

neilmunday commented 5 years ago

Here's the cmake file I used with my latest attempt:

set(ARCH_FLAGS "-mfpu=neon -mtune=cortex-a72 -march=armv8-a -mfloat-abi=hard")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${ARCH_FLAGS}"  CACHE STRING "" FORCE)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${ARCH_FLAGS}" CACHE STRING "" FORCE)
set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} ${ARCH_FLAGS}" CACHE STRING "" FORCE)
set(OPENGL_LIBRARIES /usr/lib/libGLESv2.so)
set(USING_GLES2 ON)
set(ARMV7 ON)
set(USE_WAYLAND_WSI OFF)
set(USING_FBDEV ON)
set(USING_X11_VULKAN OFF)

Although PPSSPP compiled, it fails at run time:

I: VulkanLoader.cpp:264: VulkanMayBeAvailable: Device allowed ('SDL:Linux')
I: VulkanLoader.cpp:280: Vulkan loader: Library not available
DEBUG: Vulkan is not available, not using Vulkan.
I: Config.cpp:517: Longest display side: -1 pixels. Choosing scale 1
24:50:032 Core/Config.cpp:1188 I[LOADER]: Loading controller config: /home/pi/.config/ppsspp/PSP/SYSTEM/controls.ini
24:50:038 UI/NativeApp.cpp:389 E[LOADER]: Failed graphics backends: OPENGL,ALL,ALL
24:50:038 Core/Config.cpp:599 E[LOADER]: Graphics backend failed for 0, trying another
24:50:038 Core/Config.cpp:624 E[LOADER]: All graphics backends failed
24:50:048 Core/Config.cpp:1273 I[LOADER]: Config saved (got storage permission): '/home/pi/.config/ppsspp/PSP/SYSTEM/ppsspp.ini'
24:50:049 Core/Config.cpp:1286 I[LOADER]: Controller config saved: /home/pi/.config/ppsspp/PSP/SYSTEM/controls.ini
Pixels: 3840 x 2160
Virtual pixels: 3840 x 2160
ERROR: EGL Error EGL_NOT_INITIALIZED detected in file /home/pi/pes-build/ppsspp/SDL/SDLGLGraphicsContext.cpp at line 65 (0x3001)
EGL ERROR: Unable to initialize EGL display.
ERROR: EGL Error EGL_NOT_INITIALIZED detected in file /home/pi/pes-build/ppsspp/SDL/SDLGLGraphicsContext.cpp at line 239 (0x3001)
EGL ERROR: Unable to find a usable EGL config.
EGL_Init() failed
GL init error ''
loading control pad mappings from gamecontrollerdb.txt: SUCCESS!
Segmentation fault (core dumped)
valrak commented 5 years ago

Is there any workaround for this?

neilmunday commented 5 years ago

I've not found a way to make it work sadly. My next approach was going to be to install an X desktop, but I was hoping to avoid this.

unknownbrackets commented 4 years ago

Is it possible this is related to #12474?

-[Unknown]

neilmunday commented 4 years ago

Apologies for the delay in replying, the Raspberry Pi 4 I was using was on loan from a friend. I now however, have my own Raspberry Pi 4 so I've spent some more time trying to get PPSPP working under Arch Linux (as tried above).

The original issue remains sadly. I have also tried installing an X windows desktop (Xfce) and I get these errors instead:

I: VulkanLoader.cpp:272: VulkanMayBeAvailable: Device allowed ('SDL:Linux')
I: VulkanLoader.cpp:279: VulkanMayBeAvailable: Library loaded ('libvulkan.so')
I: VulkanLoader.cpp:332: VulkanMayBeAvailable: Enumerating instance extensions
I: VulkanLoader.cpp:343: VulkanMayBeAvailable: Instance extension count: 2
I: VulkanLoader.cpp:351: VulkanMaybeAvailable: Instance extension found: VK_EXT_debug_report (00000009)
I: VulkanLoader.cpp:351: VulkanMaybeAvailable: Instance extension found: VK_EXT_debug_utils (00000001)
E: VulkanLoader.cpp:369: Surface extension not found
DEBUG: Vulkan is not available, not using Vulkan.
I: Config.cpp:520: Longest display side: -1 pixels. Choosing scale 1
28:42:208 UI/NativeApp.cpp:401 E[LOADER]: Failed graphics backends: OPENGL,ALL,ALL,ALL,ALL,ALL,ALL,ALL,ALL
28:42:208 Core/Config.cpp:602 E[LOADER]: Graphics backend failed for 0, trying another
28:42:208 Core/Config.cpp:627 E[LOADER]: All graphics backends failed
Pixels: 960 x 544
Virtual pixels: 960 x 544
I: http_client.cpp:525: Completed downloading http://www.ppsspp.org/version.json to memory
ERROR: EGL Error EGL_BAD_ALLOC detected in file /home/pi/pes-build/ppsspp/SDL/SDLGLGraphicsContext.cpp at line 259 (0x3003)
EGL ERROR: Unable to create EGL surface!
EGL_Init() failed
GL init error ''
loading control pad mappings from gamecontrollerdb.txt: SUCCESS!
I: NativeApp.cpp:798: NativeInitGraphics
Segmentation fault (core dumped)

Here is some of the output from glxinfo in case it helps:

name of display: :0.0
display: :0  screen: 0
direct rendering: Yes
server glx vendor string: SGI
server glx version string: 1.4
server glx extensions:
    GLX_ARB_create_context, GLX_ARB_create_context_no_error,
    GLX_ARB_create_context_profile, GLX_ARB_fbconfig_float,
    GLX_ARB_framebuffer_sRGB, GLX_ARB_multisample,
    GLX_EXT_create_context_es2_profile, GLX_EXT_create_context_es_profile,
    GLX_EXT_fbconfig_packed_float, GLX_EXT_framebuffer_sRGB,
    GLX_EXT_import_context, GLX_EXT_libglvnd, GLX_EXT_no_config_context,
    GLX_EXT_texture_from_pixmap, GLX_EXT_visual_info, GLX_EXT_visual_rating,
    GLX_INTEL_swap_event, GLX_MESA_copy_sub_buffer, GLX_OML_swap_method,
    GLX_SGIS_multisample, GLX_SGIX_fbconfig, GLX_SGIX_pbuffer,
    GLX_SGIX_visual_select_group, GLX_SGI_make_current_read,
    GLX_SGI_swap_control
client glx vendor string: Mesa Project and SGI
client glx version string: 1.4
client glx extensions:
    GLX_ARB_context_flush_control, GLX_ARB_create_context,
    GLX_ARB_create_context_no_error, GLX_ARB_create_context_profile,
    GLX_ARB_create_context_robustness, GLX_ARB_fbconfig_float,
    GLX_ARB_framebuffer_sRGB, GLX_ARB_get_proc_address, GLX_ARB_multisample,
    GLX_EXT_buffer_age, GLX_EXT_create_context_es2_profile,
    GLX_EXT_create_context_es_profile, GLX_EXT_fbconfig_packed_float,
    GLX_EXT_framebuffer_sRGB, GLX_EXT_import_context,
    GLX_EXT_texture_from_pixmap, GLX_EXT_visual_info, GLX_EXT_visual_rating,
    GLX_INTEL_swap_event, GLX_MESA_copy_sub_buffer,
    GLX_MESA_multithread_makecurrent, GLX_MESA_query_renderer,
    GLX_MESA_swap_control, GLX_OML_swap_method, GLX_OML_sync_control,
    GLX_SGIS_multisample, GLX_SGIX_fbconfig, GLX_SGIX_pbuffer,
    GLX_SGIX_visual_select_group, GLX_SGI_make_current_read,
    GLX_SGI_swap_control, GLX_SGI_video_sync
GLX version: 1.4
GLX extensions:
    GLX_ARB_create_context, GLX_ARB_create_context_no_error,
    GLX_ARB_create_context_profile, GLX_ARB_fbconfig_float,
    GLX_ARB_framebuffer_sRGB, GLX_ARB_get_proc_address, GLX_ARB_multisample,
    GLX_EXT_buffer_age, GLX_EXT_create_context_es2_profile,
    GLX_EXT_create_context_es_profile, GLX_EXT_fbconfig_packed_float,
    GLX_EXT_framebuffer_sRGB, GLX_EXT_import_context,
    GLX_EXT_texture_from_pixmap, GLX_EXT_visual_info, GLX_EXT_visual_rating,
    GLX_INTEL_swap_event, GLX_MESA_copy_sub_buffer, GLX_MESA_query_renderer,
    GLX_MESA_swap_control, GLX_OML_swap_method, GLX_OML_sync_control,
    GLX_SGIS_multisample, GLX_SGIX_fbconfig, GLX_SGIX_pbuffer,
    GLX_SGIX_visual_select_group, GLX_SGI_make_current_read,
    GLX_SGI_swap_control, GLX_SGI_video_sync
Extended renderer info (GLX_MESA_query_renderer):
    Vendor: Broadcom (0x14e4)
    Device: V3D 4.2 (0xffffffff)
    Version: 20.0.5
    Accelerated: yes
    Video memory: 3723MB
    Unified memory: yes
    Preferred profile: compat (0x2)
    Max core profile version: 0.0
    Max compat profile version: 2.1
    Max GLES1 profile version: 1.1
    Max GLES[23] profile version: 3.1
OpenGL vendor string: Broadcom
OpenGL renderer string: V3D 4.2
OpenGL version string: 2.1 Mesa 20.0.5
OpenGL shading language version string: 1.20
OpenGL extensions:
    GL_AMD_conservative_depth, GL_AMD_multi_draw_indirect,
    GL_AMD_shader_trinary_minmax, GL_AMD_texture_texture4,
    GL_APPLE_packed_pixels, GL_ARB_ES2_compatibility,
    GL_ARB_ES3_compatibility, GL_ARB_arrays_of_arrays, GL_ARB_base_instance,
    GL_ARB_buffer_storage, GL_ARB_clear_buffer_object,
    GL_ARB_color_buffer_float, GL_ARB_compressed_texture_pixel_storage,
    GL_ARB_compute_shader, GL_ARB_compute_variable_group_size,
    GL_ARB_conservative_depth, GL_ARB_copy_buffer, GL_ARB_debug_output,
    GL_ARB_depth_buffer_float, GL_ARB_depth_texture, GL_ARB_draw_buffers,
    GL_ARB_draw_elements_base_vertex, GL_ARB_draw_indirect,
    GL_ARB_draw_instanced, GL_ARB_explicit_attrib_location,
    GL_ARB_explicit_uniform_location, GL_ARB_fragment_coord_conventions,
    GL_ARB_fragment_program, GL_ARB_fragment_program_shadow,
    GL_ARB_fragment_shader, GL_ARB_framebuffer_no_attachments,
    GL_ARB_framebuffer_object, GL_ARB_framebuffer_sRGB,
    GL_ARB_get_program_binary, GL_ARB_get_texture_sub_image,
    GL_ARB_half_float_pixel, GL_ARB_half_float_vertex,
    GL_ARB_instanced_arrays, GL_ARB_internalformat_query,
    GL_ARB_internalformat_query2, GL_ARB_invalidate_subdata,
    GL_ARB_map_buffer_alignment, GL_ARB_map_buffer_range, GL_ARB_multi_bind,
    GL_ARB_multi_draw_indirect, GL_ARB_multisample, GL_ARB_multitexture,
    GL_ARB_occlusion_query, GL_ARB_occlusion_query2,
    GL_ARB_parallel_shader_compile, GL_ARB_pixel_buffer_object,
    GL_ARB_point_parameters, GL_ARB_point_sprite,
    GL_ARB_program_interface_query, GL_ARB_provoking_vertex,
    GL_ARB_robustness, GL_ARB_sampler_objects, GL_ARB_separate_shader_objects,
    GL_ARB_shader_atomic_counter_ops, GL_ARB_shader_atomic_counters,
    GL_ARB_shader_bit_encoding, GL_ARB_shader_image_load_store,
    GL_ARB_shader_image_size, GL_ARB_shader_objects,
    GL_ARB_shader_storage_buffer_object, GL_ARB_shader_texture_lod,
    GL_ARB_shading_language_100, GL_ARB_shading_language_420pack,
    GL_ARB_shading_language_include, GL_ARB_shading_language_packing,
    GL_ARB_shadow, GL_ARB_stencil_texturing, GL_ARB_sync,
    GL_ARB_texture_border_clamp, GL_ARB_texture_compression,
    GL_ARB_texture_cube_map, GL_ARB_texture_env_add,
    GL_ARB_texture_env_combine, GL_ARB_texture_env_crossbar,
    GL_ARB_texture_env_dot3, GL_ARB_texture_float, GL_ARB_texture_gather,
    GL_ARB_texture_mirrored_repeat, GL_ARB_texture_multisample,
    GL_ARB_texture_non_power_of_two, GL_ARB_texture_query_levels,
    GL_ARB_texture_query_lod, GL_ARB_texture_rectangle, GL_ARB_texture_rg,
    GL_ARB_texture_rgb10_a2ui, GL_ARB_texture_stencil8,
    GL_ARB_texture_storage, GL_ARB_texture_storage_multisample,
    GL_ARB_texture_swizzle, GL_ARB_transform_feedback2,
    GL_ARB_transform_feedback_instanced, GL_ARB_transpose_matrix,
    GL_ARB_uniform_buffer_object, GL_ARB_vertex_array_object,
    GL_ARB_vertex_attrib_binding, GL_ARB_vertex_buffer_object,
    GL_ARB_vertex_program, GL_ARB_vertex_shader,
    GL_ARB_vertex_type_2_10_10_10_rev, GL_ARB_window_pos,
    GL_ATI_blend_equation_separate, GL_ATI_draw_buffers,
    GL_ATI_fragment_shader, GL_ATI_separate_stencil,
    GL_ATI_texture_env_combine3, GL_ATI_texture_float,
    GL_EXT_EGL_image_storage, GL_EXT_EGL_sync, GL_EXT_abgr, GL_EXT_bgra,
    GL_EXT_blend_color, GL_EXT_blend_equation_separate,
    GL_EXT_blend_func_separate, GL_EXT_blend_minmax, GL_EXT_blend_subtract,
    GL_EXT_compiled_vertex_array, GL_EXT_copy_texture,
    GL_EXT_direct_state_access, GL_EXT_draw_buffers2, GL_EXT_draw_instanced,
    GL_EXT_draw_range_elements, GL_EXT_fog_coord, GL_EXT_framebuffer_blit,
    GL_EXT_framebuffer_multisample, GL_EXT_framebuffer_multisample_blit_scaled,
    GL_EXT_framebuffer_object, GL_EXT_framebuffer_sRGB,
    GL_EXT_gpu_program_parameters, GL_EXT_gpu_shader4,
    GL_EXT_multi_draw_arrays, GL_EXT_packed_depth_stencil,
    GL_EXT_packed_float, GL_EXT_packed_pixels, GL_EXT_pixel_buffer_object,
    GL_EXT_point_parameters, GL_EXT_provoking_vertex, GL_EXT_rescale_normal,
    GL_EXT_secondary_color, GL_EXT_separate_specular_color,
    GL_EXT_shader_integer_mix, GL_EXT_shadow_funcs, GL_EXT_stencil_two_side,
    GL_EXT_stencil_wrap, GL_EXT_subtexture, GL_EXT_texture, GL_EXT_texture3D,
    GL_EXT_texture_array, GL_EXT_texture_buffer_object,
    GL_EXT_texture_cube_map, GL_EXT_texture_edge_clamp,
    GL_EXT_texture_env_add, GL_EXT_texture_env_combine,
    GL_EXT_texture_env_dot3, GL_EXT_texture_integer, GL_EXT_texture_lod_bias,
    GL_EXT_texture_object, GL_EXT_texture_rectangle, GL_EXT_texture_sRGB,
    GL_EXT_texture_sRGB_decode, GL_EXT_texture_shared_exponent,
    GL_EXT_texture_snorm, GL_EXT_texture_swizzle, GL_EXT_transform_feedback,
    GL_EXT_vertex_array, GL_IBM_multimode_draw_arrays, GL_IBM_rasterpos_clip,
    GL_IBM_texture_mirrored_repeat, GL_INGR_blend_func_separate,
    GL_KHR_context_flush_control, GL_KHR_debug, GL_KHR_no_error,
    GL_KHR_parallel_shader_compile, GL_KHR_texture_compression_astc_ldr,
    GL_KHR_texture_compression_astc_sliced_3d, GL_MESA_pack_invert,
    GL_MESA_shader_integer_functions, GL_MESA_texture_signed_rgba,
    GL_MESA_window_pos, GL_NV_blend_square, GL_NV_fog_distance,
    GL_NV_light_max_exponent, GL_NV_packed_depth_stencil,
    GL_NV_primitive_restart, GL_NV_texgen_reflection,
    GL_NV_texture_env_combine4, GL_NV_texture_rectangle, GL_OES_EGL_image,
    GL_OES_read_format, GL_SGIS_generate_mipmap, GL_SGIS_texture_border_clamp,
    GL_SGIS_texture_edge_clamp, GL_SGIS_texture_lod, GL_SUN_multi_draw_arrays

OpenGL ES profile version string: OpenGL ES 3.1 Mesa 20.0.5
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.10
OpenGL ES profile extensions:
    GL_APPLE_texture_max_level, GL_EXT_EGL_image_storage,
    GL_EXT_base_instance, GL_EXT_blend_minmax, GL_EXT_buffer_storage,
    GL_EXT_color_buffer_float, GL_EXT_compressed_ETC1_RGB8_sub_texture,
    GL_EXT_discard_framebuffer, GL_EXT_draw_buffers,
    GL_EXT_draw_elements_base_vertex, GL_EXT_float_blend, GL_EXT_frag_depth,
    GL_EXT_geometry_point_size, GL_EXT_geometry_shader,
    GL_EXT_map_buffer_range, GL_EXT_multi_draw_arrays,
    GL_EXT_occlusion_query_boolean, GL_EXT_primitive_bounding_box,
    GL_EXT_read_format_bgra, GL_EXT_sRGB_write_control,
    GL_EXT_separate_shader_objects, GL_EXT_shader_implicit_conversions,
    GL_EXT_shader_integer_mix, GL_EXT_shader_io_blocks,
    GL_EXT_texture_border_clamp, GL_EXT_texture_format_BGRA8888,
    GL_EXT_texture_query_lod, GL_EXT_texture_rg, GL_EXT_texture_sRGB_decode,
    GL_EXT_texture_type_2_10_10_10_REV, GL_EXT_unpack_subimage,
    GL_KHR_context_flush_control, GL_KHR_debug, GL_KHR_no_error,
    GL_KHR_parallel_shader_compile, GL_KHR_texture_compression_astc_ldr,
    GL_KHR_texture_compression_astc_sliced_3d, GL_MESA_framebuffer_flip_y,
    GL_MESA_shader_integer_functions, GL_NV_draw_buffers,
    GL_NV_fbo_color_attachments, GL_NV_image_formats, GL_NV_read_buffer,
    GL_NV_read_depth, GL_NV_read_depth_stencil, GL_NV_read_stencil,
    GL_OES_EGL_image, GL_OES_EGL_image_external,
    GL_OES_EGL_image_external_essl3, GL_OES_EGL_sync,
    GL_OES_compressed_ETC1_RGB8_texture, GL_OES_depth24, GL_OES_depth_texture,
    GL_OES_depth_texture_cube_map, GL_OES_draw_elements_base_vertex,
    GL_OES_element_index_uint, GL_OES_fbo_render_mipmap,
    GL_OES_geometry_point_size, GL_OES_geometry_shader,
    GL_OES_get_program_binary, GL_OES_mapbuffer, GL_OES_packed_depth_stencil,
    GL_OES_primitive_bounding_box, GL_OES_required_internalformat,
    GL_OES_rgb8_rgba8, GL_OES_shader_image_atomic, GL_OES_shader_io_blocks,
    GL_OES_standard_derivatives, GL_OES_stencil8, GL_OES_surfaceless_context,
    GL_OES_texture_3D, GL_OES_texture_border_clamp, GL_OES_texture_float,
    GL_OES_texture_half_float, GL_OES_texture_half_float_linear,
    GL_OES_texture_npot, GL_OES_texture_stencil8,
    GL_OES_texture_storage_multisample_2d_array, GL_OES_vertex_array_object,
    GL_OES_vertex_half_float

Mesa version is: 20.0.5

unknownbrackets commented 4 years ago

That looks exactly like #12474.

See here specifically: https://github.com/hrydgard/ppsspp/issues/12474#issuecomment-569979614 And the Mesa issue: https://gitlab.freedesktop.org/mesa/mesa/issues/1976#note_285659

-[Unknown]

neilmunday commented 4 years ago

Ok, thanks.

Is there anything I can do to help resolve or debug the issue further for you?

unknownbrackets commented 4 years ago

Well, it sounds like the mesa team was wanting someone to set some breakpoints and find out if somehow we're asking for the same surface to be used with multiple EGL instances, because that's apparently the commit it stopped working on - only on pi4, though.

-[Unknown]

neilmunday commented 4 years ago

I've now managed to get PPSSPP to work without requiring an X11 desktop under Arch Linux on the Raspberry Pi 4.

Mesa upgraded to version 20.0.6-2. SDL2 upgraded to 2.0.12

Used the following cmake args:

-DARMV7=ON -DUSING_EGL=OFF -DUSING_GLES2=ON -DUSING_X11_VULKAN=OFF -DUSE_WAYLAND_WSI=OFF -DUSING_FBDEV=ON -DUSING_QT_UI='OFF' -DUSE_FFMPEG=yes -DUSE_SYSTEM_FFMPEG=yes