Card under test:
|
BeOS:
|
Windows:
|
percentage:
|
TNT1 PCI, 16Mb (NV04)
|
9.3 fps (tex swapping)
23.2 fps @16bit color
|
-- (not supported)
-- (not supported)
|
--
--
|
TNT2-M64, 32Mb (NV05M64)
|
10.2 fps
|
21.9 fps
|
47 %
|
TNT2-pro, 32Mb (NV05)
|
17.0 fps
|
41.5 fps
|
41 %
|
GeForce2 MX400, 32Mb (NV11)
|
27.1 fps
|
86 fps
|
32 %
|
GeForce2 Ti, 64Mb (NV15)
|
45.6 fps
|
165 fps
|
28 %
|
GeForce4 MX440 AGP8x-type, 64Mb (NV18)
|
37.0 fps
|
119 fps
|
31 %
|
GeForce4 MX4000, 128Mb (NV18)
|
20.8 fps
22.3 fps coldstarted
28.0 fps RAM overclocked 20%
|
76 fps
-- (not tested)
-- (not tested)
|
27 %
--
--
|
GeForce4 Ti 4200, 128Mb (NV25)
|
-- (not supported)
|
250 fps
|
--
|
GeForceFX 5200, 128Mb (NV34)
|
-- (not supported)
|
130 fps
|
--
|
System under test:
|
640x480, 16bit @60Hz:
|
1024x768, 32bit @60Hz:
|
P2-350Mhz, fsb@100Mhz, TNT2-ultra, 32Mb (NV05), dano
|
29.0 fps
|
21.3 fps
|
dual P3-500Mhz, fsb@100Mhz, TNT1, 16Mb (NV04), R5.0.1 pro
|
33.0 fps
|
6.2 fps (tex swapping)
21.4 fps @ 16bit color
|
dual P3-500Mhz, fsb@100Mhz, Geforce 2MX400, 32Mb (NV11), R5.0.1 pro
|
35.0 fps
|
24.8 fps
|
Item:
|
Status:
|
Accelerated libraries
|
- libGL.so is accelerated and contains the 3D add-on driver.
- libGLU.so is a utility library that runs on top of libGL.so, it contains no internal acceleration. If libGLU accelerates, it does so by using libGL.
|
Engine access type
|
PIO mode. I'll try to get DMA mode up in the future.
|
Supported colordepths
|
16 and 32 bit modes are fully working, 15 bit mode is partially working. 8 bit mode isn't implemented yet. At least 15 bit mode will be completed, but not before switching to Mesa 6.2.
|
Supported cards
|
NV04 (TNT 1) upto and including (the slow performing) NV18 (GeForce 4MX). I'll try to get more modern cards up in the future.
|
3D Rendering functions
|
Straight and AA (anti-aliased) point and line functions. Straight triangle function: Mesa 3.2 doesn't support AA triangles. Support for AA triangles will be setup if possible (engine command is known), after we switch to Mesa 6.2. The Depth (Z) buffer is fixed at 16 bit depth.
|
3D Texturing
|
Single texturing is supported. Multiple texturing will be setup later if possible (engine command is known).
|
3D States
|
- Line and Polygon stippling is not supported (driver falls back to software rendering mode so it renders OK but is slow);
- Stencil buffering is not supported (driver falls back to software rendering mode);
- Drawing into the frontbuffer is not yet supported (driver falls back to software rendering state);
- Single buffering is not yet supported (driver will probably not work at all).
|
3D driver's 2D Functions
|
- Swapbuffers() is accelerated for both BWindow (non-direct) and BDirectWindow (direct) modes;
- Triple buffering still needs to be setup (Be's libraries do that!). Triple buffering is an easy fix for 'single buffered' contexts (which will actually be double buffered then), and it helps out for slow rendering apps when you move their windows off- and then onscreen again.
I even suspect the non-direct BWindow mode might work fully correct (position and clipping validity during drawing): will use BGLView's Invalidate() and Draw() functions for 'back' to front rendering instead of doing that in Swapbuffers(). Note that non-direct mode would still be a hack though!;
- Swapbuffers() uses 2D blits, even for fullscreen. Literal swapping for fullscreen apps will be setup later (engine commands are known);
- In direct BDirectWindow mode the DirectConnected() clipping_info turns out to be working after all! (apart from the BMenuBar error for which I have a workaround in place). This means you can drag direct windows like a madman, without errors appearing onscreen ;-)
- In non-direct BWindow mode drawing errors will be made of you move the application window to fast, or if you move other windows over the application window to fast. Hopefully the triple buffering scheme mentioned above will fix these errors...
- Scaling is not yet supported: if you resize output windows you will see repeating patterns or rubbish in the extra 'room' (scaling up), or you will see only part of the applications output (scaling down). Will be fixed for a future release (engine command should be known).
|
BView's function activation
|
Be's flags B_WILL_DRAW and B_PULSE_NEEDED are required for BGLView: some applications rely on it without explicitly issuing them. These flags are hardcoded added by the driver when an application creates a BGLView.
|
App name:
|
Location:
|
Status:
|
Mode:
|
Faults:
|
Driver or library failsafe:
|
3Dlife
|
Optional sample code
|
Working as is
|
BWindow/non-direct mode
|
Doesn't call glViewport()
|
Driver calls glViewport() while servicing a backbuffer clear command when it detects no backbuffer was created before. glViewport() takes care of creation among other things.
|
GLteapot
|
Optional sample code
|
Working after relinking
|
BDirectWindow/direct mode
|
None
|
Relinking against both libGL.so and libGLU.so is required because some items used are in libGL.so these days, while being in libGLU.so at Mesa 3.2 'time'. We are 'going back in time'.
|
Demo
|
Mesa 3.2
|
Working after fix
|
BWindow/non-direct mode
|
Doesn't call glPopMatrix()
|
Added glPopMatrix() to the application. A library failsafe can be done in theory, but it requires additional code. It would need to check if the stack still contains a Matrix when Swapbuffers() is called (or so). Checking would be state-dependant.
|
Sample
|
Mesa 3.2,
BeBook: openGL kit, BGLView
|
Working as is
|
BWindow/non-direct mode
|
None
|
None
|
GLQuake for BeOS R4.5 running on R5/dano
|
http://www.aixplosive.de/projects.html
|
Partially working as is
|
BDirectWindow/direct mode
|
Yet unknown
|
This application doesn't work correctly for a number of reasons:
- It sometimes renders directly to the frontbuffer which the driver doesn't really support yet;
- It crashes sometimes: this seems a Mesa 3.2 fault: Be's lib is working OK, while the full software Mesa 3.2 fails as well;
- Some bitmaps are rendered in wrong colors: This seems a driver fault: rendering triangles requires more state-checking (for getting color-info, among others probably);
- The picture 'flickers': half the time Swapbuffers() is executed while still rendering. The effect is that sometimes only partially-rendered pictures are shown. Seems a Mesa 3.2 fault as well: Be's lib is OK, while the full software Mesa 3.2 fails as well.
|
Quake II V3.20
|
http://www.bebits.com/app/1712
|
Working as is, with some displaying errors caused by Mesa 3.2. (Full software Mesa 3.2 has the same errors.)
|
BDirectWindow/direct mode
|
Doesn't call LockGL()
|
Driver calls LockGL() in the BGLView constructor if gl_get_current_context() returns NULL. Probably needs to be done elsewhere ('later') in the driver so it's actually possible that a context was indeed made current by calling LockGL() at some point in time.
|
Card under test:
|
GLteapot @ 16bit:
|
GLteapot @ 32bit:
|
Quake2 @ 16bit:
|
Quake2 @ 32bit:
|
Mesa 3.2 software, no AGP FW
|
190-210 fps / 1.0x
|
150-160 fps / 0.78x
|
2.8 fps / 1.0x
|
2.8 fps / 1.0x
|
Mesa 3.2 software, AGP4x + FW
|
190-210 fps / 1.0x
|
190-210 fps / 1.0x
|
2.8 fps / 1.0x
|
2.8 fps / 1.0x
|
TNT1 PCI, 16Mb (NV04)
|
145-160 fps / 0.8x
|
130-145 fps / 0.7x
|
28.5 fps / 10.2x
|
22.8 fps / 8.1x
|
TNT2, original, 32Mb (NV05)
|
195-205 fps / 1.0x
|
175-185 fps / 0.9x
|
40.4 fps / 14.4x
|
31.4 fps / 11.2x
|
TNT2 M64, 32Mb (NV05M64)
|
175-185 fps / 0.9x
|
135-145 fps / 0.7x
|
30.9 fps / 11.0x
|
20.7 fps / 7.4x
|
GeForce2 MX400, 32Mb (NV11)
|
200-220 fps / 1.1x
|
190-210 fps / 1.0x
|
38.2 fps / 13.6x
|
25.5 fps / 9.1x
|
GeForce4 MX440, 64Mb (NV18)
|
90-100 fps / 0.5x
|
90-100 fps / 0.5x
|
10.5 fps / 3.8x
|
10.4 fps / 3.7x
|
GeForce4 MX4000, 128Mb (NV18)
|
90-100 fps / 0.5x
|
90-95 fps / 0.5x
|
10.3 fps / 3.7x
|
10.2 fps / 3.6x
|