OPENGL drivers support for PCSX2
#21
gregory is making a lot of progress recently... Maybe you don't even need to wait one year =D
Reply

Sponsored links

#22
I'll look forward to it Smile I was betting that all the slowdowns were due to limited hardware acceleration... I suppose you can still argue about the gaps:

Code:
INFO: GL_ARB_separate_shader_objects is not supported
INFO: GL_ARB_gpu_shader5 is not supported
INFO: GL_ARB_shader_image_load_store is not supported
INFO: GL_ARB_clear_texture is not supported
INFO: GL_ARB_buffer_storage is not supported
INFO: GL_ARB_shader_subroutine is not supported
INFO: GL_ARB_explicit_uniform_location is not supported
INFO: GL_ARB_texture_storage is supported
INFO: GL_ARB_shading_language_420pack is supported
INFO: GL_ARB_multi_bind is not supported
INFO: GL_ARB_bindless_texture is not supported
INFO: GL_NV_depth_buffer_float is not supported

I guess those are OpenGL4 calls.

Played a bit of Gitaroo Man for the first time in a decade. Framerate needs to be steady 50 or 60fps to play it right, but it was pretty cool anyway.
Reply
#23
(05-24-2014, 12:43 AM)PastGamer Wrote: Once I sorted that out, I was able to run pcsx normally after some SPU2X configuration Smile I would like to donate £20 to you - do you have a Paypal address? Thanks for all your help - running this in the host OS is definitely an improvement.
I'm glad it is running now. I personally don't have paypal but you can give a donation to the project. Your generosity is deeply appreciated.
http://forums.pcsx2.net/donate.php

(05-24-2014, 12:43 AM)PastGamer Wrote: I'm very disappointed that even with OpenGL3.3, pcsx2 release build still fails to run GTA3 at normal framerate, and when smoke is on the screen, can easily get down to 25fps. In Final Fantasy X, Shiva's summon when she descends into the ice crystal slows down considerably too - I guess I'll need to wait another year or so to see if things have sped up enough to consider it a PlayStation 2 replacement (both pcsx2 and radeon improvements presumably).
Well nvidia driver is much more faster than Amd (catalyst) driver. Catalyst is faster than Radeon. Worst radeon is often CPU limited in Phoronix benchmark. My opengl is far from perfect but I can't do anythings for driver.

Quote:gregory is making a lot of progress recently... Maybe you don't even need to wait one year =D
Well gregory is working on others interesting topic at the moment. And Gregory doesn't have any free time recently due to a crazy hardware project at work Tongue2
Reply
#24
Donation made, although it really ought to go direct to you.

OK, I have been following Phoronix for a while now and the appearance is that radeon is supposed to almost be as fast as Catalyst for r600g - which then begs the question of how much faster NVIDIA's proprietary code is. I'll look out for comparisons in the future - this machine is a practical libre setup, so I'll never be running proprietary graphics drivers here.

Just out of interest, are you able to play GTA3 at full speed driving a beat up car smoking black smoke at the front?
Reply
#25
(05-24-2014, 11:38 AM)PastGamer Wrote: Donation made, although it really ought to go direct to you.
Thanks you very much.

(05-24-2014, 11:38 AM)PastGamer Wrote: OK, I have been following Phoronix for a while now and the appearance is that radeon is supposed to almost be as fast as Catalyst for r600g - which then begs the question of how much faster NVIDIA's proprietary code is. I'll look out for comparisons in the future - this machine is a practical libre setup, so I'll never be running proprietary graphics drivers here.

Just out of interest, are you able to play GTA3 at full speed driving a beat up car smoking black smoke at the front?
Hum I didn't check recent benchmark. Be aware that you need to measure the CPU perf of the driver, not GPU jobs. PCSX2 barely used the GPU actually (except if you set a massive internal resolutions). When I switched from an hd5770 to a GTX760, I got a 10-15 fps increase on colin mcrae 3 ! And I think it is only related to the CPU driver overhead. I'm sure you have a local friend to do some tests Smile
Reply
#26
(08-24-2012, 08:15 PM)gregory Wrote: 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=nameio games

<hr>
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 Wink )

Just install Mesa 10.6 Wink

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


<hr>
For intel GPU, you can get extension supported by mesa in
Code:
src/mesa/drivers/dri/intel/intel_extensions.
<table><tr>
<td>Generation</td>
<td>Name</td>
</tr>
<tr>
<td>7</td>
<td>ivy bridge</td>
</tr>
<tr>
<td>6</td>
<td>sandy bridge</td>
</tr>
<tr>
<td>5</td>
<td>ironlake alias HD graphics</td>
</tr>
<tr>
<td>4</td>
<td>latest GMA alias GMAX3n00, GMA4500, GMAX4500</td>
</tr>
<tr>
<td>3</td>
<td>older stuff and atom....</td>
</tr>
</table>

Radeon driver is a bit more tricky, you need to check gallium capability first:
Code:
src/mesa/state_tracker/st_extensions.c
Then capability in
Code:
src/gallium/drivers/r600/r600_pipe.c
src/gallium/drivers/r300/r300_screen.c


<hr>

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

thanks very much!
Reply




Users browsing this thread: 1 Guest(s)