On Wed, 31 Jan 2001, Andrew Kenneth Milton wrote: > I've made a roadmap to getting hardware accel 3d support using a Voodoo3 > under XFree-4. I've attached it in case anyone is interested. I've made some patches for this that I submitted to the XFree guys about a month ago. On the glide side, I've been using the latest one in the DRI project's cvs - it requires a bunch of little patches that I'm now trying to get into shape. > I've only done this using a PCI Voodoo 3 2000 Card, but, I'd assume if your > card is working correctly then this will probably also work for you with > some minor modifications. Yup, I've tried a 3-2000, 3-3500, 4-4500, and a 5-5500, and they all work okay, with some minor nigglies. > > If you're using a 3dfx card, you'll need to grab the Glide SDK and install > the headers. And you'll need to grab the source for Glide 3 and install the > libraries. It compiled ok here, so I don't anticipate too many problems. > > ------------------------------------------------------------------------ > Glide Libraries: > You'll want to build the 'h5' library for the Voodoo4/5, the 'h3' library for Voodoo3, and the 'cvg' library for Voodoo2. The CVS build recipe (for linux) is at dri.sourceforge.net. > > ------------------------------------------------------------------------ > > This is for XFree-4.0.1 port revision 9 through to (so far) > XFree-4.0.2 port revision 5 > > cd /usr/ports/x11/XFree-4 > make extract > make patch > make configure (answer the questions). > > edit work/xc/config/cf/FreeBSD.cf > > and add; > > #define BuildXF86DRM YES > #define BuildXF86DRI YES > #define HasGlide3 YES > > At the bottom before the > > #include <bsdLib.rules> > > cd work/xc/programs/Xserver/hw/xfree86/os-support/bsd/drm/kernel > > Someone fell asleep at the wheel here over at VA-Linux, I assume it > was a CVS snapshot that was half finished... but, other than this > thing, good work :-) Moving target I suppose. Most of the work is older than 6 months. Doug Rabson appears to have done a lot of it. > > Basically you want to change all references to SYSCTL_HANDLER_ARGS > to (SYSCTL_HANDLER_ARGS) in; > drmP.h > drm/memory.c > drm/sysctl.c > I've attached a patch. > edit tdfx/tdfx_drv.c and change > callout_init(&dev->timer) to > callout_init(&dev->timer,0) this change is smp-ng specific (it's not in the 4.x tree). btw, it would be nice to be able to change that '0' to a '1' :) .. > > go back to the top of your XFree-4 tree and do; > make > make install (if you already have XFree 4 installed you can probably > skip this and continue on from here to get the kernel modules you need). > > Now you have to wander back down to > work/xc/programs/Xserver/hw/xfree86/os-support/bsd/drm/kernel in the XFree4.0.2-cvs you actually need to do a 'make -f Makefile.bsd' > > copy drm.ko to /usr/local/modules (or somewhere else convenient). > and copy tdfx/tdfx.ko to /usr/local/modules/tdfx_drm.ko (this clashes > with an existing native tdfx module for 'older' hardware). If this > wasn't built automatically just type make in the tdfx directory and it > should be built for you. ok. I didn't notice a clash. > 3D acceleration only works in 16bpp mode, so make sure you're running > with your depth set to 16 when you start your XFree 4. On the new Xfree it works in 24bpp mode too, but slightly slower - I see only about 40fps with the pulsar hack on my 5500. Andrew.
*** xc/programs/Xserver/hw/xfree86/os-support/bsd/drm/kernel/drm/memory.c.old Fri Jun 16 20:03:30 2000 --- xc/programs/Xserver/hw/xfree86/os-support/bsd/drm/kernel/drm/memory.c Fri Jan 5 00:00:08 2001 *************** *** 95,101 **** /* drm_mem_info is called whenever a process reads /dev/drm/mem. */ ! static int _drm_mem_info SYSCTL_HANDLER_ARGS { drm_mem_stats_t *pt; char buf[128]; --- 95,101 ---- /* drm_mem_info is called whenever a process reads /dev/drm/mem. */ ! static int _drm_mem_info (SYSCTL_HANDLER_ARGS) { drm_mem_stats_t *pt; char buf[128]; *************** *** 127,133 **** return 0; } ! int drm_mem_info SYSCTL_HANDLER_ARGS { int ret; --- 127,133 ---- return 0; } ! int drm_mem_info (SYSCTL_HANDLER_ARGS) { int ret; *** xc/programs/Xserver/hw/xfree86/os-support/bsd/drm/kernel/drm/sysctl.c.old Fri Jun 16 20:03:31 2000 --- xc/programs/Xserver/hw/xfree86/os-support/bsd/drm/kernel/drm/sysctl.c Fri Jan 5 00:00:13 2001 *************** *** 35,55 **** SYSCTL_NODE(_hw, OID_AUTO, dri, CTLFLAG_RW, 0, "DRI Graphics"); ! static int drm_name_info SYSCTL_HANDLER_ARGS; ! static int drm_vm_info SYSCTL_HANDLER_ARGS; ! static int drm_clients_info SYSCTL_HANDLER_ARGS; ! static int drm_queues_info SYSCTL_HANDLER_ARGS; ! static int drm_bufs_info SYSCTL_HANDLER_ARGS; #if DRM_DEBUG_CODExx ! static int drm_vma_info SYSCTL_HANDLER_ARGS; #endif #if DRM_DMA_HISTOGRAM ! static int drm_histo_info SYSCTL_HANDLER_ARGS; #endif struct drm_sysctl_list { const char *name; ! int (*f) SYSCTL_HANDLER_ARGS; } drm_sysctl_list[] = { { "name", drm_name_info }, { "mem", drm_mem_info }, --- 35,55 ---- SYSCTL_NODE(_hw, OID_AUTO, dri, CTLFLAG_RW, 0, "DRI Graphics"); ! static int drm_name_info (SYSCTL_HANDLER_ARGS); ! static int drm_vm_info (SYSCTL_HANDLER_ARGS); ! static int drm_clients_info (SYSCTL_HANDLER_ARGS); ! static int drm_queues_info (SYSCTL_HANDLER_ARGS); ! static int drm_bufs_info (SYSCTL_HANDLER_ARGS); #if DRM_DEBUG_CODExx ! static int drm_vma_info (SYSCTL_HANDLER_ARGS); #endif #if DRM_DMA_HISTOGRAM ! static int drm_histo_info (SYSCTL_HANDLER_ARGS); #endif struct drm_sysctl_list { const char *name; ! int (*f) (SYSCTL_HANDLER_ARGS); } drm_sysctl_list[] = { { "name", drm_name_info }, { "mem", drm_mem_info }, *************** *** 137,143 **** return 0; } ! static int drm_name_info SYSCTL_HANDLER_ARGS { drm_device_t *dev = arg1; char buf[128]; --- 137,143 ---- return 0; } ! static int drm_name_info (SYSCTL_HANDLER_ARGS) { drm_device_t *dev = arg1; char buf[128]; *************** *** 155,161 **** return 0; } ! static int _drm_vm_info SYSCTL_HANDLER_ARGS { drm_device_t *dev = arg1; drm_map_t *map; --- 155,161 ---- return 0; } ! static int _drm_vm_info (SYSCTL_HANDLER_ARGS) { drm_device_t *dev = arg1; drm_map_t *map; *************** *** 192,198 **** return 0; } ! static int drm_vm_info SYSCTL_HANDLER_ARGS { drm_device_t *dev = arg1; int ret; --- 192,198 ---- return 0; } ! static int drm_vm_info (SYSCTL_HANDLER_ARGS) { drm_device_t *dev = arg1; int ret; *************** *** 205,211 **** } ! static int _drm_queues_info SYSCTL_HANDLER_ARGS { drm_device_t *dev = arg1; int i; --- 205,211 ---- } ! static int _drm_queues_info (SYSCTL_HANDLER_ARGS) { drm_device_t *dev = arg1; int i; *************** *** 243,249 **** return 0; } ! static int drm_queues_info SYSCTL_HANDLER_ARGS { drm_device_t *dev = arg1; int ret; --- 243,249 ---- return 0; } ! static int drm_queues_info (SYSCTL_HANDLER_ARGS) { drm_device_t *dev = arg1; int ret; *************** *** 257,263 **** /* drm_bufs_info is called whenever a process reads hw.dri.0.bufs. */ ! static int _drm_bufs_info SYSCTL_HANDLER_ARGS { drm_device_t *dev = arg1; drm_device_dma_t *dma = dev->dma; --- 257,263 ---- /* drm_bufs_info is called whenever a process reads hw.dri.0.bufs. */ ! static int _drm_bufs_info (SYSCTL_HANDLER_ARGS) { drm_device_t *dev = arg1; drm_device_dma_t *dma = dev->dma; *************** *** 293,299 **** return 0; } ! static int drm_bufs_info SYSCTL_HANDLER_ARGS { drm_device_t *dev = arg1; int ret; --- 293,299 ---- return 0; } ! static int drm_bufs_info (SYSCTL_HANDLER_ARGS) { drm_device_t *dev = arg1; int ret; *************** *** 305,311 **** } ! static int _drm_clients_info SYSCTL_HANDLER_ARGS { drm_device_t *dev = arg1; drm_file_t *priv; --- 305,311 ---- } ! static int _drm_clients_info (SYSCTL_HANDLER_ARGS) { drm_device_t *dev = arg1; drm_file_t *priv; *************** *** 327,333 **** return 0; } ! static int drm_clients_info SYSCTL_HANDLER_ARGS { drm_device_t *dev = arg1; int ret; --- 327,333 ---- return 0; } ! static int drm_clients_info (SYSCTL_HANDLER_ARGS) { drm_device_t *dev = arg1; int ret; *************** *** 340,346 **** #if DRM_DEBUG_CODExx ! static int _drm_vma_info SYSCTL_HANDLER_ARGS { drm_device_t *dev = arg1; drm_vma_entry_t *pt; --- 340,346 ---- #if DRM_DEBUG_CODExx ! static int _drm_vma_info (SYSCTL_HANDLER_ARGS) { drm_device_t *dev = arg1; drm_vma_entry_t *pt; *************** *** 412,418 **** return 0; } ! static int drm_vma_info SYSCTL_HANDLER_ARGS { drm_device_t *dev = arg1; int ret; --- 412,418 ---- return 0; } ! static int drm_vma_info (SYSCTL_HANDLER_ARGS) { drm_device_t *dev = arg1; int ret; *************** *** 426,432 **** #if DRM_DMA_HISTOGRAM ! static int _drm_histo_info SYSCTL_HANDLER_ARGS { drm_device_t *dev = arg1; drm_device_dma_t *dma = dev->dma; --- 426,432 ---- #if DRM_DMA_HISTOGRAM ! static int _drm_histo_info (SYSCTL_HANDLER_ARGS) { drm_device_t *dev = arg1; drm_device_dma_t *dma = dev->dma; *************** *** 541,547 **** return 0; } ! static int drm_histo_info SYSCTL_HANDLER_ARGS { drm_device_t *dev = arg1; int ret; --- 541,547 ---- return 0; } ! static int drm_histo_info (SYSCTL_HANDLER_ARGS) { drm_device_t *dev = arg1; int ret; *** xc/programs/Xserver/hw/xfree86/os-support/bsd/drm/kernel/gamma/Makefile.old Fri Jun 16 20:03:31 2000 --- xc/programs/Xserver/hw/xfree86/os-support/bsd/drm/kernel/gamma/Makefile Fri Jan 5 00:04:59 2001 *************** *** 3,9 **** KMOD = gamma SRCS = gamma_drv.c gamma_dma.c SRCS += device_if.h bus_if.h pci_if.h ! CFLAGS += ${DEBUG_FLAGS} -I.. KMODDEPS = drm @: --- 3,9 ---- KMOD = gamma SRCS = gamma_drv.c gamma_dma.c SRCS += device_if.h bus_if.h pci_if.h ! CFLAGS += ${DEBUG_FLAGS} -I. -I.. KMODDEPS = drm @: *** xc/programs/Xserver/hw/xfree86/os-support/bsd/drm/kernel/gamma/gamma_drv.c.old Fri Jun 16 20:03:31 2000 --- xc/programs/Xserver/hw/xfree86/os-support/bsd/drm/kernel/gamma/gamma_drv.c Fri Jan 5 00:05:31 2001 *************** *** 209,215 **** dev->last_context = 0; dev->last_switch = 0; dev->last_checked = 0; ! callout_init(&dev->timer); dev->context_wait = 0; #if DRM_DMA_HISTO memset(&dev->histo, 0, sizeof(dev->histo)); --- 209,215 ---- dev->last_context = 0; dev->last_switch = 0; dev->last_checked = 0; ! callout_init(&dev->timer, 0); dev->context_wait = 0; #if DRM_DMA_HISTO memset(&dev->histo, 0, sizeof(dev->histo)); *** xc/programs/Xserver/hw/xfree86/os-support/bsd/drm/kernel/tdfx/tdfx_drv.c.old Fri Jun 16 20:03:32 2000 --- xc/programs/Xserver/hw/xfree86/os-support/bsd/drm/kernel/tdfx/tdfx_drv.c Fri Jan 5 00:04:31 2001 *************** *** 64,69 **** --- 64,73 ---- case 0x0005121a: s = "3Dfx Voodoo 3 graphics accelerator"; break; + + case 0x0009121a: + s = "3Dfx Voodoo 5 graphics accelerator"; + break; } if (s) { *************** *** 213,219 **** dev->last_context = 0; dev->last_switch = 0; dev->last_checked = 0; ! callout_init(&dev->timer); dev->context_wait = 0; timespecclear(&dev->ctx_start); --- 217,223 ---- dev->last_context = 0; dev->last_switch = 0; dev->last_checked = 0; ! callout_init(&dev->timer,0); dev->context_wait = 0; timespecclear(&dev->ctx_start); *** xc/programs/Xserver/hw/xfree86/os-support/bsd/drm/kernel/tdfx/Makefile.old Fri Jun 16 20:03:32 2000 --- xc/programs/Xserver/hw/xfree86/os-support/bsd/drm/kernel/tdfx/Makefile Fri Jan 5 00:04:28 2001 *************** *** 3,9 **** KMOD = tdfx SRCS = tdfx_drv.c tdfx_context.c SRCS += device_if.h bus_if.h pci_if.h ! CFLAGS += ${DEBUG_FLAGS} -I.. KMODDEPS = drm @: --- 3,9 ---- KMOD = tdfx SRCS = tdfx_drv.c tdfx_context.c SRCS += device_if.h bus_if.h pci_if.h ! CFLAGS += ${DEBUG_FLAGS} -I. -I.. KMODDEPS = drm @: *** xc/programs/Xserver/hw/xfree86/os-support/bsd/drm/kernel/drmP.h.old Fri Jun 16 20:03:28 2000 --- xc/programs/Xserver/hw/xfree86/os-support/bsd/drm/kernel/drmP.h Thu Jan 4 23:57:39 2001 *************** *** 594,600 **** /* Memory management support (memory.c) */ extern void drm_mem_init(void); ! extern int drm_mem_info SYSCTL_HANDLER_ARGS; extern void *drm_alloc(size_t size, int area); extern void *drm_realloc(void *oldpt, size_t oldsize, size_t size, int area); --- 594,600 ---- /* Memory management support (memory.c) */ extern void drm_mem_init(void); ! extern int drm_mem_info (SYSCTL_HANDLER_ARGS); extern void *drm_alloc(size_t size, int area); extern void *drm_realloc(void *oldpt, size_t oldsize, size_t size, int area); *** xc/programs/Xserver/hw/xfree86/os-support/xf86_OSlib.h.old Tue Nov 14 16:59:23 2000 --- xc/programs/Xserver/hw/xfree86/os-support/xf86_OSlib.h Thu Jan 4 23:55:10 2001 *************** *** 469,475 **** # ifdef SYSCONS_SUPPORT # define COMPAT_SYSCONS # if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) ! # include <machine/console.h> # else # include <sys/console.h> # endif /* __FreeBSD__ || __NetBSD__ || defined(__OpenBSD__) */ --- 469,480 ---- # ifdef SYSCONS_SUPPORT # define COMPAT_SYSCONS # if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) ! # if defined(__FreeBSD__) && __FreeBSD__ >= 5 ! # include <sys/consio.h> ! # include <sys/kbio.h> ! # else ! # include <machine/console.h> ! # endif # else # include <sys/console.h> # endif /* __FreeBSD__ || __NetBSD__ || defined(__OpenBSD__) */ *************** *** 504,510 **** # endif /* WSCONS_SUPPORT */ # if defined(__FreeBSD__) # undef MOUSE_GETINFO ! # include <machine/mouse.h> # endif /* Include these definitions in case ioctl_pc.h didn't get included */ # ifndef CONSOLE_X_MODE_ON --- 509,519 ---- # endif /* WSCONS_SUPPORT */ # if defined(__FreeBSD__) # undef MOUSE_GETINFO ! # if __FreeBSD__ >= 5 ! # include <sys/mouse.h> ! # else ! # include <machine/mouse.h> ! # endif # endif /* Include these definitions in case ioctl_pc.h didn't get included */ # ifndef CONSOLE_X_MODE_ON
--- xc/programs/Xserver/hw/xfree86/SuperProbe/OS_386BSD.c.old Fri Jun 23 18:42:02 2000 +++ xc/programs/Xserver/hw/xfree86/SuperProbe/OS_386BSD.c Fri Jan 5 11:41:46 +2001 @@ -83,7 +83,12 @@ # endif # ifdef SYSCONS_SUPPORT /* both, Free and NetBSD have syscons */ -# include <machine/console.h> +# if __FreeBSD__ >= 5 +# include <sys/consio.h> +# include <sys/kbio.h> +# else +# include <machine/console.h> +# endif # endif # else # ifdef CODRV_SUPPORT