Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/data/data/com.termux/files/usr/bin/bash
- # ensure you have the packages for virgl_test_server and mesa zink installed.
- keep_server=false
- debug_mode=false
- only_server=false
- kill_mode=false
- virgl_pid=""
- gl_version_override="4.0" # Default to 4.0
- gles_version_override="3.2"
- args=()
- in_proot=false
- # Detect if running inside proot-distro (adapted from tx11start)
- TRACER_PID=$(grep TracerPid "/proc/$$/status" | cut -d $'\t' -f 2)
- if [ "$TRACER_PID" != 0 ]; then
- TRACER_NAME=$(grep Name "/proc/${TRACER_PID}/status" | cut -d $'\t' -f 2)
- if [ "$TRACER_NAME" = "proot" ]; then
- in_proot=true
- fi
- fi
- unset TRACER_PID TRACER_NAME
- function show_accelerate_help() {
- echo -e "\nUsage: accelerate [OPTIONS] COMMAND [ARGS...]\n"
- echo "Options:"
- echo " --keep-server Keep virgl_test_server running after the command exits (only applies when not in proot)."
- echo " --only-server Start virgl_test_server and keep it running, then exit (only applies when not in proot)."
- echo " --kill Unset accelerate environment variables and kill any running virgl_test_server processes." # Added --kill
- echo " --debug Enable verbose debugging for Mesa, Zink, and Vulkan."
- echo " --gl-version VER Override OpenGL version (e.g., 3.3, 4.0, 4.3COMPAT). Default: 4.0"
- echo " --gles-version VER Override OpenGL ES version (e.g., 3.0, 3.2). Default: 3.2"
- echo " --help Display this help message."
- echo ""
- echo "Note: If running inside a proot-distro, ensure virgl_test_server is already running in Termux host."
- echo " Also, you must bind-mount the X11 socket directory when starting proot-distro."
- echo "Example:"
- echo " accelerate --only-server"
- echo " accelerate --debug firefox"
- echo " accelerate --kill"
- echo " proot-distro login ubuntu --bind /data/data/com.termux/files/usr/tmp/.X11-unix:/tmp/.X11-unix -- accelerate glmark2"
- exit 0
- }
- # Parse arguments for accelerate script
- while (($# >= 1)); do
- case "$1" in
- --keep-server)
- keep_server=true
- ;;
- --only-server)
- only_server=true
- ;;
- --kill) # Handle --kill option
- kill_mode=true
- ;;
- --debug)
- debug_mode=true
- ;;
- --gl-version)
- shift
- gl_version_override="$1"
- ;;
- --gles-version)
- shift
- gles_version_override="$1"
- ;;
- --help)
- show_accelerate_help
- ;;
- *)
- args+=("$1") # Collect other arguments for the command
- ;;
- esac
- shift
- done
- # If --kill is used, perform cleanup and exit
- if $kill_mode; then
- echo "Unsetting accelerate environment variables..."
- unset MESA_NO_ERROR
- unset MESA_GL_VERSION_OVERRIDE
- unset MESA_GLES_VERSION_OVERRIDE
- unset ZINK_DESCRIPTORS
- unset VK_ICD_FILENAMES
- unset MESA_SHADER_CACHE
- unset MESA_SHADER_CACHE_DISABLE
- unset vblank_mode
- unset GALLIUM_DRIVER
- unset DISPLAY
- unset MESA_DEBUG
- unset ZINK_DEBUG
- unset VK_LOADER_DEBUG
- echo "Checking for running virgl_test_server processes..."
- if pgrep -x "virgl_test_server" > /dev/null; then
- echo "Killing virgl_test_server processes..."
- pkill -x "virgl_test_server"
- sleep 1 # Give it a moment to terminate
- if ! pgrep -x "virgl_test_server" > /dev/null; then
- echo "virgl_test_server processes killed successfully."
- else
- echo "Warning: Some virgl_test_server processes may still be running." >&2
- fi
- else
- echo "No virgl_test_server processes found running."
- fi
- exit 0
- fi
- # If --only-server is used, ensure no other command is executed
- if $only_server; then
- if [ ${#args[@]} -ne 0 ]; then
- echo "Error: --only-server cannot be used with other commands." >&2
- show_accelerate_help
- fi
- if $in_proot; then
- echo "Error: --only-server cannot be used inside a proot-distro. Start virgl_test_server in Termux host." >&2
- exit 1
- fi
- fi
- # If no command is provided and --only-server is not used, show help
- if ! $only_server && [ ${#args[@]} -eq 0 ]; then
- show_accelerate_help
- fi
- # Handle virgl_test_server startup based on proot status and --only-server option
- if $in_proot; then
- echo "Running inside proot-distro. Please ensure virgl_test_server is running in Termux host." >&2
- echo "Also, ensure you have bind-mounted the X11 socket directory (e.g., --bind /data/data/com.termux/files/usr/tmp/.X11-unix:/tmp/.X11-unix)." >&2
- else
- # Check if virgl_test_server is running
- if ! pgrep -x "virgl_test_server" > /dev/null; then
- echo "Starting virgl_test_server for GPU acceleration..."
- if $debug_mode; then
- virgl_test_server --use-egl-surfaceless --use-gles &
- else
- virgl_test_server --use-egl-surfaceless --use-gles >/dev/null 2>&1 &
- fi
- virgl_pid=$! # Store the PID of the newly started server
- sleep 1 # Give it a moment to start
- chmod -R 1777 /data/data/com.termux/files/usr/tmp/.virgl_test #fix for lost connection to server error?
- # Check if virgl_test_server actually started
- if ! ps -p $virgl_pid > /dev/null; then
- echo "Error: virgl_test_server failed to start. GPU acceleration may not be available." >&2
- if ! $debug_mode; then
- echo "Try running with --debug for more information." >&2
- fi
- exit 1
- fi
- else
- chmod -R 1777 /data/data/com.termux/files/usr/tmp/.virgl_test #fix for lost connection to server error?
- echo "virgl_test_server is already running."
- fi
- # If --only-server is used, we're done here. The server will stay running.
- if $only_server; then
- echo "virgl_test_server is running with PID: $(pgrep -x virgl_test_server)"
- exit 0
- fi
- # If we started virgl_test_server and --keep-server is not set, kill it on exit
- if [[ -n "$virgl_pid" ]] && ! $keep_server; then
- trap "kill $virgl_pid >/dev/null 2>&1" EXIT
- fi
- fi
- # Set environment variables for GPU acceleration
- export MESA_NO_ERROR=1
- export MESA_GL_VERSION_OVERRIDE="$gl_version_override"
- export MESA_GLES_VERSION_OVERRIDE="$gles_version_override"
- export ZINK_DESCRIPTORS=lazy
- export VK_ICD_FILENAMES=/data/data/com.termux/files/usr/share/vulkan/icd.d/wrapper_icd.aarch64.json
- export MESA_SHADER_CACHE=512MB
- export MESA_SHADER_CACHE_DISABLE=false
- export vblank_mode=0
- export GALLIUM_DRIVER=zink
- # Ensure DISPLAY is set for X applications (even in proot, if bind-mounted)
- export DISPLAY=:0
- if $debug_mode; then
- export MESA_DEBUG=1
- export ZINK_DEBUG=1
- export VK_LOADER_DEBUG=all
- echo "--- Debugging enabled ---"
- echo "MESA_GL_VERSION_OVERRIDE: $MESA_GL_VERSION_OVERRIDE"
- echo "MESA_GLES_VERSION_OVERRIDE: $MESA_GLES_VERSION_OVERRIDE"
- if [[ -n "$virgl_pid" ]]; then
- echo "virgl_test_server PID (started by accelerate): $virgl_pid"
- else
- echo "virgl_test_server PID (not started by accelerate): (check host Termux)"
- fi
- echo "Running in proot-distro: $in_proot"
- echo "DISPLAY: $DISPLAY"
- echo "-------------------------"
- fi
- # Run the thing
- exec "${args[@]}"
Advertisement
Add Comment
Please, Sign In to add comment