#!/bin/bash
# brave-vulkan — launch Brave with the PanVk-Bifrost Vulkan compositor on
# Bifrost SBCs (PineTab2 / Mali-G52 r1 MC1 and similar).
#
# Side-steps the GL stack failures stock Brave hits on Bifrost
# (the README "Consumer-side benefit" path of the panvk-bifrost campaign).
#
# Provided by the mesa-panvk-bifrost package. See:
#   /usr/share/doc/mesa-panvk-bifrost/README
#   ~/src/panvk-bifrost/phase8_iteration{9,10}_close.md
#
# Usage: brave-vulkan [brave args...]
# Equivalent to: brave [VULKAN_FLAGS] [your args]
#
# iter10 changes vs iter9:
#   - dropped VK_ICD_FILENAMES env (ICD now at /usr/share/vulkan/icd.d/
#     with '00-' prefix so the Vulkan loader auto-picks ours first)
#   - dropped --no-sandbox / --disable-gpu-sandbox (env vars survive the
#     GPU sandbox boundary, no bypass needed)

set -e

# Pin the Vulkan ICD selection to our package's ICD. The Vulkan loader's
# readdir-order in /usr/share/vulkan/icd.d/ is implementation-defined
# per Khronos LoaderDriverInterface — the '00-' filename prefix is NOT
# spec-backed. VK_LOADER_DRIVERS_SELECT short-circuits the directory
# enumeration and picks our ICD deterministically. (Phase 5 review
# hardening, iter10.)
export VK_LOADER_DRIVERS_SELECT='00-panvk-bifrost*'

# PanVk's "I know it's not conformant" gate — the patched driver still
# refuses to enumerate Bifrost without this env var (upstream Mesa choice
# for v6/v7, kept for compatibility).
export PAN_I_WANT_A_BROKEN_VULKAN_DRIVER=1

# Override apiVersion to 1.2 — ANGLE (Chromium's GL stack) requires
# device.apiVersion >= 1.1. Source patches don't move get_api_version()'s
# PAN_ARCH>=10 hardcode; the env var override does.
export MESA_VK_VERSION_OVERRIDE=1.2

# Find the live Plasma session's Xauthority. On a fresh boot the suffix
# is randomized; pgrep the Xwayland args to find the current one.
if [ -z "${XAUTHORITY:-}" ]; then
    XAUTHF=$(pgrep -fa Xwayland 2>/dev/null | grep -oE "/run/user/$(id -u)/xauth_[A-Za-z0-9]+" | head -1)
    if [ -n "$XAUTHF" ]; then
        export XAUTHORITY="$XAUTHF"
    fi
fi

# Standard session env if not already set
: "${XDG_RUNTIME_DIR:=/run/user/$(id -u)}"
export XDG_RUNTIME_DIR

# Default to the active Plasma Wayland session if WAYLAND_DISPLAY unset
: "${WAYLAND_DISPLAY:=wayland-0}"
export WAYLAND_DISPLAY

# Default to the XWayland :1 unless DISPLAY is set
: "${DISPLAY:=:1}"
export DISPLAY

exec brave \
    --use-gl=disabled \
    --enable-features=Vulkan \
    --use-vulkan=native \
    --ozone-platform=x11 \
    --ignore-gpu-blocklist \
    "$@"
