The performance of my application drops when trying to use 80 render targets (framebuffer objects) instead of 70...

Is there a maximum number of render-to-texture targets in OpenGL? How can I retrieve it?

Thanks in advance.

arekkusu

09-17-2007, 10:46 AM

working set > vram = paging

Korval

09-17-2007, 01:19 PM

To clarify, you're using too much video memory, which is forcing the implementation to page out some of the video memory to main memory. This takes up performance.

Sansus

09-17-2007, 02:24 PM

That is very strange... I have a video card with 256 MB. My billboards are 512x512x4 (RGBA) so that the 70 billboards "only" eat 70 MB. There is nothing more in the screen except a 3D model which has 100.000 triangles which takes less than 10 MB.

However if there can not be any other possibility, I'll check my memory consumptions.

Thanks for your answer.

PD: There is no way to ask to OpenGL for the vide memory available, is it?

Groovounet

09-18-2007, 06:03 AM

I guest your software become fillrate bound when you reach 80 billboard. Try 80 billboard with a lower resolution (256*256) and observe the cost ratio between 70 to 80 billboard in 256 and in 512. If this value is really lower with 256 textures, you are definitly fillrate bound.

Nighthawk

09-18-2007, 09:03 AM

There might also be some internal hardware limits you are hitting.

For example, the hierachical zBuffer of ATI cards before X2000 uses special on-chip memory:
(http://ati.amd.com/developer/SDK/AMD_SDK_Samples_May2007/Documentations/Depth_in-depth.pdf)
If too much depth buffers are allocated, rendering will be slower.

Or it is just a driver issue...

These kind of thing cannot be queried as far as i know.

In the end, you will have to find a workaround... - Try lowering the resolution.
- Try to cumulate 4 rendertarget together to 1024x1024
- Try it on different hardware