PDA

View Full Version : VAR Equivalent on ATI hardware



maximian
11-21-2003, 09:05 AM
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.

Ostsol
11-21-2003, 09:13 AM
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.

AdrianD
11-21-2003, 09:16 AM
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)

Ostsol
11-21-2003, 09:19 AM
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.

maximian
11-21-2003, 09:27 AM
Thanks a lot. I missed this stuff in my search.

cass
11-21-2003, 12:28 PM
There shouldn't be any technical reason for VBO to be unsupported on any card.

Leyder Dylan
11-21-2003, 12:44 PM
ARB_vertex_program can be used as both (ATI and NVIDIA)

SirKnight
11-21-2003, 03:30 PM
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

Ozzy
11-21-2003, 10:38 PM
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.

zeckensack
11-21-2003, 11:52 PM
It has changed. In fact, if it ever was different, I didn't use VBO then. Looong time ago.

Korval
11-22-2003, 12:34 AM
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.

Ozzy
11-22-2003, 01:40 AM
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.

Ysaneya
11-22-2003, 03:14 AM
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 :)

Y.

zeckensack
11-22-2003, 05:02 AM
Originally posted by Korval:
How would you know?I know the theoretical peak bandwidth of my AGP http://www.opengl.org/discussion_boards/ubb/smile.gif

Humus
11-22-2003, 06:36 AM
I have been able to squeeze out 300MV/s on a R9700pro using VBO, which is pretty close to theorethical maximum. http://www.opengl.org/discussion_boards/ubb/smile.gif

Ostsol
11-22-2003, 08:10 AM
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).

PigeonRat
11-22-2003, 12:45 PM
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...

maximian
11-22-2003, 04:54 PM
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

titan
11-22-2003, 06:34 PM
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.

Ostsol
11-22-2003, 08:33 PM
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.

Ozzy
11-22-2003, 11:03 PM
Originally posted by Ostsol:
[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).

hum.. this has never happened with my 8500LE dude! It seems that vertex data are more or less cached into vram but *not* statically stored there. AGP at best. Btw, this can be different with latest ATI boards regarding what are saying Humus and Ysaneya.




[This message has been edited by Ozzy (edited 11-23-2003).]

Ostsol
11-23-2003, 08:00 AM
Originally posted by Ozzy:
hum.. this has never happened with my 8500LE dude! It seems that vertex data are more or less cached into vram but *not* statically stored there. AGP at best. Btw, this can be different with latest ATI boards regarding what are saying Humus and Ysaneya.
That's very strange, as the whole point of compiled vertex arrays and VAO is to store data server-side. Well, VAO is great for another reason as it allows one to define multiple separate buffers, but at the very least, there's not much point to CVAs if the data is stored on the client.

jwatte
11-23-2003, 09:46 AM
Ostsol,

"Server side" means so many different things.

Most games are fill bound. This means that you should probably not put vertex transfer load on the VRAM bus, where your framebuffer and textures already live. Instead, it seems like a good idea to put the vertices in AGP, where you get an extra "free" 1-2 GB/s of bandwidth. Assuming no darn application comes in and wants to use the memory bandwidth for something else at the same time :-)