Date: Wed, 31 Jan 2001 10:06:33 -0500 (EST) From: Andrew Atrens <atrens@nortelnetworks.com> To: Andrew Kenneth Milton <akm@mail.theinternet.com.au> Cc: <current@FreeBSD.ORG> Subject: Re: Voodoo3 + XFree4 + DRM - simple_lock ? :-) Message-ID: <Pine.BSF.4.32.0101310935290.5875-300000@hcarp00g.ca.nortel.com> In-Reply-To: <20010131045430.R11513@zeus.theinternet.com.au>
next in thread | previous in thread | raw e-mail | index | archive | help
[-- Attachment #1 --]
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.
[-- Attachment #2 --]
*** 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
[-- Attachment #3 --]
--- 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
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.BSF.4.32.0101310935290.5875-300000>
