
Article Index
- 1 – Overview
- 2 – Gallery
- 3 – First Impressions
- 4 – 3D Support: OpenGL and OpenGL ES
- 5 – Thermal Imaging
- 6 – Conclusion
- 7 – Links
1 – Overview
The Tinker Board is an SBC (Single Board Computer) that has been launched back in 2017 by ASUS. The Tinker Board directly targets the popular Raspberry Pi 3: it has the same size, same input/output layout (USB, ethernet, audio ports) and same 40-pin GPIO connector.
The Tinker Board is built around the Rockchip RK3288 which is a SoC (system on chip): it includes the CPU and the GPU on a same chip.
Here are the main features of the Tinker Board:
- SoC: Rockchip RK3288
- CPU: ARM Cortex-A17 quad-core @ 1.8GHz
- GPU: ARM Mali T764 (or T760 MP4), 4-core @ 600MHz with OpenGL ES 2.0 / 3.0 support
- Memory 2GB LPDDR3
- Connectors: 4 x USB 2.0, one audio jack, one 1GB ethernet, one 40-pin GPIO and one HDMI 1.4
- WIFI: 802.11 b/g/n, Bluetooth v4.0 + EDR
We can already see some differences between the Tinker Board and the RPi 3: a faster CPU (1.8GHz vs 1.2GHz for the RPI 3), a faster and more powerful GPU and more memory (twice the amount found on the RPi 3). The Tinker Board support 4K resolution but at 30Hz only because of the HDMI 1.4 interface.
The Tinker Board is a bit more expensive than the RPi 3. For example here in Switzerland, the average price for the RPi 3 is $50 while the Tinker Board is sold at $80.
Like for the RPi 3, a Debian-based distribution is available for the Tinker Board: the Tinker OS. At the time of writing, the latest version of Tinker OS is 2.0.4. You can download Tinker OS 2.0.4 from this page. Just put this image on a micro-SD card (on Windows you can use Win32DiskImager 0.9.5), plug the micro-SD card on the Tinker Board and that’s all.
2 – Gallery
The box:


The bundle: the Tinker Board, a ready-to-use heatsink and an user’s guide.

The Tinker Board:







The Tinker Board is shipped with a heatsink. The heatsink is mandatory because the Tinker Board can produce a lot of heat, depending on the CPU or GPU load:

Here is the 40-pin GPIO connector diagram, as provided in the user’s guide:

3 – First Impressions
I played with the Tinker Board these last two weeks and I updated GeeXLab to support this tiny computer (see this news).
I first installed Tinker OS 1.8. This version is the official one available on Tinker Board homepage. You know what? This version sucks! The apt-get install command does not work out the box. In the file manager, no way to open a txt file by double clicking on it. First time I see that behavior. And the sound… you have to waste a lot of time just to be able to make the jack connector to work. Yes Tinker OS 1.8 is a joke.
Fortunately, I stumbled on Tinker OS 2.0.4 on an unofficial Tinker Board forum (thanks guys for this forum). Things have been improved a lot and Tinker OS 2.0.4 works almost as it should be. apt-get install works correctly (I quickly installed all tools I needed to code GeeXLab) and, wooowww, you can now open a text file in the default text editor by double clicking on it! And the sound? There is a sound manager (PulseAudio Volume Control) in Tinker OS and now, it works fine. Ok now, with Tinker OS 2.0.4, we have something solid.
The only complaint I have about Tinker OS 2.0.4 is the sluggishness of the user interface. X11 windows do not follow quickly the mouse movements and it’s really annoying. On the Raspberry Pi with Raspbian Stretch, this aspect has been optimized and windows react quickly to mouse solicitations. I hope this small performance issue will be fixed in the next update of Tinker OS.
4 – 3D Support: OpenGL and OpenGL ES
Let’s talk about the interesting stuff: the 3D support.
Tinker OS supports OpenGL desktop and OpenGL ES. And hardware accelerated X11 windows are available for both versions of OpenGL. Very cool. On Raspberry Pi, there is no accelerated windows for OpenGL ES. You have to draw on the desktop framebuffer directly. It works but being able to render on an X11 window is better. The support of X11 windows for OpenGL ES is a good point for Tinker OS.
Here is an overview of the OpenGL features available in the log file of GeeXLab (the complete list of all OpenGL ES extensions exposed is available at the end of the post).
GeeXLab + OpenGL desktop
(21:04:29) GL_RENDERER: Gallium 0.4 on llvmpipe (LLVM 3.9, 128 bits) (21:04:29) GL_VENDOR: VMware, Inc. (21:04:29) GL_VERSION: 3.0 Mesa 13.0.6 (21:04:29) GL_SHADING_LANGUAGE_VERSION: 1.30 (21:04:29) OpenGL version detected: 3.0 (21:04:29) OpenGL extensions: 238 (21:04:29) OpenGL hardware limits: (21:04:29) GL_MAX_VERTEX_ATTRIBS: 16 (21:04:29) GL_MAX_VERTEX_UNIFORM_COMPONENTS: 16384 (21:04:29) GL_MAX_FRAGMENT_UNIFORM_COMPONENTS: 16384 (21:04:29) GL_MAX_VARYING_FLOATS: 128 (21:04:29) GL_MAX_TEXTURE_SIZE: 8192 (21:04:29) GL_MAX_VIEWPORT_DIMS: 8192 8192 (21:04:29) GL_MAX_TEXTURE_IMAGE_UNITS: 32 (21:04:29) GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS: 96
GeeXLab + OpenGL ES
(21:04:45) [OpenGL] EGL_VENDOR: ARM (21:04:45) [OpenGL] EGL_VERSION: 1.4 Midgard-"r9p0-05rel0" (21:04:45) [OpenGL] EGL_CLIENT_APIS: OpenGL_ES (21:04:45) [OpenGL] GL_VENDOR: ARM (21:04:45) [OpenGL] GL_RENDERER: Mali-T760 (21:04:45) [OpenGL] GL_VERSION: OpenGL ES 3.1 v1.r9p0-05rel0-git(f980191).e4ba9e4c6ff8005348d0332aae160089 (21:04:45) GL_SHADING_LANGUAGE_VERSION: OpenGL ES GLSL ES 3.10 (21:04:45) GL_MAX_VERTEX_ATTRIBS: 16 (21:04:45) GL_MAX_TEXTURE_SIZE: 8192 (21:04:45) GL_MAX_VIEWPORT_DIMS: 8192 8192 (21:04:45) GL_MAX_TEXTURE_IMAGE_UNITS: 16 (21:04:45) GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS: 96
The Tinker Board supports OpenGL 3.0 for desktop. But it’s a software rasterizer. The Gallium 0.4 on llvmpipe renderer is a CPU only renderer (llvmpipe is a multi-threaded and highly optimized software rasterizer). The following screenshot shows the OpenGL version of GeeXLab for the Tinker Board. Look at the framerate (44 FPS) and the high CPU usage (the small monitor on the task bar):

To enjoy a GPU accelerated renderer, you have to switch to OpenGL ES. The Tinker Board supports OpenGL ES 3.1 and this time we have a GPU renderer. And as I said, we can create X11 windows with an hardware accelerated OpenGL ES context which is very nice.
The following screenshot shows the OpenGL ES version of GeeXLab for the Tinker Board. The framerate is near 60FPS but this time we have a very low CPU usage:

5 – Thermal Imaging
The Tinker Board is shipped with an heatsink. The Rockchip RK3288 processor generates a lot of heat and you must stick the heatsink on the Tinker Board for correct usage. Here are the thermal images of both sides of the Tinker Board at idle:


At idle with the heatsink, the processor temperature is around 46°C. On load it easily reach and exceed 65°C…
6 – Conclusion
The Tinker Board is a serious alternative to the Raspberry Pi 3. If you are focused on realtime 3D, you will appreciate the Tinker Board because it offers a better OpenGL support than the Raspberry Pi 3. And the Mali T764 GPU is a powerful GPU (I will write a quick performance test very soon).
I haven’t tested yet the GPIO connector to see if it’s really compatible with the RPi 3 one, but I was able to compile without issues all libraries I used to control the RPi 3 GPIO (RGB LED matrix and WiringPi). I think it’s a positive sign! I will test the GPIO of the Tinker Board in an upcoming article.
ASUS did a good job with the Tinker Board. Tinker OS works correctly (if we forget the sluggishness of the user interface) and I appreciate the Mali T764 GPU and its OpenGL ES 3.1 support. For example the following shadertoy demo (shipped with GeeXLab for Tinker Board) does not work on Raspberry Pi while it’s perfectly supported by the Tinker Board (okay the Tinker Board is only able to produce 7 or 8 frames per second but hey, it’s a shadertoy demo!):

Last thing, the Chromium browser works correctly and the playing of youtube videos is very smooth. Not like on the RPi 3! I don’t say we can’t play youtube videos on the RPi 3, but I prefer watching youtube videos on the Tinker Board 😉
7 – Links
Here is the list of all OpenGL ES extensions exposed on the Tinker Board (Tinker OS 2.0.4). The list includes EGL and GL extensions.
– GL_RENDERER: Mali-T760
– GL_VENDOR: ARM
– GL_VERSION: OpenGL ES 3.1 v1.r9p0-05rel0-git(f980191).e4ba9e4c6ff8005348d0332aae160089
– GL_SHADING_LANGUAGE_VERSION: OpenGL ES GLSL ES 3.10
– OpenGL extensions: 98 (GL:81 / EGL:17)
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
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_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_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_draw_buffers_indexed
- GL_OES_draw_buffers_indexed
- 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_tessellation_shader
- GL_OES_tessellation_shader
- GL_EXT_primitive_bounding_box
- GL_OES_primitive_bounding_box
- GL_EXT_geometry_shader
- GL_OES_geometry_shader
- GL_ANDROID_extension_pack_es31a
- GL_EXT_gpu_shader5
- GL_OES_gpu_shader5
- GL_EXT_texture_buffer
- GL_OES_texture_buffer
- GL_EXT_copy_image
- GL_OES_copy_image
- GL_EXT_color_buffer_half_float
- GL_EXT_color_buffer_float
- GL_OVR_multiview
- GL_OVR_multiview2
- GL_OVR_multiview_multisampled_render_to_texture
- GL_ARM_packed_arithmetic
Thanks for the review!
I am quite interested in this machine because of the GPU. Would it be possible for you to post the full extension list for ES2/3?
What would be really awesome would be to have Vulkan support!
Yes Vulkan support would be great, I hope we’ll see it very soon.
Yes I will update the article with OpenGL ES extensions.
GL ES extensions:
http://www.geeks3d.com/20180110/discovering-the-tinker-board-asus-reply-to-raspberry-pi-3/#20180112
Nice! Thanks for posting the extension list. Geometry + Tesselation shaders! Yay, I just ordered one 🙂
I also read somewhere that one can run Android on it and therefore (theoretically) use the Android Vulkan driver for the Mali. Already very useful for me to have Android on a board like this for development, Vulkan support would be a very welcome extra.
Great post!
Would you know if Chrome in the 2.04 OS was compiled to use OpenGL ES for acc and WebGL?