A recent blog post by Imagination offers some interesting background to solving the challenges that have to be overcome to implement efficient Computation Photography on modern mobile platforms, Specifically, how to share image data between the various compute engines without redundant operations. In a nutshell, Imagination developed a set of extensions that allow images to be shared between multiple components which share the same system memory. These extensions are based onKhronos EGL images, which provide an interface between multiple Khronos APIs and the native platform windowing system, and handle issues related to binding and synchronization.
Using this technique to harness the SGX GPU is claimed to achieve significantly better performance (30-70 fps) compared to running the image processing tasks on the CPU (4-7 fps), while reducing the power consumption.
The extensions discussed above are fully supported in the OpenCL driver that ships with the low-cost Hardkernel ORDOID-XU board.
An illustration from the full blog post shows how the complete system solution comes together. The camera YUV data is converted to RGB using the Khronos extension OES_EGL_image_external, and then uses PowerVR’s zero-copy functionality to directly access the camera texture data from OpenCL, without requiring any intermediate copy from OpenGL ES to OpenCL. The filtered output image is then inserted into another zero-copy texture which can be written to the screen in 2D or 3D using OpenGL ES.
Read the full Blog post here:
Future GPU / OpenCL SDK and Tools
In the blog Imagination also said they will “soon” be releasing a GPU compute dev program to enable registered developers to access the PowerVR GPU compute SDK and programming guidelines. Furthermore, developers looking to take full advantage of the compute capabilities of our PowerVR Series6 GPU will be available to use PVRTune which will include enhanced profiling for OpenCL and API timing data.