Hello, I am trying to get GPU acceleration to work with SPI display using ili9225_dri.so, and I use kmscube to test. The SoC is STM32MP157c with Vivante GC400 GPU and I use Mesa3D 24.0.9 (rootfs generated with Buildroot 2025.02.3) and kernel 5.10.176 (from STM).
I also have the same system with MIPI Display attached. While kmscube renders at 60 fps with the MIPI Display system, I get only 11 fps with the SPI display. Apart from that both systems are the same. I checked the output of kmscube and it prints the exact same extensions on both, the only difference is the framerate. I also checked output of kmscube's /proc/PID/maps and the only difference is that with MIPI Display it loads /usr/lib/dri/stm_dri.so while with the SPI Display it loads /usr/lib/dri/ili9225_dri.so, but I see those files are the same (hardlinks). Both open /dev/dri/renderD128 (GPU). Why am I getting just 11 fps on the system with SPI Display? Is there some architectural limitation, either in Mesa, kernel, or HW-related? I suppose both setups use kernel's KMS as renderer only (kmsro), thus it should render at the same framerate. The difference in HW is the peripheral the displays use - LTDC (stm_dri.so) vs. SPI (eventually ili9225_dri.so). Why do I see no /usr/lib/etnaviv_dri.so loaded? The MIPI Display is attached to the LTDC (LCD Timing Display Controller) peripheral of the STM SoC and the display driver is drivers/gpu/drm/panel/panel-sitronix-st7703.c (DRM panel). The SPI display driver uses the kernel's TinyDRM API and its driver is drivers/gpu/drm/tiny/ili9225.c. I also tried softpipe (disabled GPU in device-tree) and it renders 7 fps on both systems. I attach the output from kmscube on the SPI Display system (the MIPI Display is the same except framerate is 60 fps.) Kind regards Josef Lusticky
# kmscube Using display 0x6f62d8 with EGL version 1.4 =================================== EGL information: version: "1.4" vendor: "Mesa Project" client extensions: "EGL_EXT_client_extensions EGL_EXT_device_base EGL_EXT_device_enumeration EGL_EXT_device_query EGL_EXT_platform_base EGL_KHR_client_get_all_proc_addres ses EGL_KHR_debug EGL_EXT_platform_device EGL_EXT_explicit_device EGL_MESA_platform_gbm EGL_KHR_platform_gbm EGL_MESA_platform_surfaceless" display extensions: "EGL_ANDROID_blob_cache EGL_ANDROID_native_fence_sync EGL_EXT_buffer_age EGL_EXT_image_dma_buf_import EGL_EXT_image_dma_buf_import_modifiers EGL_KHR_c l_event2 EGL_KHR_config_attribs EGL_KHR_context_flush_control EGL_KHR_create_context EGL_KHR_create_context_no_error EGL_KHR_fence_sync EGL_KHR_get_all_proc_addresses EGL_K HR_gl_renderbuffer_image EGL_KHR_gl_texture_2D_image EGL_KHR_gl_texture_cubemap_image EGL_KHR_image EGL_KHR_image_base EGL_KHR_image_pixmap EGL_KHR_no_config_context EGL_KH R_reusable_sync EGL_KHR_surfaceless_context EGL_EXT_pixel_format_float EGL_KHR_wait_sync EGL_MESA_configless_context EGL_MESA_drm_image EGL_MESA_gl_interop EGL_MESA_image_d ma_buf_export EGL_MESA_query_driver " =================================== OpenGL ES 2.x information: version: "OpenGL ES 2.0 Mesa 24.0.9" shading language version: "OpenGL ES GLSL ES 1.0.16" vendor: "Mesa" renderer: "Vivante GC400 rev 4652" extensions: "GL_EXT_blend_minmax GL_EXT_multi_draw_arrays GL_EXT_texture_compression_s3tc GL_EXT_texture_compression_dxt1 GL_EXT_texture_format_BGRA8888 GL_OES_compressed _ETC1_RGB8_texture GL_OES_depth24 GL_OES_element_index_uint GL_OES_fbo_render_mipmap GL_OES_mapbuffer GL_OES_rgb8_rgba8 GL_OES_standard_derivatives GL_OES_stencil8 GL_OES_t exture_npot GL_OES_vertex_half_float GL_OES_EGL_image GL_OES_depth_texture GL_AMD_performance_monitor GL_OES_packed_depth_stencil GL_OES_get_program_binary GL_APPLE_texture _max_level GL_EXT_discard_framebuffer GL_EXT_read_format_bgra GL_NV_pack_subimage GL_NV_texture_barrier GL_EXT_frag_depth GL_NV_fbo_color_attachments GL_OES_EGL_image_exter nal GL_OES_EGL_sync GL_OES_vertex_array_object GL_ANGLE_pack_reverse_row_order GL_ANGLE_texture_compression_dxt3 GL_ANGLE_texture_compression_dxt5 GL_EXT_unpack_subimage GL _NV_draw_buffers GL_NV_read_buffer GL_NV_read_depth GL_NV_read_depth_stencil GL_NV_read_stencil GL_APPLE_sync GL_EXT_draw_buffers GL_EXT_map_buffer_range GL_KHR_debug GL_NV _pixel_buffer_object GL_OES_required_internalformat GL_OES_surfaceless_context GL_EXT_debug_label GL_EXT_separate_shader_objects GL_EXT_compressed_ETC1_RGB8_sub_texture GL_ EXT_draw_elements_base_vertex GL_EXT_texture_border_clamp GL_KHR_context_flush_control GL_OES_draw_elements_base_vertex GL_OES_texture_border_clamp GL_KHR_no_error GL_KHR_p arallel_shader_compile GL_INTEL_blackhole_render GL_MESA_sampler_objects GL_MESA_bgra " =================================== Rendered 23 frames in 2.004054 sec (11.476739 fps) Rendered 46 frames in 4.007773 sec (11.477695 fps)