Welcome to the project page for GPGPU with GLES, below you may find most recent updates about the project.

Current status: a working library allowing you to do GPGPU computations which can be extended with new computations

Latest updates

  • Project Report


  • Weeks 8 and 9


    The last two weeks were spent mostly on my Master’s Summer School where we created a startup prototype in Digital Health (and we won :), so the time was well spent!

  • Library Innards

    What exactly happens under the hood

  • Week 7


    I tried rendering to a Pbuffer instead of regular surface on the device as proposed in the issue comment, however it did not work for me. Thus for now I will focus on polishing the API, to allow for operator chaining and adding broadcast operators. I also will try unrolling the loops as mentioned in the 2D convolution query.

  • Benchmarking

    This post/page is a collection of benchmarks made both on the Beaglebone Black rev. C and my PC with NVIDIA GTX960M GPU. The operations are performed with 32-bit buffer on both devices.

  • Week 6


    Hurdles with BBB ARGB8888 format

    It turns out that BBB has issues with the internal ARGB8888 format used by my library for computing 32-bit floating-point operations. It returns a mysterious error which is hard to decipher:

    Creating Window surface..
    PVR:(Error): WSEGL_CreateWindowDrawable: Couldn't set CRTC: Invalid argument [0, ]
    Unable to create surface
        egl error 'EGL_BAD_ALLOC' (0x3003)

    I am right now checking why it does not work as expected - there is an issue opened on Imagination forum and is under investigation. It is quite possible that it is some obsolete limitation, as the platform should be supporting such operations.

  • Week 5


    Finally computing

    This week was a breakthrough as the library finally computes something using GPU. A lot of time went into figuring how to do it (last week’s flashbacks) and a lot digging around obscure internet sites to understand what I was missing.

  • Week 4


    CMake polishing

    I needed to update my CMake files to work properly with my BBB. It turned out that there is no OpenGL on the Imagination image for BBB and just EGL + GLES. Therefore I had to write my own FindEGL.cmake which would not depend on OpenGL. I was long baffled by undefined references in my code, until I realized that I need to import system libraries as UNKNOWN IMPORTED like this:

        add_library(EGL::EGL UNKNOWN IMPORTED)
        set_target_properties(EGL::EGL PROPERTIES

    I also had to specify custom location for include directories for the EGL and GLES libraries (in FindX.cmake files) like this: ```cmake if (NOT DEFINED GLES2_INCLUDE_DIR) set(GLES2_INCLUDE_DIR “/opt/Native_SDK/include”) endif()

  • Week 3

    Changing my environment

    I needed to change my environment as the image I was previously using: AM3358 Debian 10.3 2020-04-06 4GB SD IoT proved not to have graphics system set up in a sufficent manner for EGL context creation. Therefore I installed AM3358 Debian 9.12 2020-04-06 4GB SD ImgTec and had to configure it.

  • Installing PowerVR SDK

    This post will show you how to setup and test the PowerVR SDK from Imagination to be sure that everythings works fine.

  • Week 2

    Setting up PowerVR SDK tutorial

    The step-by-step instruction on how to setup the SDK is available here

  • Week 1


    • Further reading about PowerVR
    • Started creating CMakefiles for two elements of my project: C API library and the application using it (for now the application uses PowerVR SDK)
  • Pre GSoC and Community Bonding period activities

    Before announcing the results