I am working on an embedded OpenGL graphics application running on an Intel Atom z530 with the GMA500 graphics hardware. (It's my understanding that the GMA500 is a PowerVR under the hood, but I'm not sure). I'm running with the Tungsten Graphics "Gallium" driver on Ubuntu 9.10 Karmic Koala. Oh, you should also know that i have 1 GB of available system memory.
Here's the problem: I have code that allocates a bunch of 512x512x32 textures (about 1MB apiece). When I get to about 118-120 of these, I get an "out of memory" error from OpenGL, and I also get this message on the console: "error: INTEL_ESCAPE_ALLOC_REGION failed".
This, along with simple measurements while looking at "top", indicate to me that I'm hitting up against an ~128MB limit for textures. The odd thing is this: this architecture doesn't have dedicated video ram, it's shared. And I can tell for sure that OpenGL is using system ram for the textures because I can see the "free" ram going down in 'top'. So why would I get an 'out of memory' error? Is there some way I can increase the available RAM for textures?
P.S. Sorry if this is in the wrong area, I'm new to this forum.
Integrated graphics parts usually carve out a portion of system memory and dedicate it to graphics at boot time. There may be a BIOS option; check that first.
Ok, I thought that might be the case. I checked out my BIOS and went to Intel->Video (Intel IGD) Control Sub-Menu and saw that "Graphic Memory Aperture Size" is set to 256MB. Is this the setting I'm looking for? It has the option of being 128 or 256.
If this IS the setting I'm looking for, then this is odd because I seem to only have 128 MB not 256.
Yeah, that sounds right. If you're already set to 256 then I guess next step would be to look into the driver or check with the driver devs to see if there is a static allocation of texture memory (there used to be) and if so how to change it. You might have to hack driver source and recompile, not sure.
You might want to look in dmesg and xorg log to see if there are any such messages -- I know most of the drivers used to statically allocate a couple of years ago, not sure what they do today.
I looked at dmesg and xorg with no luck. I'm not entirely sure who the driver devs are or how to get ahold of them, haha. I'm pretty sure it's a proprietery closed-source driver, so hacking it is probably out :-(
I'm beginning to think you're right, that it's a static allocation of memory, and the driver is responsible. I'll have to try and figure out who to contact...
Drop by our (extremely long) discussion on ubuntu forums, maybe the work Lucazade, Tista and Yves have done on getting the psb and emgd drivers to work can help you.
Which is the "gallium" driver, IEGD? Where did you get it?