VBO Performance with different cards

Started by
2 comments, last by torakka 17 years, 8 months ago
Hello I am using VBOs for large Triangle Data with GL_DRAW_STATIC. The vertex array is interleaved with normal and position: NX,NY,NZ X,Y,Z. The strange think is, I get very different performance on two computers: Computer A: Intel Pentium 4 2,8 GHz 512 MB RAM NVIDIA Quadro4 750 XGL 128 MB Driver: 85.96 Windows XP SP2 Computer B: AMD Athlon 64 FX-60 Dual-Core 2,61 GHz 3072 MB RAM NVIDIA GeForce 7900 GTX 512 MB Driver: 85.96 Windows XP SP2 The rendered scene has 1.789.819 Triangles which are drawn indexed with glDrawElements. Number of Patches/VBOs: 9168. Total VBO size: 26,24 MB I also tried a scene with 384.219 Triangles, 70 VBOs with total size of 4,81 MB. On computer A the speed-up gained from VBOs is 250% compared to Vertex Arrays. The performance gain on computer B is just 10% or in some cases 0%! I checked for failures with NV PerfKit 2.0 but no results. The new driver version 91.31 (?) has no effect. :-( NV PerfKit also shows, that the VBOs on computer B are stored in the video memory. So there should be a huge performance gain. I stored the triangle index array also in a VBO - nothing. Is the PCI-Express of computer B so fast, that no performance gain with video mem VBOs is reached? No!: Another test showed, that another PC with the same Quadro card as computer A and the newest driver has the same frame rates as computer A - 250% gain. On a PC with GeForce 5200 FX and 6X.XX driver the performance gain is also very good. But a GeForce 5950 Ultra with 84.21 driver does not render faster with VBOs. All no PCI-E ??????? So it has to be the card? What is wrong with the VBO implementation on the different cards? Or what could be the reason? My VBO code does the following: Init:

glGenBuffersARB(1, &name);
glBindBufferARB(GL_ARRAY_BUFFER_ARB, name);
glBufferDataARB(GL_ARRAY_BUFFER_ARB, nVertz*vertexSize, pVertz, GL_STATIC_DRAW_ARB);
Render:

glBindBufferARB(GL_ARRAY_BUFFER_ARB, name);
glInterleavedArrays(GL_N3F_V3F, stride, (CHAR*)NULL);
glDrawElements(GL_TRIANGLES, nIndices, GL_UNSIGNED_INT, pIndices);
Any suggestions or comments for this problem? Thanks in advance!
Advertisement
Depending on how many vertices you address with 1 draw call, maybe try 16-bit indices (ushort)?
Thanks for the answer. I will try it.
For further discussion, please us the same post on:
http://www.opengl.org/cgi-bin/ubb/ultimatebb.cgi?ubb=get_topic&f=3&t=014685#000000

Thanks!
Try putting the indices into VBO of their own aswell. If some VBO isn't larger than 65536 vertices try 16 but insigned indices. Try to leave out the largest VBO's and see if that changes anything.

The number of glDrawElements() calls (nearly 10,000?) might also block, try to see what the CPU usage is when your application is running. You might be limited by the rate you can keep the graphics processor busy.

First things that spring to mind.

This topic is closed to new replies.

Advertisement