This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Porting a mali_egl_image* Utgard application to Midgard

Hi all

We are currently migrating an embedded application from a Mali 400MP2 Utgard platform to one with a Mali T720 Midgard GPU. The application uses the following (probably fairly common) mali_egl_image* code to achieve zero-copy update of a texture:

EGLImageKHR eglImage = eglCreateImageKHR( display, EGL_NO_CONTEXT, EGL_NATIVE_PIXMAP_KHR, (EGLClientBuffer)(&fbPixMap), NULL );
glEGLImageTargetTexture2DOES(GL_TEXTURE_2D, eglImage);
...
...
mali_egl_image *mimg = mali_egl_image_lock_ptr( eglImage );
unsigned char *buffer = mali_egl_image_map_buffer( mimg, attribs_rgb );

// update buffer here

mali_egl_image_unmap_buffer( mimg, attribs_rgb );
mali_egl_image_unlock_ptr( eglImage );

These mali_egl_image_* functions do not appear to be available in the mali_midgard driver we received from our chip vendor.

Our application is written in C with, apart from the above, standard openGL ES2 calls.

What would be the equivalent approach for updating a texture directly (ie not using glTexSubImage2D() ) with the T720 Midgard driver? Thankfully the above code exists in a single function and called from many places, so ideally a direct replacement would be fantastic!

Regards

Chris

Parents
  • Hi Chris,

    I've clarified with the driver team, and glTexImage2D counts as a create rather than an import, so yes, it will change to "cache optimal" every time.  glTexSubImage2D will not change the tiling, so if you want to keep linear you would need to use that.

    As to how to get linear - if the allocator is the DDK it will be cache optimal. If the allocator is external and the image is imported it will be whatever the external allocator uses. For example, Android Gralloc will always allocate images using linear tiling whenever the image is host visible. 

    If you do it the old way with pixmaps it will end up linear as I understand it, yes.

    Cheers, Ben

Reply
  • Hi Chris,

    I've clarified with the driver team, and glTexImage2D counts as a create rather than an import, so yes, it will change to "cache optimal" every time.  glTexSubImage2D will not change the tiling, so if you want to keep linear you would need to use that.

    As to how to get linear - if the allocator is the DDK it will be cache optimal. If the allocator is external and the image is imported it will be whatever the external allocator uses. For example, Android Gralloc will always allocate images using linear tiling whenever the image is host visible. 

    If you do it the old way with pixmaps it will end up linear as I understand it, yes.

    Cheers, Ben

Children