paster10p

accelerate.sh

Aug 30th, 2025
38
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 7.13 KB | Source Code | 0 0
  1. #!/data/data/com.termux/files/usr/bin/bash
  2.  
  3. # ensure you have the packages for virgl_test_server and mesa zink installed.
  4. keep_server=false
  5. debug_mode=false
  6. only_server=false
  7. kill_mode=false
  8. virgl_pid=""
  9. gl_version_override="4.0" # Default to 4.0
  10. gles_version_override="3.2"
  11. args=()
  12. in_proot=false
  13.  
  14. # Detect if running inside proot-distro (adapted from tx11start)
  15. TRACER_PID=$(grep TracerPid "/proc/$$/status" | cut -d $'\t' -f 2)
  16. if [ "$TRACER_PID" != 0 ]; then
  17.     TRACER_NAME=$(grep Name "/proc/${TRACER_PID}/status" | cut -d $'\t' -f 2)
  18.     if [ "$TRACER_NAME" = "proot" ]; then
  19.         in_proot=true
  20.     fi
  21. fi
  22. unset TRACER_PID TRACER_NAME
  23.  
  24. function show_accelerate_help() {
  25.   echo -e "\nUsage: accelerate [OPTIONS] COMMAND [ARGS...]\n"
  26.   echo "Options:"
  27.   echo "  --keep-server      Keep virgl_test_server running after the command exits (only applies when not in proot)."
  28.   echo "  --only-server      Start virgl_test_server and keep it running, then exit (only applies when not in proot)."
  29.   echo "  --kill             Unset accelerate environment variables and kill any running virgl_test_server processes." # Added --kill
  30.   echo "  --debug            Enable verbose debugging for Mesa, Zink, and Vulkan."
  31.   echo "  --gl-version VER   Override OpenGL version (e.g., 3.3, 4.0, 4.3COMPAT). Default: 4.0"
  32.   echo "  --gles-version VER Override OpenGL ES version (e.g., 3.0, 3.2). Default: 3.2"
  33.   echo "  --help             Display this help message."
  34.   echo ""
  35.   echo "Note: If running inside a proot-distro, ensure virgl_test_server is already running in Termux host."
  36.   echo "      Also, you must bind-mount the X11 socket directory when starting proot-distro."
  37.   echo "Example:"
  38.   echo "  accelerate --only-server"
  39.   echo "  accelerate --debug firefox"
  40.   echo "  accelerate --kill"
  41.   echo "  proot-distro login ubuntu --bind /data/data/com.termux/files/usr/tmp/.X11-unix:/tmp/.X11-unix -- accelerate glmark2"
  42.   exit 0
  43. }
  44.  
  45. # Parse arguments for accelerate script
  46. while (($# >= 1)); do
  47.   case "$1" in
  48.   --keep-server)
  49.     keep_server=true
  50.     ;;
  51.   --only-server)
  52.     only_server=true
  53.     ;;
  54.   --kill) # Handle --kill option
  55.     kill_mode=true
  56.     ;;
  57.   --debug)
  58.     debug_mode=true
  59.     ;;
  60.   --gl-version)
  61.     shift
  62.     gl_version_override="$1"
  63.     ;;
  64.   --gles-version)
  65.     shift
  66.     gles_version_override="$1"
  67.     ;;
  68.   --help)
  69.     show_accelerate_help
  70.     ;;
  71.   *)
  72.     args+=("$1") # Collect other arguments for the command
  73.     ;;
  74.   esac
  75.   shift
  76. done
  77.  
  78. # If --kill is used, perform cleanup and exit
  79. if $kill_mode; then
  80.     echo "Unsetting accelerate environment variables..."
  81.     unset MESA_NO_ERROR
  82.     unset MESA_GL_VERSION_OVERRIDE
  83.     unset MESA_GLES_VERSION_OVERRIDE
  84.     unset ZINK_DESCRIPTORS
  85.     unset VK_ICD_FILENAMES
  86.     unset MESA_SHADER_CACHE
  87.     unset MESA_SHADER_CACHE_DISABLE
  88.     unset vblank_mode
  89.     unset GALLIUM_DRIVER
  90.     unset DISPLAY
  91.     unset MESA_DEBUG
  92.     unset ZINK_DEBUG
  93.     unset VK_LOADER_DEBUG
  94.  
  95.     echo "Checking for running virgl_test_server processes..."
  96.     if pgrep -x "virgl_test_server" > /dev/null; then
  97.         echo "Killing virgl_test_server processes..."
  98.         pkill -x "virgl_test_server"
  99.         sleep 1 # Give it a moment to terminate
  100.         if ! pgrep -x "virgl_test_server" > /dev/null; then
  101.             echo "virgl_test_server processes killed successfully."
  102.         else
  103.             echo "Warning: Some virgl_test_server processes may still be running." >&2
  104.         fi
  105.     else
  106.         echo "No virgl_test_server processes found running."
  107.     fi
  108.     exit 0
  109. fi
  110.  
  111. # If --only-server is used, ensure no other command is executed
  112. if $only_server; then
  113.     if [ ${#args[@]} -ne 0 ]; then
  114.         echo "Error: --only-server cannot be used with other commands." >&2
  115.         show_accelerate_help
  116.     fi
  117.     if $in_proot; then
  118.         echo "Error: --only-server cannot be used inside a proot-distro. Start virgl_test_server in Termux host." >&2
  119.         exit 1
  120.     fi
  121. fi
  122.  
  123. # If no command is provided and --only-server is not used, show help
  124. if ! $only_server && [ ${#args[@]} -eq 0 ]; then
  125.   show_accelerate_help
  126. fi
  127.  
  128. # Handle virgl_test_server startup based on proot status and --only-server option
  129. if $in_proot; then
  130.     echo "Running inside proot-distro. Please ensure virgl_test_server is running in Termux host." >&2
  131.     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
  132. else
  133.     # Check if virgl_test_server is running
  134.     if ! pgrep -x "virgl_test_server" > /dev/null; then
  135.         echo "Starting virgl_test_server for GPU acceleration..."
  136.         if $debug_mode; then
  137.             virgl_test_server --use-egl-surfaceless --use-gles &
  138.         else
  139.             virgl_test_server --use-egl-surfaceless --use-gles >/dev/null 2>&1 &
  140.         fi
  141.         virgl_pid=$! # Store the PID of the newly started server
  142.         sleep 1 # Give it a moment to start
  143.  
  144.     chmod -R 1777 /data/data/com.termux/files/usr/tmp/.virgl_test #fix for lost connection to server error?
  145.  
  146.         # Check if virgl_test_server actually started
  147.         if ! ps -p $virgl_pid > /dev/null; then
  148.             echo "Error: virgl_test_server failed to start. GPU acceleration may not be available." >&2
  149.             if ! $debug_mode; then
  150.                 echo "Try running with --debug for more information." >&2
  151.             fi
  152.             exit 1
  153.         fi
  154.     else
  155.     chmod -R 1777 /data/data/com.termux/files/usr/tmp/.virgl_test #fix for lost connection to server error?
  156.         echo "virgl_test_server is already running."
  157.     fi
  158.  
  159.     # If --only-server is used, we're done here. The server will stay running.
  160.     if $only_server; then
  161.         echo "virgl_test_server is running with PID: $(pgrep -x virgl_test_server)"
  162.         exit 0
  163.     fi
  164.  
  165.     # If we started virgl_test_server and --keep-server is not set, kill it on exit
  166.     if [[ -n "$virgl_pid" ]] && ! $keep_server; then
  167.         trap "kill $virgl_pid >/dev/null 2>&1" EXIT
  168.     fi
  169. fi
  170.  
  171. # Set environment variables for GPU acceleration
  172. export MESA_NO_ERROR=1
  173. export MESA_GL_VERSION_OVERRIDE="$gl_version_override"
  174. export MESA_GLES_VERSION_OVERRIDE="$gles_version_override"
  175. export ZINK_DESCRIPTORS=lazy
  176. export VK_ICD_FILENAMES=/data/data/com.termux/files/usr/share/vulkan/icd.d/wrapper_icd.aarch64.json
  177. export MESA_SHADER_CACHE=512MB
  178. export MESA_SHADER_CACHE_DISABLE=false
  179. export vblank_mode=0
  180. export GALLIUM_DRIVER=zink
  181.  
  182. # Ensure DISPLAY is set for X applications (even in proot, if bind-mounted)
  183. export DISPLAY=:0
  184.  
  185. if $debug_mode; then
  186.     export MESA_DEBUG=1
  187.     export ZINK_DEBUG=1
  188.     export VK_LOADER_DEBUG=all
  189.     echo "--- Debugging enabled ---"
  190.     echo "MESA_GL_VERSION_OVERRIDE: $MESA_GL_VERSION_OVERRIDE"
  191.     echo "MESA_GLES_VERSION_OVERRIDE: $MESA_GLES_VERSION_OVERRIDE"
  192.     if [[ -n "$virgl_pid" ]]; then
  193.         echo "virgl_test_server PID (started by accelerate): $virgl_pid"
  194.     else
  195.         echo "virgl_test_server PID (not started by accelerate): (check host Termux)"
  196.     fi
  197.     echo "Running in proot-distro: $in_proot"
  198.     echo "DISPLAY: $DISPLAY"
  199.     echo "-------------------------"
  200. fi
  201.  
  202. # Run the thing
  203. exec "${args[@]}"
  204.  
Tags: BASH
Advertisement
Add Comment
Please, Sign In to add comment