I was working on an Android app which uses OpenCL on the Galaxy Note 5 which has the Mali T-760 GPU. I pulled the library from the device and got the headers from the Mali OpenCL SDK and everything worked.
I'm trying to build and run the same app on the Galaxy S7 Edge which has the Mali T-880 GPU. I pulled the library from the device and used the same headers as before.
Now I get this error:
E/mali: ERROR: The DDK is not compatible with any of the Mali GPUs on the system. The DDK was built for 0x750 r0p1 status range [0..15], but none of the GPUs matched:
E/mali: /dev/mali0 detected as 0x880 r2p0 status 0
It's strange because I pulled the library from device itself and I tried the library from different locations too:
/system/lib/libOpenCl.so
/system/vendor/lib/libOpenCL.so
/system/vendor/lib/egl/libGLES_mali.so
In all cases I get the same error.
What is this DDK?
Where is it specified? In the headers? In the shared object?
What do I need to update in my app to make it work?
Based on that error message it looks like you have statically linked your application with the library from the Mali-T760 device, not the library from the Galaxy S7.
Note that you don't need a real OpenCL library to link against; you only need to link against a shim which exposes the symbols and then you can load the real library using the dynamic linker on the platform. The Mali OpenCL SDK here:
... includes the sources needed to build OpenCL stub library, and the link commands needed to correctly link against it so the dynamic link resolves correctly on the platform.
HTH,
Pete
Yes I thought so too so I performed a clean on the project and the error happened again even though the link target was the library from the S7.
I tried to do this again but this time I removed all other libs and it worked.
Some strange behavior from Android Studio I guess.