# [SOLVED] Intel GMA 900 & OpenGL (properly setting up X drivers)

## Marcih

I have my integrated Intel graphics working fine for everyday usage, both in the TTY and for X server. When I try to run OpenGL applications (mostly trying games), things get a bit dicey; refusing to launch, rendering issues, that sort of thing. Granted, some things do work as intended.

Things I've tried and work:

glxgears

Extreme Tux Racer

OpenArena

Things I've tried and don't work:

Star Wars JKII: Jedi Outcast (runs, rendering issues, can try to post screenshot if pointed in the direction how to. May be an issue with the port though since this machine is known to be able to play the game on Windows and it uses a similar engine to OpenArena)

Xonotic (doesn't launch, see output at the end)

eduke32 with duke3d-demodata (launches, sound effects in menu play but only black screen is shown, both with OGL and software rendering)

This got me wondering whether I have the driver set up properly. The wiki is, quite frankly, unclear on what exactly is currently supported by what and what is deprecated. Can I use the "modesetting" driver in xorg.conf with it only being the default for Gen 4 and beyond or is it only an option for Gen 4+? How can I tell which driver I'm using? Does mesa provide a graphics driver? Is the graphics driver part of xorg-drivers  or is it just a meta-package? Which driver is recommended? So many questions!

Here's the things I could think of being relevant, can provide more if requested:

```
$ grep CONFIG_DRM_I915 /usr/src/linux/.config

CONFIG_DRM_I915=y

# CONFIG_DRM_I915_ALPHA_SUPPORT is not set

CONFIG_DRM_I915_CAPTURE_ERROR=y

CONFIG_DRM_I915_COMPRESS_ERROR=y

CONFIG_DRM_I915_USERPTR=y
```

```
$ emerge -pv mesa xorg-drivers xf86-video-intel

These are the packages that would be merged, in order:

Calculating dependencies... done!

[ebuild   R    ] x11-drivers/xf86-video-intel-2.99.917_p20180214-r1::gentoo  USE="dri sna udev -debug -dri3 -tools -uxa -xvmc" 0 KiB

[ebuild   R    ] media-libs/mesa-18.1.6::gentoo  USE="classic dri3 egl gallium gbm llvm nptl -bindist -d3d9 -debug -gles1 -gles2 -opencl -openmax -osmesa -pax_kernel -pic (-selinux)

-unwind -vaapi -valgrind -vdpau -vulkan -wayland -xa -xvmc" VIDEO_CARDS="i915 intel (-freedreno) -i965 (-imx) -nouveau -r100 -r200 -r300 -r600 -radeon -radeonsi (-vc4) -virgl (-vivante) -vmware" 0 KiB

[ebuild   R    ] x11-base/xorg-drivers-1.19::gentoo  INPUT_DEVICES="libinput synaptics -elographics -evdev -joystick -keyboard -mouse -tslib -vmmouse -void -wacom" VIDEO_CARDS="i915

intel -amdgpu -ast -dummy -fbdev (-freedreno) -geode -glint -i965 -mga (-newport) -nouveau -nv -nvidia (-omap) -qxl -r128 -radeon -radeonsi -siliconmotion (-tdfx) (-tegra) (-vc4) -vesa -via -virtualbox -vmware (-voodoo)" 0 KiB
```

```
$ cat /etc/portage/make.conf

# These settings were set by the catalyst build script that automatically

# built this stage.

# Please consult /usr/share/portage/config/make.conf.example for a more

# detailed example.

CHOST="i686-pc-linux-gnu"

CFLAGS="-march=native -O2 -pipe"

CXXFLAGS="${CFLAGS}"

MAKEOPTS="-j1"

GENTOO_MIRRORS="ftp://ftp.fi.muni.cz/pub/linux/gentoo/"

USE="X acpi alsa branding -consolekit -dbus -gnome -introspection -kde opengl -policykit -pulseaudio -systemd unicode -wayland"

CPU_FLAGS_X86="mmx mmxext sse sse2"

VIDEO_CARDS="intel i915"

INPUT_DEVICES="libinput synaptics"

PORTDIR="/usr/portage"

DISTDIR="/usr/portage/distfiles"

PKGDIR="/usr/portage/packages"

FEATURES="clean-logs userfetch"

# This sets the language of build output to English.

# Please keep this setting intact when reporting bugs.

LC_MESSAGES=C
```

```
$ cat /etc/X11/xorg.conf.d/20-display.conf

Section "Device"

        Identifier "Intel Graphics"

        Driver     "intel"

        Option     "AccelMethod"    "sna"

EndSection
```

(20opengl.conf is auto-created, the purpose of it is unknown to me since it looks empty.)

```
$ cat /etc/X11/xorg.conf.d/20opengl.conf

Section "Files"

EndSection
```

```
$ eselect opengl list

Available OpenGL implementations:

  [1]   xorg-x11 *
```

```
$ xonotic-glx

Game is Xonotic using base gamedir data

gamename for server filtering: Xonotic

Xonotic Linux 15:53:52 Sep  3 2018 - release

Current nice level is below the soft limit - cannot use niceness

Skeletal animation uses SSE code path

DPSOFTRAST available (SSE2 instructions detected)

execing quake.rc

execing default.cfg

execing defaultXonotic.cfg

execing sRGB-disable.cfg

menu: program is not loaded

execing weapons.cfg

execing binds-xonotic.cfg

execing cdtracks.cfg

execing balance-xonotic.cfg

execing bal-wep-xonotic.cfg

execing effects-normal.cfg

execing physicsX.cfg

execing turrets.cfg

execing crosshairs.cfg

execing gamemodes.cfg

execing ctfscoring-samual.cfg

execing mutators.cfg

execing notifications.cfg

execing monsters.cfg

execing minigames.cfg

execing physics.cfg

execing commands.cfg

execing _hud_common.cfg

execing _hud_descriptions.cfg

execing hud_luma.cfg

couldn't exec config.cfg

"maxplayers" set to "16"

execing data/campaign.cfg

execing config_update.cfg

execing font-xolonium.cfg

client: program is not loaded

execing autoexec/empty.cfg

execing autoexec.cfg

Loaded public key key_0.d0pk (fingerprint: Xon//KssdlzGkFKdnnN4sgg8H+koTbBn5JTi37BAW1Q=)

Loaded private ID key_0.d0si for key_0.d0pk (public key fingerprint: R1JImsqobaHngw1yZ1vbMTsnDM9pX49r46k8ipVuOtw=)

NOTE: this ID has not yet been signed!

Only need a signature for an existing key...

Signature generation in progress...

execing post-config.cfg

Client using an automatically assigned port

Client opened a socket on address 0.0.0.0:0

Client opened a socket on address [0:0:0:0:0:0:0:0]:0

Loading OpenGL driver libGL.so.1

dri_create_context: glthread isn't thread safe - missing call XInitThreads

GL_VENDOR: Mesa Project

GL_RENDERER: i915 (chipset: 915GM)

GL_VERSION: 2.1 Mesa 18.1.6

vid.support.arb_multisample 1

vid.support.gl20shaders 1

NOTE: requested 1x AA, got 0x AA

Video Mode: fullscreen 1024x768x32x0.00hz

Received signal 11, exiting...

Invalid response from keygen server:
```

Did I do things right? Have I missed something? Should I use a different driver? Is there a benchmark I can use to check whether I've done things correctly?

EDIT: Updated as promised.

----------

## Marcih

Update, MuPDF with USE="opengl" is toast as well (using mupdf-x11 still works):

```
$ mupdf-gl test.pdf

dri_create_context: glthread isn't thread safe - missing call XInitThreads

munmap_chunk(): invalid pointer

SIGABRT
```

----------

## The Main Man

I think you should turn off gallium USE flag for mesa, also dri3 and llvm.

Last two don't matter with your problem but you don't need them with that gpu.

Could be wrong though, on one machine I have 945G and I think I had similar problem, until I disabled gallium, I think that started with mesa 18.X , with 17.X and earlier it worked fine.

----------

## Marcih

 *kajzer wrote:*   

> I think you should turn off gallium USE flag for mesa, also dri3 and llvm.
> 
> Last two don't matter with your problem but you don't need them with that gpu.
> 
> Could be wrong though, on one machine I have 945G and I think I had similar problem, until I disabled gallium, I think that started with mesa 18.X , with 17.X and earlier it worked fine.

 

Brilliant, everything works as expected: eduke32 shows stuff, xonotic launches, mupdf-gl works and Jedi Outcast renders the game properly!

I guess I should trust my own judgement a bit more since I was already thinking of disabling both Gallium since the Intel driver doesn't and won't support it (at least on i915) and dri3 since dri2 is the latest GMA 900 supports. However, I do have classic USE flag enabled; I though having them both would result in compiling on both the classic and Gallium architectures so it wouldn't be any harm, even if my driver didn't support Gallium. Looks like I was wrong, would be nice to have that on the Gentoo wiki.

Also, why disable llvm support? The mesa page doesn't help me figure out whether I need it or not. I'm not complaining, llvm is an ugly beast that takes 3 hours to compile and since mesa is the only package requiring it I'll be happy to purge it from the system. What difference does it make though?

----------

## The Main Man

Glad it worked!

Took me some time to figure it out month or two ago when I had that problem.

As for dri3, I see you have it disabled in intel driver, so I thought you wouldn't need it in mesa then.

I didn't notice any difference when I disabled llvm, so like you said it's just much quicker mesa compile, at least I think there's no difference, same games I was running still run with no visible problems.

Told you in previous message that dri3 and llvm are not related to the problem you had, but maybe you should turn them off too, it's up to you  :Smile: 

When I disabled gallium and it solved the problem, I was looking at some other USE flags and for testing I just thought I should try it without llvm and see how that goes, because I knew it's a monster of a package and I don't need it for anything else, turned out I don't need it, so you will have to judge that one for yourself.

----------

## tribute58

 *Marcih wrote:*   

> However, I do have classic USE flag enabled; I though having them both would result in compiling on both the classic and Gallium architectures so it wouldn't be any harm, even if my driver didn't support Gallium.

 

You are right, that both are compiled, but you have to select the active driver with "eselect mesa set opengl ..." (can't check the syntax that at the moment). As kajzer already mentioned, the i915 gallium driver is horribly broken and is unmaintained for quiet a while. It's a pitty as the gallium driver has been way better than the classic driver.

----------

## mattst88

The story here is, Intel has graphics chips known as Gen1-9 currently. These generation numbers are not tied to the CPU generation numbers. See https://wiki.gentoo.org/wiki/Intel#Feature_support

Gen2-9+ are supported by the i915 kernel modesetting driver.

Gen2-3 are supported by the i915 Mesa 3D driver.

Gen 4+ are supported by the i965 Mesa 3D driver.

You need both a kernel modesetting driver and a 3D (userspace) driver.

As a result, lots of people are confused by what "i915" means and the difference between the drivers.

Now, it gets a little more confusing. There are DRI ("classic") and Gallium 3D drivers in Mesa. i965 is a classic driver and radeonsi is a Gallium driver for example.

There are *two* i915 drivers. The classic i915 driver supports Gen2-3. The Gallium i915 driver supports only Gen3.

They're both really bad drivers (for really bad hardware).

i915 hardware doesn't do vertex shading in hardware, and this is where the Gallium driver is better. It uses LLVM to build shaders and executes the JIT-compiled programs on the CPU. The classic driver runs the shaders through a software interpreter.

I really need to write this up as a blog post or Wiki page...

To reiterate: The hardware is terrible. Both drivers are terrible.

----------

## Ant P.

 *mattst88 wrote:*   

> To reiterate: The hardware is terrible. Both drivers are terrible.

 

ITYM all three drivers - forgot to mention the intel/modesetting DDX split.

----------

## mattst88

 *Ant P. wrote:*   

>  *mattst88 wrote:*   To reiterate: The hardware is terrible. Both drivers are terrible. 
> 
> ITYM all three drivers - forgot to mention the intel/modesetting DDX split.

 

No, I mean both classic and Gallium i915 drivers are terrible.

I wasn't even going to bring up the 2D X drivers that you mention.  :Smile: 

----------

