Bad polys per second...

Video memory is the memory residing on the video card. Writing to it and reading from it is very slow. AGP memory is a part of normal system, memory, but it is uncached and can be directly accessed by the gfxcard via direct memory access (aka DMA). Reading from AGP memory is slow, because it is uncached, but if you write sequentially its not that slow.

This all applies if you have an AGP gfx card, I don’t know how things work for an integrated grappics chip a la nForce.

In case of generic vertex arrays the CPU must copy the arrays from the system memory to the GFX card - this is slow, and depends on CPU speed. With vertex array range extension CPU is freed - the GPU pulles the data via DMA while the CPU can do some other work - thats what VAR basically does.

Hope this helps,
-Lev

Thanks, that does make a lot of sense. I also just found the Intel agp spec online. I had no idea that all of my data (display list, textures, etc.) could be kept in system memory. I always thought that was a last resort thing…

Anyway I would be happy to be getting your generic OpenGL 6M polys a second I’m getting like 400k. I’m going to checkout that nvidia demo, I’m going to update my drivers (poke and hope), and I’ll play around a little more with the test app I made.

I really appreciate the help from everyone thats posted. I’ll let you know how it goes tomorrow.

Thanks guys…

John.

Just for curiositynow we know that VAR is the fastest way in NVIDIA cards… and about ATI cards…what can I do that improves specificaly the speed in these cards (radeon , radon 7500m 8500)? I have both (7500 and a GF2 Pro) and I wold like to know how can I get the maximum from each one. I read everywhere about optimizations for NVIDIA cards…but nothing for ATI ones.

Try the ATI_vertex_array_object extension here . I think there are more readable explanations of it on the ATI devrel site as well.

Good morning,

Lev I forgot to take the Nvidia demo home last night, but I will look at it this weekend. Also, I found the problems.

First the problem I created:
When I tested the poly count I was too lazy to build a method that would build a square mesh. Instead the method I whipped up gave all of the polys the same cords, a rather large poly I might add. It didn’t occur to me until I was driving home last night that OpenGL was over sampling an 800x600 window like 100 times a frame. This could be a performance hit! So I changed the method to create a square mesh scaled the mesh to fit in the window and wham! 17 frames a second with 100k polys. I feel confident that the issue is bandwidth now, because if I increased or decreased the number of polys the poly per second count was still solid. So in bandwidth terms (correct me if I’m wrong) I was getting 5.1M verts a second (100k polys x 3 verts per poly x 17 frames) period. It was up to me to decide how many would go into each frame.

Second the problem I’m trying to fix:
Why only 1.7M polys? Lev gets 6M. I did a little tinkering and after a few frustration hours I decided to disable AGPx4 in the bios to see if get a performance hit. When I get into the bios I find AGPx4 disabled already. I turn it on add… Nothing, the same frame rate, my card supports it and my motherboard supports it, hmm… I turn on fast writes (how this would help moving data to the card I don’t know, but why not at this point), nothing. To make a long story short I installed Nvidia drivers yesterday, but I going to have to research this mother board thing because in theory 1.7 x 4 = 6.8 that’s the number I’m looking for.

I know it sounds like I’m wrapping up this post, but I do have one more question. I now understand the video memory, AGP memory, and system memory architecture. My question is: VARs - when the array is larger that the video card can store, does the card send the whole array to AGP memory or does it swap out the pieces that won’t fit? And: VARs – You can’t have more that one VAR can you?

Again I would like to thank everyone for their help….

John.

With VAR you manage the your arrays and the memory yourself so you decide if the array goes to video mem or AGP mem and you are responsible for reusing memory if all of your arrays don’t fit into memory.

-Lev

All right, this week is looking better already! I fixed the AGPx4 problem it was related to my motherboards VIA chipset and the GeForce2. I posted the fix in Coding Advanced under the title ’VIA chipset may not be running AGPx4…’. Thanks for the help.

John.