Here a summary thread of the supported/unsupported feature of open source drivers on linux. Nvidia and AMD proprietary driver have full support of opengl extensions. It is recommended to use proprietary drivers.
Steam stat on GPU distribution:
http://store.steampowered.com/hwsurvey/v...?sort=name
TODO: make a nice array of the opengl extension. The idea will be to check the status on mesa 10.3 (mostly on intel and AMD, nvidia have less issue on linux
)
Just install Mesa 10.6
OpenGL 4 extensions (that are supported by opengl3 HW aka DX10 card):
ARB_separate_shader_objects: mesa 10.3 (buggy unfortunately)
ARB_copy_image: (not sure this one is working on GL3 HW) mesa 10.3 (intel)
Extensions that might be required by future version
ARB_vertex_attrib_binding: 10.3
ARB_clear_texture:
ARB_multi_bind: 10.3
ARB_invalidate_subdata: ?
ARB_bindless_texture: ? (opengl 5?)
dx11 compatibility
dsa: easier access to object
For intel GPU, you can get extension supported by mesa in
Radeon driver is a bit more tricky, you need to check gallium capability first:
Then capability in
Expert only
Solution to easily switch between radeon and catalyst driver:
Create /etc/grub.d/40_linux_multi_GPU
It is mostly a copy of /etc/grub.d/10_linux which create 2 additional entries to select the kernel GPU driver (radeon or fglrx).
Wrapper to launch proper X with correct GL configuration (debian). The script need to be executed by the Display Manager like lightdm.
For an unknow reason, on my PC I need to force the loading of the radeon driver.
So add the following line at the end of /etc/modules
Steam stat on GPU distribution:
http://store.steampowered.com/hwsurvey/v...?sort=name
TODO: make a nice array of the opengl extension. The idea will be to check the status on mesa 10.3 (mostly on intel and AMD, nvidia have less issue on linux

Just install Mesa 10.6

OpenGL 4 extensions (that are supported by opengl3 HW aka DX10 card):
ARB_separate_shader_objects: mesa 10.3 (buggy unfortunately)
ARB_copy_image: (not sure this one is working on GL3 HW) mesa 10.3 (intel)
Extensions that might be required by future version
ARB_vertex_attrib_binding: 10.3
ARB_clear_texture:
ARB_multi_bind: 10.3
ARB_invalidate_subdata: ?
ARB_bindless_texture: ? (opengl 5?)
dx11 compatibility
dsa: easier access to object
For intel GPU, you can get extension supported by mesa in
Code:
src/mesa/drivers/dri/intel/intel_extensions.
Generation | Name |
7 | ivy bridge |
6 | sandy bridge |
5 | ironlake alias HD graphics |
4 | latest GMA alias GMAX3n00, GMA4500, GMAX4500 |
3 | older stuff and atom.... |
Radeon driver is a bit more tricky, you need to check gallium capability first:
Code:
src/mesa/state_tracker/st_extensions.c
Code:
src/gallium/drivers/r600/r600_pipe.c
src/gallium/drivers/r300/r300_screen.c
Expert only
Solution to easily switch between radeon and catalyst driver:
Create /etc/grub.d/40_linux_multi_GPU
It is mostly a copy of /etc/grub.d/10_linux which create 2 additional entries to select the kernel GPU driver (radeon or fglrx).
Code:
#! /bin/sh
set -e
# Script was updated to duplicate linux entry with additional modprobe options
# 1/ modprobe.blacklist=drm,radeon
# 2/ modprobe.blacklist=fglrx
# grub-mkconfig helper script.
# Copyright (C) 2006,2007,2008,2009,2010 Free Software Foundation, Inc.
#
# GRUB is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# GRUB is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with GRUB. If not, see <http://www.gnu.org/licenses/>.
prefix="/usr"
exec_prefix="${prefix}"
datarootdir="${prefix}/share"
. "${datarootdir}/grub/grub-mkconfig_lib"
export TEXTDOMAIN=grub
export TEXTDOMAINDIR="${datarootdir}/locale"
CLASS="--class gnu-linux --class gnu --class os"
if [ "x${GRUB_DISTRIBUTOR}" = "x" ] ; then
OS=GNU/Linux
else
OS="${GRUB_DISTRIBUTOR} GNU/Linux"
CLASS="--class $(echo ${GRUB_DISTRIBUTOR} | tr 'A-Z' 'a-z' | cut -d' ' -f1) ${CLASS}"
fi
# loop-AES arranges things so that /dev/loop/X can be our root device, but
# the initrds that Linux uses don't like that.
case ${GRUB_DEVICE} in
/dev/loop/*|/dev/loop[0-9])
GRUB_DEVICE=`losetup ${GRUB_DEVICE} | sed -e "s/^[^(]*(\([^)]\+\)).*/\1/"`
# We can't cope with devices loop-mounted from files here.
case ${GRUB_DEVICE} in
/dev/*) ;;
*) exit 0 ;;
esac
;;
esac
if [ "x${GRUB_DEVICE_UUID}" = "x" ] || [ "x${GRUB_DISABLE_LINUX_UUID}" = "xtrue" ] \
|| ! test -e "/dev/disk/by-uuid/${GRUB_DEVICE_UUID}" \
|| uses_abstraction "${GRUB_DEVICE}" lvm; then
LINUX_ROOT_DEVICE=${GRUB_DEVICE}
else
LINUX_ROOT_DEVICE=UUID=${GRUB_DEVICE_UUID}
fi
if [ "x`${grub_probe} --device ${GRUB_DEVICE} --target=fs 2>/dev/null || true`" = xbtrfs ] \
|| [ "x`stat -f --printf=%T /`" = xbtrfs ]; then
rootsubvol="`make_system_path_relative_to_its_root /`"
rootsubvol="${rootsubvol#/}"
if [ "x${rootsubvol}" != x ]; then
GRUB_CMDLINE_LINUX="rootflags=subvol=${rootsubvol} ${GRUB_CMDLINE_LINUX}"
fi
fi
linux_entry ()
{
os="$1"
version="$2"
recovery="$3"
args="$4"
modprobe="$5"
if [ x$modprobe = xfglrx ]; then
title="$(gettext_quoted "%s, with Linux %s (free radeon driver)")"
mod_opt="modprobe.blacklist=${modprobe} fglrx.disable=1"
else
title="$(gettext_quoted "%s, with Linux %s (fglrx driver)")"
mod_opt="modprobe.blacklist=${modprobe} radeon.disable=1 drm.disable=1"
fi
printf "menuentry '${title}' ${CLASS} {\n" "${os}" "${version}"
if ! ${recovery} ; then
save_default_entry | sed -e "s/^/\t/"
fi
# Use ELILO's generic "efifb" when it's known to be available.
# FIXME: We need an interface to select vesafb in case efifb can't be used.
if [ "x$GRUB_GFXPAYLOAD_LINUX" = x ]; then
cat << EOF
load_video
EOF
else
if [ "x$GRUB_GFXPAYLOAD_LINUX" != xtext ]; then
cat << EOF
load_video
EOF
fi
cat << EOF
set gfxpayload=$GRUB_GFXPAYLOAD_LINUX
EOF
fi
cat << EOF
insmod gzio
EOF
if [ x$dirname = x/ ]; then
if [ -z "${prepare_root_cache}" ]; then
prepare_root_cache="$(prepare_grub_to_access_device ${GRUB_DEVICE} | sed -e "s/^/\t/")"
fi
printf '%s\n' "${prepare_root_cache}"
else
if [ -z "${prepare_boot_cache}" ]; then
prepare_boot_cache="$(prepare_grub_to_access_device ${GRUB_DEVICE_BOOT} | sed -e "s/^/\t/")"
fi
printf '%s\n' "${prepare_boot_cache}"
fi
message="$(gettext_printf "Loading Linux %s ..." ${version})"
cat << EOF
echo '$message'
linux ${rel_dirname}/${basename} root=${linux_root_device_thisversion} ro ${mod_opt} ${args}
EOF
if test -n "${initrd}" ; then
message="$(gettext_printf "Loading initial ramdisk ...")"
cat << EOF
echo '$message'
initrd ${rel_dirname}/${initrd}
EOF
fi
cat << EOF
}
EOF
}
case x`uname -m` in
xi?86 | xx86_64)
list=`for i in /boot/vmlinuz-* /vmlinuz-* /boot/kernel-* ; do
if grub_file_is_not_garbage "$i" ; then echo -n "$i " ; fi
done` ;;
*)
list=`for i in /boot/vmlinuz-* /boot/vmlinux-* /vmlinuz-* /vmlinux-* /boot/kernel-* ; do
if grub_file_is_not_garbage "$i" ; then echo -n "$i " ; fi
done` ;;
esac
prepare_boot_cache=
prepare_root_cache=
while [ "x$list" != "x" ] ; do
linux=`version_find_latest $list`
echo "Found linux image: $linux" >&2
basename=`basename $linux`
dirname=`dirname $linux`
rel_dirname=`make_system_path_relative_to_its_root $dirname`
version=`echo $basename | sed -e "s,^[^0-9]*-,,g"`
alt_version=`echo $version | sed -e "s,\.old$,,g"`
linux_root_device_thisversion="${LINUX_ROOT_DEVICE}"
initrd=
for i in "initrd.img-${version}" "initrd-${version}.img" \
"initrd-${version}" "initramfs-${version}.img" \
"initrd.img-${alt_version}" "initrd-${alt_version}.img" \
"initrd-${alt_version}" "initramfs-${alt_version}.img" \
"initramfs-genkernel-${version}" \
"initramfs-genkernel-${alt_version}"; do
if test -e "${dirname}/${i}" ; then
initrd="$i"
break
fi
done
config=
for i in "${dirname}/config-${version}" "${dirname}/config-${alt_version}" "/etc/kernels/kernel-config-${version}" ; do
if test -e "${i}" ; then
config="${i}"
break
fi
done
initramfs=
if test -n "${config}" ; then
initramfs=`grep CONFIG_INITRAMFS_SOURCE= "${config}" | cut -f2 -d= | tr -d \"`
fi
if test -n "${initrd}" ; then
echo "Found initrd image: ${dirname}/${initrd}" >&2
elif test -z "${initramfs}" ; then
# "UUID=" magic is parsed by initrd or initramfs. Since there's
# no initrd or builtin initramfs, it can't work here.
linux_root_device_thisversion=${GRUB_DEVICE}
fi
linux_entry "${OS}" "${version}" false "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}" "drm,radeon"
linux_entry "${OS}" "${version}" false "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}" "fglrx"
list=`echo $list | tr ' ' '\n' | grep -vx $linux | tr '\n' ' '`
done
Wrapper to launch proper X with correct GL configuration (debian). The script need to be executed by the Display Manager like lightdm.
Code:
#!/bin/sh
if `lsmod | grep -q "^fglrx\b"`; then
update-alternatives --set glx /usr/lib/fglrx
exec /usr/bin/X -config xorg-fglrx.conf -nolisten tcp "$@"
else
update-alternatives --set glx /usr/lib/mesa-diverted
exec /usr/bin/X -config xorg-radeon.conf -nolisten tcp "$@"
fi
For an unknow reason, on my PC I need to force the loading of the radeon driver.
So add the following line at the end of /etc/modules
Code:
# Force the loading of radeon in the boot except if it is disabled
# I think I got some weird mix between UMS/KMS
# UMS is dropped in ddx(7.X.X) and Kernel 3.9 (UMS is deprecated) (or maybe: configure the kernel => CONFIG_DRM_RADEON_KMS)
# Note: When it works better, disable could potentially be cleaned of
# /etc/grub.d/40_linux_multi_GPU
radeon