PDA

View Full Version : Why doesn't ARB_VBO function correctly with FGLRX?


Extreme Coder
08-28-2008, 08:16 PM
I had a problem with WoW being slower on Linux than on Windows (I use Cedega, but it's the same with Wine).
I searched around the Cedega forums, and if I understood correctly, it's due to the ARB_VBO extension being disabled so that the game can run correctly.
When enabled, the game is so massively slow, it's unplayable.
And from what I gather, if it is functioning correctly, I should get a better performance, something closer to the performance in Windows.

Anyone care to enlighten me on this?

grantek
08-28-2008, 10:04 PM
My best guess is that it's just something that hasn't been fully implemented yet - although if you look at my thread about ETQW, it works fine if the game uses VBOs for "index" buffers as well as vertex buffers. I have no idea what these indices refer to in the renderer, compared to triangle vertices, my knowledge of 3d rendering isn't that advanced...

Extreme Coder
08-28-2008, 10:25 PM
My best guess is that it's just something that hasn't been fully implemented yet - although if you look at my thread about ETQW, it works fine if the game uses VBOs for "index" buffers as well as vertex buffers. I have no idea what these indices refer to in the renderer, compared to triangle vertices, my knowledge of 3d rendering isn't that advanced...
Well, in the Graphics tab in Cedega, there are three settings:
ARB_VBO Extension
-Dynamic VBO
-Index VBO

You can use ARB_VBO alone, or you can use one of the subsettings(but you need to have ARB_VBO activated)

I tried again, in Index VBO, things are still massively slow like in ARB_VBO normally, and surprisingly, with Dynamic VBO, speed is atleast the same as with ARB_VBO unchecked (It may be higher, but I messed up my WoW install, I used WC3 to check)

bridgman
08-28-2008, 10:25 PM
I have no idea what these indices refer to in the renderer, compared to triangle vertices

It's just a more efficient way of communicating vertex information.

A triangle has three vertices, each with a *lot* of associated information (location, colour, texture coordinates etc..). A lot of graphics operations involve drawing a bunch of connected triangles to form a curved surface, which results in the same vertex appearing multiple times, once for each of the triangles which touches that point. This means that (a) more deta needs to be transferred (vertex information is *big*) and (b) each copy of the vertex typically need to get processed by the TCL or vertex shaders, which wastes processing power.

One solution is to use structures like triangle fans or triangle strips so you don't have to send as much repeated vertex information. A more general solution is to send each vertex only once, giving each vertex a number (aka index) then draw triangles by sending sets of "vertex numbers" instead of the much larger vertices themselves.

Example :

Two triangles, connected on one edge, let's say triangle 1 has vertices A,B,C while triangle 2 has vertices B,C,D

Only vertex buffers :

DRAW_TRIANGLES:
Vertex A info
Vertex B info
Vertex C info
Vertex B info
Vertex C info
Vertex D info

Vertex and Index buffers

VERTEX_BUFFER:
1. Vertex A info
2. Vertex B info
3. Vertex C info
4. Vertex D info

DRAW_TRIANGLES:
1
2
3
2
3
4

The savings here is only maybe 50% because only 2 of the 4 vertices are re-used, but in some cases you can save a lot more.

grantek
08-28-2008, 10:36 PM
A more general solution is to send each vertex only once, giving each vertex a number (aka index)
Thanks! :)

legume
08-29-2008, 10:49 AM
I had a problem with WoW being slower on Linux than on Windows (I use Cedega, but it's the same with Wine).
I searched around the Cedega forums, and if I understood correctly, it's due to the ARB_VBO extension being disabled so that the game can run correctly.
When enabled, the game is so massively slow, it's unplayable.
And from what I gather, if it is functioning correctly, I should get a better performance, something closer to the performance in Windows.

Anyone care to enlighten me on this?

Probably not the reason it doesn't work for WOW, but you need to have direct rendering to get GL_ARB_vertex_buffer_object.

If you use compiz/effects and glxinfo | grep direct says no then you won't get it.