aboutsummaryrefslogtreecommitdiff
path: root/README.md
blob: da00c36a6310647ec64e145ce7aeb28469192f28 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# verite-gl - OpenGL implementation for the Rendition Verite V2x00

This project provides an implementation of OpenGL 1.2 (with a few 
extensions) for the Rendition Verite V2100/V2200 graphics cards on 
NetBSD. It is based on Mesa 6.2.2, with a hardware-accelerated 
`verite` driver added.

This is the userland half of the project, providing `libGL` library.
It has no external dependencies, however it requires a NetBSD kernel 
built with `veritefb(4)` driver and the 3D microcode (`v2000gl.uc`) 
from the Windows driver package (latest beta recommended). The Mesa 
driver talks to the kernel driver via `/dev/verite3d` and the
`verite3dio.h` ioctl ABI.

The driver does not require (or even support) the X Window System - an
application using this OpenGL implementation always takes over the whole 
screen.

## Build

Requires:

- NetBSD toolchain (native, or cross-compiler built with the NetBSD `build.sh`).
- GNU make (`gmake`).

Building on the target NetBSD system:
```
gmake netbsd-verite
```

Cross-building from a different system:
```
gmake netbsd-verite \
    VERITE_CROSS=/path/to/tooldir/bin/ \
    VERITE_SYSROOT=/path/to/netbsd/sysroot
```

Successful build will create `lib/libGL.a`. 

## Build a program

See `include/GL/gl.h` for the OpenGL API and `include/GL/vrmesa.h` for 
the Verite-specific functions. Note that the second include is necessary
since we are not using the usual GLX or WGL APIs to create a rendering 
context. See examples for usage.

`libGL.a` is self-contained:

```
cc -Iinclude your_app.c lib/libGL.a -lm -o your_app
```

The `examples/` (`cube`, `rave`) contain runnable programs. Buidl and run
as the user with permissions to `/dev/verite3d`, point `VERITE_UCODE` 
evironment variable at the `v2000gl.uc` 3D microcode.

If the `/dev/verite3d` does not exist on your system, despite running a
kernel with `veritefb(4)` driver loaded, create it using `MAKEDEV`.

Reported strings: `GL_VENDOR` = `Rendition`, `GL_RENDERER` =
`Mesa Rendition Verite V2200`, `GL_VERSION` = `1.2 Mesa 6.2.2`.

## What's where

- `src/mesa/drivers/verite/` - the driver, plus the `rlgl` and `libv3d`
  low level libraries, `verite3dio.h` ioctl ABI.
- `src/mesa/ppc/` - PowerPC 603e/e300 semi-optimized vertex ops (optional).
- `configs/netbsd-verite` - the build config.
- everything else - Mesa 6.2.2 with minor patches here and there.

## Caveats

The driver only supports one visual, 16-bit RGB565, double buffered, 
with Z-buffer. Resolution depends on the kernel driver and Mesa will
automatically switch color depth to 16-bit when context is created.

Performance is not stellar, but it is usable for simple 3D applications.
The example programs run at v-sync rates (60 FPS) on a V2200 card with 
640x480 resolution, on a PowerPC 603e CPU at 400 MHz. 

GLQuake runs at around 18 FPS on the same machine. Hand-optimized Quake
MiniGL driver (not included here) delivers 27 FPS on the same machine, 
so there is room for improvement.

The driver should work on any Rendition Verite V2100/V2200 card, and any
architecture supported by NetBSD as long as it has functional PCI
subsystem and working DMA (absolutely necessary), however it was tested 
only on PowerPC.