#!/bin/sh
# Run one ALT graphics client against the isolated MCom03 PVR userspace stack.
set -eu

ROOT=${PVR_XORG_ROOT:-/opt/mcom03-pvr-xorg}
MODE=gles
DISPLAY_NUM=${DISPLAY:-:1}

usage() {
    cat <<'EOF'
Usage: pvr-run [--gles|--gl4es] [--display :N] COMMAND [ARGUMENT...]

  --gles       Use the native PVR EGL/OpenGL ES stack (default).
  --gl4es      Translate desktop OpenGL/GLX calls through GL4ES to PVR GLES.
  --display    Select the vendor Xorg display (default: inherited DISPLAY or :1).

Examples:
  pvr-run eglinfo -B
  pvr-run es2_info
  pvr-run es2gears
  pvr-run glmark2-es2 --visual-config id=7 --size 800x600
  pvr-run --gl4es glxinfo -B
  pvr-run --gl4es glxgears -info
EOF
}

while [ "$#" -gt 0 ]; do
    case "$1" in
        --gles)
            MODE=gles
            shift
            ;;
        --gl4es)
            MODE=gl4es
            shift
            ;;
        --display)
            shift
            [ "$#" -gt 0 ] || { echo "--display needs a value" >&2; exit 64; }
            DISPLAY_NUM=$1
            shift
            ;;
        --)
            shift
            break
            ;;
        -h|--help)
            usage
            exit 0
            ;;
        *)
            break
            ;;
    esac
done

[ "$#" -gt 0 ] || { usage >&2; exit 64; }
[ -d "$ROOT/usr/local/lib/dri" ] ||
    { echo "PVR runtime is absent under $ROOT" >&2; exit 1; }

export DISPLAY="$DISPLAY_NUM"
export PATH="$ROOT/usr/bin:$ROOT/usr/local/bin:/usr/bin:/bin"
export LIBGL_DRIVERS_PATH="$ROOT/usr/local/lib/dri"
export FONTCONFIG_PATH="$ROOT/usr/local/etc/fonts"
unset LIBGL_ALWAYS_SOFTWARE

case "$MODE" in
    gles)
        export LD_LIBRARY_PATH="$ROOT/vendor/lib:$ROOT/usr/local/lib"
        ;;
    gl4es)
        [ -f "$ROOT/gl4es/lib/libGL.so.1" ] ||
            { echo "GL4ES runtime is absent under $ROOT" >&2; exit 1; }
        export LD_LIBRARY_PATH="$ROOT/gl4es/lib:$ROOT/vendor/lib:$ROOT/usr/local/lib"
        export LIBGL_EGL="$ROOT/usr/local/lib/libEGL.so.1"
        export LIBGL_GLES="$ROOT/vendor/lib/libGLESv2.so"
        export LIBGL_ES=2
        export LIBGL_FPS="${LIBGL_FPS:-1}"
        ;;
esac

exec "$@"
