VAR Equivalent on ATI hardware

Hi,

I was looking for the equivalent of the VAR extension on ATI. I know VAR is Nvidia specific, but I was hoping ATI also had similar functionality. I cannot use VBO because the target hardware is 1st generation Hardware T&L, ie Geforce II, and
the original Radeon. Thanks.

ATI’s extension is ATI_vertex_array_object, which is supported on Radeon 7200 and up. These cards also support ARB_vertex_buffer_object, though. Note that the Radeon 7000 (aka Radeon VE), however, does not support either of these extensions. Basically, just skip the ATI extension and go right to VBO.

ATI_vertex_array_object + ATI_map_object_buffer = VAR (same functionality, but easier to handle)

ATI_vertex_array_object + ATI_element_array_object + ATI_map_object_buffer = VBO (same functionality & nearly identical API like VBO)

Yeah, I forgot about those other two extensions. . . ATI_element_array is only supported on Radeon 8500 and higher, but ATI_map_object_buffer will work on anything as old as a Radeon 7200.

Thanks a lot. I missed this stuff in my search.

There shouldn’t be any technical reason for VBO to be unsupported on any card.

ARB_vertex_program can be used as both (ATI and NVIDIA)

Originally posted by Leyder Dylan:
ARB_vertex_program can be used as both (ATI and NVIDIA)

vertex program? What does that have to do with anything?

-SirKnight

As far as i know, only NV boards can store data in VRAM (through VAR/VBO). Generally, using VBO or VAO on ATI boards, data are stored in AGP.
Maybe it has changed with latest ATI boards?, would be interesting to know about it.

It has changed. In fact, if it ever was different, I didn’t use VBO then. Looong time ago.

As far as i know, only NV boards can store data in VRAM (through VAR/VBO).

How would you know? It’s not like either of the two fast vertex array extensions (VAO/VBO) that ATi supports tells you where the vertices are.

Indeed, from various tests that have been conducted, ATi cards tend to be a bit faster at vertex throughput through VBO than nVidia cards. Of course, some of this could be due to unoptimized data formats that ATi cards accept but nVidia ones don’t, or other things of the like.

Originally posted by Korval:
Indeed, from various tests that have been conducted, ATi cards tend to be a bit faster at vertex throughput through VBO than nVidia cards.

really?
What boards were you using?
Just to know… i got only 7000 and 8500LE series here.
It’s nice if it has been improved on 9xxx.

Tom’s demo on delphi3d.net can go up to 130 MTris/sec on a Radeon 9700. A Geforce fx does not go over 90 MTris/sec (i think -can’t remember the exact number).

In any case, ATI boards store data in video memory first, then in AGP memory if not enough video memory is available, then system RAM. However, they do not have a smart “switch” mechanism like NVidia’s; in other words, if a VBO is created in pool X, it will STAY in this pool forever, even if it’s never used. So if you create 1000 VBOs, for example the first 200 of them will be placed in video memory; the next 400 will be placed in AGP; the remaining 400 will be placed in RAM. If you only render with the last 400 ones, you will effectively be rendering from sys ram. NVidia has a smart cache mechanism where VBOs are switched in/out from video/AGP memory to/from sys ram, so that unused VBOs do not remain in “fast” memory.

Note: this behavior has been confirmed by ATI devrel; but it might change in a future driver release, obviously :slight_smile:

Y.

Originally posted by Korval:
How would you know?
I know the theoretical peak bandwidth of my AGP

I have been able to squeeze out 300MV/s on a R9700pro using VBO, which is pretty close to theorethical maximum.

Originally posted by Ozzy:
As far as i know, only NV boards can store data in VRAM (through VAR/VBO). Generally, using VBO or VAO on ATI boards, data are stored in AGP.
Maybe it has changed with latest ATI boards?, would be interesting to know about it.

Um. . . no. ATI cards have been able to store vertex data in video memory ever since the original Radeons (with the exception of the Radeon VE).

Originally posted by maximian:
I cannot use VBO because the target hardware is 1st generation Hardware T&L, ie Geforce II, and
the original Radeon.

Ummm, I have a GF2 and VBO works perfectly…

Hi, to the poster who said you could use vbo in geforce II? How do you do that. The vbo extension does not show up on my opengl extension list. Latest drivers, etc…

Geforce II GTS Win2000

VBO is supported on all geforce cards and all Radeons with hardware T&L (don’t know about 7000). In fact all future cards with OpenGL 1.5 support will have it.

So drop VAR unless you want to support old drivers and only use VBOs.

Get your drivers straight from nvidia for your geforce, they have VBO support. Check delphi3d.net to see which versions have support for VBOs.

The Radeon 7000 (aka Radeon VE) lacks both T&L and VBO support, unfortunately. Then again, it was never meant as a card for gaming.