Jump to content

How to get OpenGL ES working on Odroid XU4?


rs677567

Recommended Posts

Hi, I'm using the minimal Armbian Debian-based image as a starting point to install my favorite desktop environment KDE and related software. I've got everything set up so that I got it working partially. I remember trying the Armbian desktop (Ubuntu flavor) but it did not have it set up out of the box IIRC (I could be wrong).

 

I took a look at how the hardkernel guys set up their official Ubuntu image for Odroid XU4 and used that as a guide to set it up on my minimal Armbian.

 

So here's what I've done and what I've learned I need to do according to the official image:

 

1. apt install mali-t62x-x11-driver xserver-xorg-video-armsoc-sun4i

2. copied xorg.conf from official Hardkernel image to /etc/X11 and removed Armbian xorg configuration file from the /etc/X11/xorg.conf.d/ directory

3. chmod 0755 /usr/lib/arm-linux-gnueabihf/libmali.so

 

Now I installed my desktop environment (kde-full) and other misc software. Here's there most interesting bit. If I now run es2_info (from the mesa-utils-extra package) I get the following:

 

ERROR: The DDK is not compatible with any of the Mali GPUs on the system.
The DDK was built for 0x620 r0p1 status range [0..15], but none of the GPUs matched:
Error: eglInitialize() failed

but now if do chmod 666 /dev/mali0 and run es2_info | grep -i renderer I get:

GL_RENDERER: Mali-T628

So in other words the previous error message is complete bogus and has led me astray for quite a while. It's simply a permission issue that it detects as compatibility error... which doesn't make much sense to me but whatever it works now.

 

There is however an issue with Qt if the permissions of /dev/mali0 is set to anything permissive like 666. Any KDE program I run after setting those permissions get the following error and a crash (example with running konsole):

 

Unable to find an X11 visual which matches EGL config 9
KCrash: crashing... crashRecursionCounter = 2
KCrash: Application Name = konsole path = /usr/bin pid = 2506
KCrash: Arguments: /usr/bin/konsole 
KCrash: Attempting to start /usr/lib/arm-linux-gnueabihf/libexec/drkonqi from kdeinit
sock_file=/run/user/1000/kdeinit5__0

[1]+  Stopped                 konsole

Note that other OpenGL ES programs work without issues (es2gears, glmark2-es2), and this seems to be an issue with Qt specifically and not anything driver related. I did some digging and found these old Hardkernel threads discussing the issue:

 

https://forum.odroid.com/viewtopic.php?t=30646

https://forum.odroid.com/viewtopic.php?f=93&t=15362

https://forum.odroid.com/viewtopic.php?f=95&t=31070&p=224756#p224400

 

The TL;DR of those threads is: Hardkernel patches Qt (specifically libqt5gui5) to make it detect ARM as a vendor.

 

These are my findings and conclusions. Maybe I am completely wrong and someone may have got it working a different way which does not cause this issue with Qt? I'm just wondering why these fixes aren't in upstream Qt or Armbian because it would seem like a common issue to me.

 

Here is some system info:

Spoiler

uname -a:


Linux odroidxu4 4.14.150-odroidxu4 #2 SMP PREEMPT Mon Oct 28 08:07:45 CET 2019 armv7l GNU/Linux

cat /etc/issue:


Debian Buster with Armbian Linux \l

xorg.conf:


Section "Device"
    Identifier "ODROID"
    Driver     "armsoc"
    Option     "Debug"           "false"
    Option     "DPMS"            "false
    Option     "NoFlip"          "false"
    Option     "NoHardwareMouse" "false"
    Option     "NoG2D"           "false"
EndSection

Section "ServerLayout"
    Identifier "Default Layout"
    Option     "BlankTime"      "0"
    Option     "StandbyTime"    "0"
    Option     "OffTime"        "0"
EndSection

Section "DRI"
    Mode 0666
EndSection

es2_info:


EGL_VERSION: 1.4 Midgard-"r12p0-04rel0"
EGL_VENDOR: ARM
EGL_EXTENSIONS:
    , EGL_KHR_image_pixmap, EGL_KHR_partial_update,  EGL_KHR_config_attribs, 
    EGL_KHR_image, EGL_KHR_image_base, EGL_KHR_fence_sync, EGL_KHR_wait_sync, 
    EGL_KHR_gl_colorspace, EGL_KHR_get_all_proc_addresses, 
    EGL_IMG_context_priority, EGL_ARM_pixmap_multisample_discard, 
    EGL_KHR_gl_texture_2D_image, EGL_KHR_gl_renderbuffer_image, 
    EGL_KHR_create_context, EGL_KHR_surfaceless_context, 
    EGL_KHR_gl_texture_cubemap_image, EGL_EXT_create_context_robustness, 
    EGL_KHR_cl_event2
EGL_CLIENT_APIS: OpenGL_ES
GL_VERSION: OpenGL ES 3.1 v1.r12p0-04rel0.5824fa733530fc4698793c84be7a2a51
GL_RENDERER: Mali-T628
GL_EXTENSIONS:
    GL_ARM_rgba8, GL_ARM_mali_shader_binary, GL_OES_depth24, 
    GL_OES_depth_texture, GL_OES_depth_texture_cube_map, 
    GL_OES_packed_depth_stencil, GL_OES_rgb8_rgba8, GL_EXT_read_format_bgra, 
    GL_OES_compressed_paletted_texture, GL_OES_compressed_ETC1_RGB8_texture, 
    GL_OES_standard_derivatives, GL_OES_EGL_image, GL_OES_EGL_image_external, 
    GL_OES_EGL_image_external_essl3, GL_OES_EGL_sync, GL_OES_texture_npot, 
    GL_OES_vertex_half_float, GL_OES_required_internalformat, 
    GL_OES_vertex_array_object, GL_OES_mapbuffer, 
    GL_EXT_texture_format_BGRA8888, GL_EXT_texture_rg, 
    GL_EXT_texture_type_2_10_10_10_REV, GL_OES_fbo_render_mipmap, 
    GL_OES_element_index_uint, GL_EXT_shadow_samplers, 
    GL_OES_texture_compression_astc, GL_KHR_texture_compression_astc_ldr, 
    GL_KHR_texture_compression_astc_hdr, 
    GL_KHR_texture_compression_astc_sliced_3d, GL_KHR_debug, 
    GL_EXT_occlusion_query_boolean, GL_EXT_disjoint_timer_query, 
    GL_EXT_blend_minmax, GL_EXT_discard_framebuffer, 
    GL_OES_get_program_binary, GL_OES_texture_3D, GL_EXT_texture_storage, 
    GL_EXT_multisampled_render_to_texture, GL_OES_surfaceless_context, 
    GL_OES_texture_stencil8, GL_EXT_shader_pixel_local_storage, 
    GL_ARM_shader_framebuffer_fetch, 
    GL_ARM_shader_framebuffer_fetch_depth_stencil, GL_ARM_mali_program_binary, 
    GL_EXT_sRGB, GL_EXT_sRGB_write_control, GL_EXT_texture_sRGB_decode, 
    GL_KHR_blend_equation_advanced, GL_KHR_blend_equation_advanced_coherent, 
    GL_OES_texture_storage_multisample_2d_array, GL_OES_shader_image_atomic, 
    GL_EXT_robustness, GL_EXT_texture_border_clamp, 
    GL_OES_texture_border_clamp, GL_EXT_texture_cube_map_array, 
    GL_OES_texture_cube_map_array, GL_OES_sample_variables, 
    GL_OES_sample_shading, GL_OES_shader_multisample_interpolation, 
    GL_EXT_shader_io_blocks, GL_OES_shader_io_blocks, GL_EXT_gpu_shader5, 
    GL_OES_gpu_shader5, GL_EXT_texture_buffer, GL_OES_texture_buffer, 
    GL_EXT_copy_image, GL_OES_copy_image

glmark2-es2:


=======================================================
    glmark2 2017.07
=======================================================
    OpenGL Information
    GL_VENDOR:     ARM
    GL_RENDERER:   Mali-T628
    GL_VERSION:    OpenGL ES 3.1 v1.r12p0-04rel0.5824fa733530fc4698793c84be7a2a51
=======================================================
[build] use-vbo=false: FPS: 73 FrameTime: 13.699 ms
[build] use-vbo=true: FPS: 77 FrameTime: 12.987 ms
[texture] texture-filter=nearest: FPS: 88 FrameTime: 11.364 ms
[texture] texture-filter=linear: FPS: 76 FrameTime: 13.158 ms
[texture] texture-filter=mipmap: FPS: 78 FrameTime: 12.821 ms
[shading] shading=gouraud: FPS: 78 FrameTime: 12.821 ms
[shading] shading=blinn-phong-inf: FPS: 76 FrameTime: 13.158 ms
[shading] shading=phong: FPS: 76 FrameTime: 13.158 ms
[shading] shading=cel: FPS: 76 FrameTime: 13.158 ms
[bump] bump-render=high-poly: FPS: 69 FrameTime: 14.493 ms
[bump] bump-render=normals: FPS: 77 FrameTime: 12.987 ms
[bump] bump-render=height: FPS: 78 FrameTime: 12.821 ms
[effect2d] kernel=0,1,0;1,-4,1;0,1,0;: FPS: 77 FrameTime: 12.987 ms
[effect2d] kernel=1,1,1,1,1;1,1,1,1,1;1,1,1,1,1;: FPS: 65 FrameTime: 15.385 ms
[pulsar] light=false:quads=5:texture=false: FPS: 79 FrameTime: 12.658 ms
[desktop] blur-radius=5:effect=blur:passes=1:separable=true:windows=4: FPS: 58 FrameTime: 17.241 ms
[desktop] effect=shadow:windows=4: FPS: 72 FrameTime: 13.889 ms
[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 46 FrameTime: 21.739 ms
[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=subdata: FPS: 47 FrameTime: 21.277 ms
[buffer] columns=200:interleave=true:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 51 FrameTime: 19.608 ms
[ideas] speed=duration: FPS: 59 FrameTime: 16.949 ms
[jellyfish] <default>: FPS: 70 FrameTime: 14.286 ms
[terrain] <default>: FPS: 30 FrameTime: 33.333 ms
[shadow] <default>: FPS: 69 FrameTime: 14.493 ms
[refract] <default>: FPS: 43 FrameTime: 23.256 ms
[conditionals] fragment-steps=0:vertex-steps=0: FPS: 77 FrameTime: 12.987 ms
[conditionals] fragment-steps=5:vertex-steps=0: FPS: 76 FrameTime: 13.158 ms
[conditionals] fragment-steps=0:vertex-steps=5: FPS: 77 FrameTime: 12.987 ms
[function] fragment-complexity=low:fragment-steps=5: FPS: 77 FrameTime: 12.987 ms
[function] fragment-complexity=medium:fragment-steps=5: FPS: 75 FrameTime: 13.333 ms
[loop] fragment-loop=false:fragment-steps=5:vertex-steps=5: FPS: 77 FrameTime: 12.987 ms
[loop] fragment-steps=5:fragment-uniform=false:vertex-steps=5: FPS: 76 FrameTime: 13.158 ms
[loop] fragment-steps=5:fragment-uniform=true:vertex-steps=5: FPS: 636 FrameTime: 1.572 ms
=======================================================
                                  glmark2 Score: 86 
=======================================================

 

 

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
×
×
  • Create New...

Important Information

Terms of Use - Privacy Policy - Guidelines