Important: You are required to change your passwords used for Gentoo services and set an email address for your Wiki account if you haven't done so. See the full announcement and Wiki email policy change for more information.

Xorg/Hardware 3D acceleration guide

From Gentoo Wiki
Xorg
Revision as of 14:59, 17 December 2013 by Fturco (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search
Other languages:English 100% • ‎한국어 62%

This document is a guide to getting 3D acceleration working using the DRM with Xorg in Gentoo Linux.

Introduction

What is hardware 3D acceleration and why do I want it?

With hardware 3D acceleration, three-dimensional rendering uses the graphics processor on your video card instead of taking up valuable CPU resources drawing 3D images. It's also referred to as "hardware acceleration" instead of "software acceleration" because without this 3D acceleration your CPU is forced to draw everything itself using the Mesa software rendering libraries, which takes up quite a bit of processing power. While Xorg typically supports 2D hardware acceleration, it often lacks hardware 3D acceleration. Three-dimensional hardware acceleration is valuable in situations requiring rendering of 3D objects such as games, 3D CAD and modeling.

How do I get hardware 3D acceleration?

In many cases, both binary and open-source drivers exist. Open source drivers are preferable since we're using Linux and open source is one of its underlying principles. Sometimes, binary drivers are the only option, especially if your graphics card is so new that open source drivers have not yet been written to support its features. Binary drivers include x11-drivers/nvidia-drivers for nVidia cards and x11-drivers/ati-drivers for AMD/ATI cards.

What is DRI?

The Direct Rendering Infrastructure, also known as the DRI, is a framework for allowing direct access to graphics hardware in a safe and efficient manner. It includes changes to the X server, to several client libraries and to the kernel. The first major use for the DRI is to create fast OpenGL implementations.

What is the DRM and how does it relate to regular Xorg?

The DRM (Direct Rendering Manager) is an enhancement to Xorg that adds 3D acceleration for cards by adding the kernel module necessary for direct rendering.

Purpose

This guide is for people who can't get direct rendering working with just Xorg. The DRM works for the following drivers:

  • 3dfx
  • intel
  • matrox
  • nouveau
  • rage128
  • radeon
  • mach64
  • sis300
  • via

See the DRI homepage for more info and documentation.

Install Xorg and configure your kernel

Install Xorg

Please read our Xorg Configuration Guide to get Xorg up and running.

Configure your kernel

Probe for your chipset and enable just that one.

root # emerge --ask pciutils
root # lspci | grep AGP
# 00:01.0 PCI bridge: Intel Corp. 440BX/ZX/DX - 82443BX/ZX/DX AGP bridge (rev 03)

Your output may not match the above due to different hardware.

If your chipset is not supported by the kernel you might have some success by passing agp=try_unsupported as a kernel parameter. This will use Intel's generic routines for AGP support. To add this parameter, edit your bootloader configuration file!

Most, if not all, kernels should have these options. This was configured using a standard sys-kernel/gentoo-sources kernel.

root # ls -l /usr/src/linux
lrwxrwxrwx 1 root root 22 2007-02-14 20:12 /usr/src/linux -> linux-2.6.18-gentoo-r4

Make sure /usr/src/linux links to your current kernel.

root # cd /usr/src/linux
root #
make menuconfig
Kernel configurationHardware 3D acceleration options

Processor type and features --->
<*> MTRR (Memory Type Range Register) support
Device drivers --->
   Graphics support --->
   <M> /dev/agpgart (AGP Support) --->
      (The agpgart option is not present on 64-bit kernels; just choose your chipset support.)
      <M> Intel 440LX/BX/GX, I8xx and E7x05 support
      (Enable your chipset instead of the above.)
   <M> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) --->
      <M> (Select your graphics card from the list)

Compile and install your kernel

root # make && make modules_install

Don't forget to set up grub.conf or lilo.conf and run /sbin/lilo if you use LILO.

Add your user to the video group

Next, add your user(s) to the video group, as explained in the handbook:

root # gpasswd -a username video

Configure direct rendering

Configure Xorg

Hopefully just adding your user to the video group is sufficient to enable direct rendering. However, you may also need to create a file in /etc/X11/xorg.conf.d/. You can name it anything you like; just make sure it ends in .conf. Open up your favorite text editor and create a file with this inside it:

File/etc/X11/xorg.conf.d/10-dri.conf

Section "Device"
  Driver "radeon"
EndSection
Section "dri"
  Mode 0666
EndSection

Replace radeon with the name of your driver.

Changes to /etc/conf.d/modules

You will need to add the module name that your card uses to /etc/conf.d/modules to ensure that the module is loaded automatically when the system starts up.

File/etc/conf.d/modules

modules="intel-agp" # Substitute with your driver
Note
If you compiled agpgart as a module, you will also need to add it to /etc/conf.d/modules.

Test 3D acceleration

Reboot to the new kernel

Reboot your computer to your new kernel and login as a normal user. It's time to see if you have direct rendering and how good it is. glxinfo and glxgears are part of the x11-apps/mesa-progs package, so make sure it is installed before you attempt to run these commands.

user $ startx

No need to load modules for your driver or agpgart, even if you compiled them as a module. They will be loaded automatically.

user $ glxinfo | grep rendering
direct rendering: Yes

If it says "No", you don't have 3D acceleration.

user $ glxgears

Test your frames per second (FPS) at the default size. The number should be significantly higher than before configuring DRM. Do this while the CPU is as idle as possible.

Note
FPS may be limited by your screen's refresh rate, so keep this in mind if glxgears reports only about 70-100 FPS. games-fps/ut2004-demo or other 3D games are better benchmarking tools, as they give you real-world performance results.

Get the most out of direct rendering

If you want to set more features, for performance or other reasons, check out the feature matrix on the DRI web site or the features listing on Sourceforge.

Troubleshooting

It doesn't work. I don't have rendering, and I can't tell why.

Try modprobe radeon before you start the X server (replace radeon with the name of your driver). Also, try building agpgart into the kernel instead of as a module.

When I startx, I get this error: "[drm] failed to load kernel module agpgart"

That's because you compiled agpgart into the kernel instead of as a module. Ignore it unless you're having problems.

I have a Radeon, and I want TV-Out.

The drivers originally developed by the GATOS project have been merged into Xorg's codebase. You don't need anything special for TV-Out; x11-drivers/xf86-video-ati will work just fine.

It doesn't work. My card is so incredibly new and cool that it isn't supported at all.

Try out the binary drivers. For AMD cards, use ati-drivers; a listing is at http://support.amd.com/us/gpudownload/Pages/index.aspx. If those don't support it, use fbdev. It's slow, but it works.

I have a PCI card and it doesn't work. Help!

Create a config file in /etc/X11/xorg.conf.d/; name it anything you want as long as it ends in .conf. Add the following to it:

File/etc/X11/xorg.conf.x/10-pcimode.confAdding ForcePCI Mode

Section "Device"
  Option "ForcePCIMode" "True"
EndSection

References

Acknowledgements

We would like to thank the following authors and editors for their contributions to this guide:


  • dberkholz
  • peesh
  • nightmorph