IRIX 3dfx Voodoo driver + IRIX glide2x port & MesaFX port

At the moment only SST1 (Voodoo1) is supported on IP32 (O2). Only tested on IRIX 6.5.30 with RM7000C CPU.

-driver sources (SST1 and CVG support on IP32) https://github.com/sdz-mods/tdfx_irix
-glide2x IRIX port (SST1 on IP32) https://github.com/sdz-mods/glide_irix
-hinv wrapper with 3dfx support: https://github.com/sdz-mods/hinv_3dfx

Mar 23 13:48:33 5A:IRIS unix: NOTICE: tdfx: init — 3Dfx Voodoo1/Voodoo2 driver
Mar 23 13:48:33 5A:IRIS unix: NOTICE: tdfx: registering for Voodoo1 and Voodoo2
Mar 23 13:48:33 5A:IRIS unix: NOTICE: tdfx: attaching Voodoo1 (SST-1) as card 0
Mar 23 13:48:33 5A:IRIS unix: NOTICE: tdfx: SST-1 BAR0 mapped: reg_kva=bb000000 reg_phys=0x1b000000 fb_kva=bb400000 fb_phys=0x1b400000
Mar 23 13:48:33 5A:IRIS unix: NOTICE: tdfx: IP32 write-gather skipped for SST-1 (single BAR)
Mar 23 13:48:33 5A:IRIS unix: NOTICE: tdfx: card 0 (Voodoo1 (SST-1)) reg_phys=0x1b000000 fb_phys=0x1b400000
Mar 23 13:48:37 5A:IRIS unix: NOTICE: tdfx: card 0 accessible at /hw/tdfx0
Mar 23 13:48:37 5A:IRIS unix: NOTICE: tdfx: 1 card(s) registered
Mar 23 13:48:33 5E:IRIS lboot: Module /var/sysgen/boot/tdfx.o dynamically loaded.
IRIS 31# ./test20
test20:
mipmap modes
2.46
Resolution: 640x480
Press A Key To Begin Test.

Couldn't determine cpu type. Using i586
initEnumHardware: calling pciOpen
fxirix: 1 3Dfx card(s) opened
pciOpen: hasDev3DfxIrix=1
pciOpenIrix: numDevices=1
initEnumHardware: pciOpen OK
initEnumHardware: slot 0 vendor=0x121a device=0x1
initEnumHardware: SST1 defined, checking TDFXVID=0x121a SST1DID=0x01
initEnumHardware: SST1 card detected at slot 0
fxirix: device 0 TDFX_GET_REGBASE=0x1b000000
fxirix: card 0 reg_base=0x1b000000 fb_base=0x1b400000 reg_size=4194304 fb_size=12582912
fxirix: map card 0 reg window phys=0x1b000000 size=16777216
fxirix: mmap fd=3 offset=0x0 length=16777216
fxirix: device 0 TDFX_GET_REGBASE=0x1b000000
SetGrxClk: tex write sstbase=4000000 addr=4f00000
vidInit: A (after VCLK_ENABLE)
vidInit: B (timing regs done)
vidInit: C (SetResolution done)
vidInit: D (before CalcGrxClk)
vidInit: E (CalcGrxClk done)
SetGrxClk: tex write sstbase=4000000 addr=4f00000
fxirix: device 0 TDFX_GET_REGBASE=0x1b000000
grTexClampMode: tmu=0 hw=4000000 packerFix=0x4e20000
grTexClampMode: before PW1, SST_TMU(hw,0)=4000800
grTexClampMode: before TMU write addr=0x4000b00 val=0x800000c0
grTexClampMode: readback done, updating shadow
grTexClampMode: shadow updated, calling GR_END
grTexClampMode: returning
_grTexDetailControl: tmu=0 detail=0x40ff addr=0x4000b08
_grTexDetailControl: write+readback done
_grTexDetailControl: returning
IRIS 32# hinv_3dfx
CPU: QED RM7000 Processor Chip Revision: 5.1
FPU: QED RM7000 Floating Point Coprocessor Revision: 5.0
1 802 MHZ IP32 Processor
Main memory size: 1024 Mbytes
Secondary unified instruction/data cache size: 256 Kbytes on Processor 0
Ternary unified instruction/data cache size: 1 Mbyte on Processor 0
Instruction cache size: 16 Kbytes
Data cache size: 16 Kbytes
FLASH PROM version 4.18
Integral SCSI controller 0: Version ADAPTEC 7880
  Disk drive: unit 2 on SCSI controller 0
Integral SCSI controller 1: Version ADAPTEC 7880
On-board serial ports: tty1
On-board serial ports: tty2
On-board EPP/ECP parallel port
CRM graphics installed
Integral Ethernet: ec0, version 1
Video: MVP unit 0 version 1.4
 with no AV Card or Camera.
Vice: TRE
Graphics board: 3dfx Voodoo

IRIS 33# hinv_3dfx -v
CPU: QED RM7000 Processor Chip Revision: 5.1
FPU: QED RM7000 Floating Point Coprocessor Revision: 5.0
1 802 MHZ IP32 Processor
Main memory size: 1024 Mbytes
Secondary unified instruction/data cache size: 256 Kbytes on Processor 0
Ternary unified instruction/data cache size: 1 Mbyte on Processor 0
Instruction cache size: 16 Kbytes
Data cache size: 16 Kbytes
FLASH PROM version 4.18
Integral SCSI controller 0: Version ADAPTEC 7880
  Disk drive: unit 2 on SCSI controller 0 (unit 2)
Integral SCSI controller 1: Version ADAPTEC 7880
On-board serial ports: tty1
On-board serial ports: tty2
On-board EPP/ECP parallel port
CRM graphics installed
Integral Ethernet: ec0, version 1
  PCI Adapter ID (vendor 0x9004, device 0x8078) PCI slot 1
  PCI Adapter ID (vendor 0x9004, device 0x8078) PCI slot 2
  PCI Adapter ID (vendor 0x121a, device 0x0001) PCI slot 3
Video: MVP unit 0 version 1.4
 with no AV Card or Camera.
Vice: TRE
Graphics board: 3dfx Voodoo (unit 0)
    Vendor: 3Dfx Interactive  Device ID: 0x0001
    Register base: 0x1b000000  size: 4096 KB
    Framebuffer base: 0x1b400000  size: 12288 KB

Update:
MesaFX support added:

-MesaFX IRIX port with glide2x backend and no X11 https://github.com/sdz-mods/MesaFX_irix
-Mesa3D IRIX demos https://github.com/sdz-mods/Mesa3D_demos_irix

IRIS 94# ./glinfo
Couldn't determine cpu type. Using i586
initEnumHardware: calling pciOpen
fxirix: 1 3Dfx card(s) opened
pciOpen: hasDev3DfxIrix=1
pciOpenIrix: numDevices=1
initEnumHardware: pciOpen OK
initEnumHardware: slot 0 vendor=0x121a device=0x1
initEnumHardware: SST1 defined, checking TDFXVID=0x121a SST1DID=0x01
initEnumHardware: SST1 card detected at slot 0
fxirix: device 0 TDFX_GET_REGBASE=0x1b000000
fxirix: card 0 reg_base=0x1b000000 fb_base=0x1b400000 reg_size=4194304 fb_size=12582912
fxirix: map card 0 reg window phys=0x1b000000 size=16777216
fxirix: mmap fd=3 offset=0x0 length=16777216
fxirix: device 0 TDFX_GET_REGBASE=0x1b000000
SetGrxClk: tex write sstbase=4000000 addr=4f00000
vidInit: A (after VCLK_ENABLE)
vidInit: B (timing regs done)
vidInit: C (SetResolution done)
vidInit: D (before CalcGrxClk)
vidInit: E (CalcGrxClk done)
SetGrxClk: tex write sstbase=4000000 addr=4f00000
fxirix: device 0 TDFX_GET_REGBASE=0x1b000000
GL_VERSION: 1.2 Mesa 3.5
GL_EXTENSIONS: GL_ARB_multitexture GL_ARB_transpose_matrix GL_EXT_abgr GL_EXT_bgra GL_EXT_clip_volume_hint GL_EXT_compiled_vertex_array GL_EXT_packed_pixels GL_EXT_paletted_texture GL_EXT_point_parameters GL_EXT_polygon_offset GL_EXT_rescale_normal GL_EXT_shared_texture_palette GL_EXT_texture3D GL_EXT_texture_object GL_EXT_texture_lod_bias GL_EXT_vertex_array GL_MESA_window_pos GL_NV_texgen_reflection 3DFX_set_global_palette
GL_RENDERER: Mesa Glide v0.30 Voodoo_Graphics 0 CARD/2 FB/4 TM/1 TMU/NOSLI
GL_VENDOR: Brian Paul
GLU_VERSION: 1.1 Mesa 3.5
GLU_EXTENSIONS: GL_EXT_abgr
GLUT_API_VERSION: 3
SetGrxClk: tex write sstbase=4000000 addr=4f00000

Glide2x and OpenGL1.2 now working with SST-1 on IP32.

6 Replies to “IRIX 3dfx Voodoo driver + IRIX glide2x port & MesaFX port”

  1. This is quite amazing!
    If Xsgi is using the onboard framebuffer, how does it “switch” the attached display to the voodoo, or is it using the voodoo to do the rendering then pushing the data through the onboard framebuffer (CRIME)?

    1. The Voodoo1 & Voodoo2 cards are just 3D accelerators, they have VGA passthrough functionality. On-board video goes to the input of the V1/V2, display connects to the output. When it’s doing 3D stuff, it switches to the V1/V2 output. X server is not involved at all, nor is there data pushed through CRIME. In fact, you can connect one display to CRIME and one to the Voodoo card, and you will see both outputs.

      1. Ohh, I see, it was hard to tell by looking at the stripped O2, that’s a really neat project, thanks for sharing, hoping to see more of that in the future!

Leave a Reply

Your email address will not be published. Required fields are marked *