Difference between revisions of "Mach64"

From ArchWiki
Jump to: navigation, search
m
(45 intermediate revisions by 7 users not shown)
Line 1: Line 1:
This page is a walk through on obtaining Direct Rendering on a mach64 graphics chipset
+
[[Category:Graphics]]
 +
[[Category:X Server]]
 +
[http://en.wikipedia.org/wiki/ATI_Mach#Mach_64 The Mach 64 chip] is an old graphic accelerator developped by ATI. This board has basic 3D capabilites. Its support on Linux is poor but exists. This page is a walkthrough to setup Mach 64 graphics chipsets (including ATI Rage Pro) and obtain direct rendering on some of them.
  
==The Mach 64 Board==
+
==Installing the basic features==
The Mach64 Chip is made by ATI, coming in several varieties. This page is targeted at the Rage Pro variant, which to my knowledge is the only 3D version of the mach64.
+
2D and Xv acceleration in X can be achieved with xf86-video-mach64:
[http://en.wikipedia.org/wiki/ATI_Rage Wikipedia: Mach64/Rage Pro]
+
# pacman -S xf86-video-mach64
This board has basic 3D capabilites, but Arch's xf86-video-ati package, which contains open source ATI drivers does not contain support for it.
+
  
Most GNU/Linux 3D graphics drivers use the DRI/DRM system for direct rendering, which is what the Mach64 Driver uses this.
+
==3D acceleration and direct rendering==
 +
{{Warning | You may experience crashes if using the Mach 64 DRM module. Direct rendering on Mach 64 is not very reliable because it never got much support.}}
 +
On Linux, the Mach 64 chip uses the DRI/DRM system for direct rendering. The DRI part is available in [community], but the DRM module is not included in the mainline kernel. So we have to build it separately. A package in the [[AUR]] simplifies this task: {{AUR|mach64drm}}.
  
==Packages and References==
+
As soon as the DRM module is built and installed, make sure you installed the DRI part:
[http://dri.freedesktop.org/wiki/Building Reference Building DRI - Check this for link updates.]
+
# pacman -S mach64-dri
mesa - installs the mesa GL libs - Install this with pacman.
+
libgl - installs the gl libs (part of the 'official' mesa source tree) (). - install this with pacman
+
libdrm - installs the drm libs - install this with pacman
+
xf86-video-ati - installs the ati kernel drm files. - If you have this installed, get rid of it with pacman (use ABS to recompile).
+
  
==Building the Kernel Drm Module - with makepkg goodness==
+
==Configuration==
*Head over to the AUR and search for mach64drm
+
Here is an example of X configuration for a Mach 64 chip (not mandatory):
*Download the tarball and untar it, then change directory into the resulting directory.
+
*Run <code>makepkg -c</code>
+
*Install the resulting package with <code>pacman -U <resulting package></code>
+
  
==Building the Kernel Drm Module - the Old Way without pacman==
+
Section "Device"
warning: this does not use the makepkg method, which is recommended.
+
        Identifier  "Card0"
 +
        Driver      "mach64"
 +
        Card        "ATI Rage Pro - Mach64"
 +
        Option "DMAMode" "async"
 +
        Option "ForcePCIMode" "false"
 +
        Option "AgpMode" "2"
 +
        Option "AgpSize" "32"
 +
        Option "BufferSize" "2"
 +
        Option "LocalTextures" "true"
 +
EndSection
  
The standard ARCH kernel doesn't come with the mach64 DRM module, so building yourself is required.
+
Details:
 +
*Driver: most important, allows you to use the mach64 driver.
 +
*DMAMode: async - default, sync (synchronous DMA), mmio (PIO/MMIO) - Dispatch Buffers.
 +
*ForcePCIMode: boolean, disables AGP aperture. Set to True if you have a PCI card.
 +
*AgpMode (AGP 1x or 2x): 1 or 2. If not set, defaults to agpgart's mode.
 +
*AgpSize: sets the AGP aperture in MB - The video card can access this amount of system memory using AGP and shared access in order to expand its memory capacity - enlarging this allows more textures to be stored here.
 +
*BufferSize: sets DMA buffer memory size in MB. Default is 2 MB. May be 1 or 2.
 +
*LocalTextures: boolean, by default, AGP cards will only use AGP memory for textures. To force using local card memory for textures in addition to AGP, you may set this option to true.
 +
The AgpSize option changes the amount of system memory used for the AGP aperture and is not limited by the size of the card's on-board video memory. This memory is used for the DMA buffers BufferSize option), and the remainder is allocated for AGP textures. Of course, the AgpMode/AgpSize options are ignored for PCI cards or if ForcePCIMode is enabled on an AGP card. However, the BufferSize option can be used to change the size of the DMA buffers in system memory for both PCI and AGP cards (but it's not recommended to reduce the buffer size unless you are short on system RAM).
  
*Create a build folder to keep things tidy - this folder will be referred to from now on as $BUILDDIR
+
The Modules Section:
*Now, obtain the drm source tree:  
+
  Section "Module"
  git clone git://anongit.freedesktop.org/git/mesa/drm
+
        <Your modules>
*Get the thing compiled: (the drm folder appeared out of git)
+
        Load  "glx"
cd $BUILDDIR/drm/linux-core/
+
        Load "dri"
make DRM_MODULES="mach64"
+
  EndSection
*Go get some coffee or something since your machine is probably very old to have a mach64 chipset and wait while everything compiles.
+
*When it's done compiling, there will be two files, <code>mach64.ko</code>, the device kernel module, and <code>drm.ko</code>, the DRM generic module.
+
*Copy those two files to the appropriate kernel modules directory. (Before doing this you may want to backup the exisiting files to somewhere else just in case).
+
  sudo cp mach64.ko drm.ko /lib/modules/`uname -r`/kernel/drivers/char/drm/
+
*Now get the modules registered and depedencies generated.
+
  sudo depmod -a `uname -r`
+
  
==Installing the other end: DRI==
+
The DRI Section:
*This is easy. First, install the ABS system with Pacman if you don't have it already.
+
*Run the following to sync the ABS directory (/var/abs) with the repos.
+
sudo abs
+
*Copy the xf86-video-ati folder to your local build directory.
+
cp -r /var/abs/extra/xf86-video-ati <some place in your /home or somewhere...>
+
*Customize the PKGBUILD file inside the copied xf86-video-ati folder. You have to change dir_dirs to <code>"dri_dirs=mach64"</code>
+
* Run this now to create a standard pacman package
+
makepkg -c
+
* Now install the resulting package in the current directory as root with pacman -U
+
  
A decent chunk of time wasted getting 3D support for a primitive 3D graphics chipset.
+
Section "DRI"
 +
        Mode 0666 #allows anybody to use DRI
 +
EndSection
  
==Todo:==
+
The DRI Section (For machines where security is a concern):
Update the drm kernel module installation to makepkg. (I'll do this soon!)
+
 
 +
Section "DRI"
 +
        Group "video" #change to any desired group to restrict access
 +
        Mode 0660
 +
EndSection
 +
 
 +
==Testing direct rendering==
 +
Restart X. After you are in X, you can run the command:
 +
$ glxinfo | egrep "direct rendering|OpenGL renderer"
 +
This should return something like this:
 +
Direct rendering: Yes
 +
OpenGL renderer string: Mesa DRI Mach64 [Rage Pro] 20051019 AGP 2x x86/MMX/SSE
 +
 
 +
If OpenGL renderer string says "Software Rasterizer", DRI is not working, even if direct rendering says "yes".

Revision as of 20:10, 13 August 2012

The Mach 64 chip is an old graphic accelerator developped by ATI. This board has basic 3D capabilites. Its support on Linux is poor but exists. This page is a walkthrough to setup Mach 64 graphics chipsets (including ATI Rage Pro) and obtain direct rendering on some of them.

Installing the basic features

2D and Xv acceleration in X can be achieved with xf86-video-mach64:

# pacman -S xf86-video-mach64

3D acceleration and direct rendering

Warning: You may experience crashes if using the Mach 64 DRM module. Direct rendering on Mach 64 is not very reliable because it never got much support.

On Linux, the Mach 64 chip uses the DRI/DRM system for direct rendering. The DRI part is available in [community], but the DRM module is not included in the mainline kernel. So we have to build it separately. A package in the AUR simplifies this task: mach64drmAUR.

As soon as the DRM module is built and installed, make sure you installed the DRI part:

# pacman -S mach64-dri

Configuration

Here is an example of X configuration for a Mach 64 chip (not mandatory):

Section "Device"
       Identifier  "Card0"
       Driver      "mach64"
       Card        "ATI Rage Pro - Mach64"
       Option "DMAMode" "async"
       Option "ForcePCIMode" "false"
       Option "AgpMode" "2"
       Option "AgpSize" "32"
       Option "BufferSize" "2"
       Option "LocalTextures" "true"
EndSection

Details:

  • Driver: most important, allows you to use the mach64 driver.
  • DMAMode: async - default, sync (synchronous DMA), mmio (PIO/MMIO) - Dispatch Buffers.
  • ForcePCIMode: boolean, disables AGP aperture. Set to True if you have a PCI card.
  • AgpMode (AGP 1x or 2x): 1 or 2. If not set, defaults to agpgart's mode.
  • AgpSize: sets the AGP aperture in MB - The video card can access this amount of system memory using AGP and shared access in order to expand its memory capacity - enlarging this allows more textures to be stored here.
  • BufferSize: sets DMA buffer memory size in MB. Default is 2 MB. May be 1 or 2.
  • LocalTextures: boolean, by default, AGP cards will only use AGP memory for textures. To force using local card memory for textures in addition to AGP, you may set this option to true.

The AgpSize option changes the amount of system memory used for the AGP aperture and is not limited by the size of the card's on-board video memory. This memory is used for the DMA buffers BufferSize option), and the remainder is allocated for AGP textures. Of course, the AgpMode/AgpSize options are ignored for PCI cards or if ForcePCIMode is enabled on an AGP card. However, the BufferSize option can be used to change the size of the DMA buffers in system memory for both PCI and AGP cards (but it's not recommended to reduce the buffer size unless you are short on system RAM).

The Modules Section:

Section "Module"
       <Your modules>
       Load  "glx"
       Load  "dri"
EndSection

The DRI Section:

Section "DRI"
       Mode 0666 #allows anybody to use DRI
EndSection

The DRI Section (For machines where security is a concern):

Section "DRI"
       Group "video" #change to any desired group to restrict access
       Mode 0660
EndSection

Testing direct rendering

Restart X. After you are in X, you can run the command:

$ glxinfo | egrep "direct rendering|OpenGL renderer"

This should return something like this:

Direct rendering: Yes
OpenGL renderer string: Mesa DRI Mach64 [Rage Pro] 20051019 AGP 2x x86/MMX/SSE

If OpenGL renderer string says "Software Rasterizer", DRI is not working, even if direct rendering says "yes".