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

Reply via email to