Imagination PowerVR SDK Blog

TexImage loading driver behavior.



Be prepared for a long story, before I can ask a question:) First, me device is Samsung Galaxy S, Android 2.2, so GPU is PowerVR SGX 540.

I have a textures used for FBO and have a DDMS tool for tracing native heap. I observe the following behavior: If I allocate texture, but haven't draw with it, it stored in heap. When I draw with it at least once, heap memory freed. I think texure copied to texture memory. Is my observatiobs of driver behavior right? Why this done that way? This behavior results a very big heap consumption. I see the workaround: load texure, touch it (draw), and it gets to video memory. As far as can see, heap increases with sbrk, so it cannot became less, right?

Second part of question. Is there may be a situation when texture from video memory may be copied to my heap? What happens if another application catches GPU? Is there context lost message (in standard there is eglSwapBuffer should return EGL_CONTEXT_LOST, right? I should re-filll my texures snd VBOs?).

What is the best practices for texure memory allocation?


BTW, what is amount of video memory on PowerVR SGX 540?