forked from marfrit/marfrit-packages
Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| a36cf85e06 | |||
| 489d6e3862 | |||
| 265bf669c8 | |||
| df09c1c55d | |||
| e8a5490d44 | |||
| ff9db4e273 | |||
| 108a3dabe6 |
@@ -1092,3 +1092,121 @@ jobs:
|
||||
- name: wipe secrets
|
||||
if: always()
|
||||
run: rm -f /root/.ssh/id_ed25519_hertz
|
||||
|
||||
# -------------------------------------------------------------------------
|
||||
# mesa-panvk-bifrost (aarch64 only) — patched Mesa libvulkan_panfrost.so
|
||||
# for Bifrost-gen Mali (panvk-bifrost campaign iter9). Co-installs at
|
||||
# /usr/lib/panvk-bifrost/ so stock mesa stays intact; opt-in via the
|
||||
# brave-vulkan launcher this package also ships.
|
||||
#
|
||||
# Build is slow (~30-60min on actrunner-aarch64): full Mesa-from-source.
|
||||
# Standalone job — no `needs:` since it doesn't depend on the fourier
|
||||
# codec stack. continue-on-error so a build hiccup doesn't block other
|
||||
# jobs in the same workflow run.
|
||||
# -------------------------------------------------------------------------
|
||||
mesa-panvk-bifrost-aarch64:
|
||||
runs-on: arch-aarch64
|
||||
continue-on-error: true
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: bootstrap runner (idempotent)
|
||||
run: |
|
||||
set -e
|
||||
retry() { for i in 1 2 3; do "$@" && return 0; rc=$?; echo "retry $i (exit=$rc)" >&2; sleep $((i*5)); done; return 1; }
|
||||
retry pacman -Syu --noconfirm --needed base-devel git rsync gnupg openssh sudo
|
||||
|
||||
- name: import signing key
|
||||
env:
|
||||
PRIV: ${{ secrets.MARFRIT_REPO_PRIVATE_KEY }}
|
||||
PASS: ${{ secrets.MARFRIT_REPO_PASSPHRASE }}
|
||||
run: |
|
||||
set -e
|
||||
gpgconf --homedir /root/.gnupg --kill all 2>/dev/null || true
|
||||
rm -rf /root/.gnupg /root/repo_pass
|
||||
mkdir -m700 -p /root/.gnupg
|
||||
printf '%s' "$PASS" > /root/repo_pass
|
||||
chmod 600 /root/repo_pass
|
||||
printf '%s\n' "$PRIV" | gpg --batch --import
|
||||
echo "92D5E96D8F63C75E4116AA1FF5C8C4603D0D250C:6:" | gpg --import-ownertrust
|
||||
|
||||
- name: install deploy ssh key
|
||||
env:
|
||||
KEY: ${{ secrets.MARFRIT_REPO_DEPLOY_KEY }}
|
||||
run: |
|
||||
mkdir -m700 -p /root/.ssh
|
||||
printf '%s\n' "$KEY" > /root/.ssh/id_ed25519
|
||||
chmod 600 /root/.ssh/id_ed25519
|
||||
ssh-keyscan -t ed25519 nc.reauktion.de > /root/.ssh/known_hosts 2>/dev/null
|
||||
|
||||
- name: makepkg mesa-panvk-bifrost
|
||||
run: |
|
||||
set -e
|
||||
rm -rf /tmp/build-mesa-panvk-bifrost
|
||||
cp -r arch/mesa-panvk-bifrost /tmp/build-mesa-panvk-bifrost
|
||||
chown -R builder:builder /tmp/build-mesa-panvk-bifrost
|
||||
cd /tmp/build-mesa-panvk-bifrost
|
||||
# MAKEFLAGS for parallel build; runner is multi-core.
|
||||
# --skipinteg because sha256sums=SKIP in PKGBUILD (matches the
|
||||
# fourier-fork PKGBUILD convention).
|
||||
sudo -u builder -H env MAKEFLAGS="-j60" \
|
||||
makepkg --nocheck --noconfirm --syncdeps --cleanbuild --skipinteg
|
||||
ls -la *.pkg.tar.* | grep -v "\.sig$"
|
||||
|
||||
- name: sign mesa-panvk-bifrost
|
||||
run: |
|
||||
set -e
|
||||
cd /tmp/build-mesa-panvk-bifrost
|
||||
for f in *.pkg.tar.xz *.pkg.tar.zst *.pkg.tar.gz; do
|
||||
[ -f "$f" ] || continue
|
||||
gpg --batch --pinentry-mode loopback --passphrase-file /root/repo_pass \
|
||||
--detach-sign --yes -u 92D5E96D8F63C75E4116AA1FF5C8C4603D0D250C "$f"
|
||||
done
|
||||
|
||||
- name: update aarch64 repo db
|
||||
run: |
|
||||
set -e
|
||||
mkdir -p /tmp/arch-stage-mesa-panvk
|
||||
cd /tmp/arch-stage-mesa-panvk
|
||||
rm -f *
|
||||
for f in marfrit.db.tar.gz marfrit.db.tar.gz.sig marfrit.files.tar.gz marfrit.files.tar.gz.sig; do
|
||||
curl -sSLf "https://packages.reauktion.de/arch/aarch64/$f" -o "$f" || rm -f "$f"
|
||||
done
|
||||
for ext in xz zst gz; do
|
||||
ls /tmp/build-mesa-panvk-bifrost/*.pkg.tar.$ext 2>/dev/null && \
|
||||
mv /tmp/build-mesa-panvk-bifrost/*.pkg.tar.$ext /tmp/build-mesa-panvk-bifrost/*.pkg.tar.$ext.sig .
|
||||
done || true
|
||||
export GNUPGHOME=/root/.gnupg
|
||||
printf 'pinentry-mode loopback\npassphrase-file /root/repo_pass\n' > /root/.gnupg/gpg.conf
|
||||
printf 'allow-loopback-pinentry\n' > /root/.gnupg/gpg-agent.conf
|
||||
gpg-connect-agent reloadagent /bye
|
||||
pkgs=()
|
||||
for ext in xz zst gz; do
|
||||
for f in *.pkg.tar.$ext; do [ -f "$f" ] && pkgs+=("$f"); done
|
||||
done
|
||||
if [ -f marfrit.db.tar.gz ]; then
|
||||
for f in "${pkgs[@]}"; do
|
||||
name=$(echo "$f" | sed -E 's/-[0-9].*//')
|
||||
repo-remove --sign --key 92D5E96D8F63C75E4116AA1FF5C8C4603D0D250C \
|
||||
marfrit.db.tar.gz "$name" 2>/dev/null || true
|
||||
done
|
||||
fi
|
||||
repo-add --new --sign --key 92D5E96D8F63C75E4116AA1FF5C8C4603D0D250C \
|
||||
--verify marfrit.db.tar.gz "${pkgs[@]}"
|
||||
ln -sf marfrit.db.tar.gz marfrit.db
|
||||
ln -sf marfrit.files.tar.gz marfrit.files
|
||||
ln -sf marfrit.db.tar.gz.sig marfrit.db.sig
|
||||
rm -f marfrit.files.sig
|
||||
|
||||
- name: publish to aarch64
|
||||
run: |
|
||||
set -e
|
||||
retry() { for i in 1 2 3; do "$@" && return 0; rc=$?; echo "retry $i (exit=$rc)" >&2; sleep $((i*5)); done; return 1; }
|
||||
cd /tmp/arch-stage-mesa-panvk
|
||||
retry rsync -avL --copy-unsafe-links \
|
||||
-e 'ssh -i /root/.ssh/id_ed25519' \
|
||||
./ mfritsche@nc.reauktion.de:arch/aarch64/
|
||||
|
||||
- name: wipe secrets
|
||||
if: always()
|
||||
run: rm -f /root/repo_pass /root/.ssh/id_ed25519
|
||||
|
||||
@@ -18,10 +18,10 @@ _module=daedalus_v4l2
|
||||
|
||||
# Same pin as arch/daedalus-v4l2 — keep kernel module + daemon
|
||||
# bit-versioned together so the chardev wire protocol stays in sync.
|
||||
_commit=f55b2cd002afdfd08f3c093627317f92e4929074
|
||||
_commit=481279c9bffd19e32c8f3299897e9b63fc5a24aa
|
||||
|
||||
pkgver=0.1.0.r16.f55b2cd
|
||||
pkgrel=2 # pkgrel=2 — corrected hallucinated _commit (was f55b2cdab... not in repo)
|
||||
pkgver=0.1.0.r18.481279c
|
||||
pkgrel=1 # reset for new upstream pin (481279c — Phase 8.13 close)
|
||||
pkgdesc="V4L2 stateless decoder shim kernel module (DKMS) — Pi 5 / CM5"
|
||||
arch=('any')
|
||||
url="https://git.reauktion.de/reauktion/daedalus-v4l2"
|
||||
|
||||
@@ -16,17 +16,17 @@
|
||||
pkgname=daedalus-v4l2
|
||||
_upstreampkg=daedalus-v4l2
|
||||
|
||||
# Pin the daedalus-v4l2 tip. f55b2cd = "Phase 8.13: byte-exact end-to-
|
||||
# Pin the daedalus-v4l2 tip. 481279c = "Phase 8.13: byte-exact end-to-
|
||||
# end via libva (consumer target hit)" — first commit where the full
|
||||
# ffmpeg -hwaccel vaapi → libva → /dev/video0 → daemon path lands a
|
||||
# pixel-correct decoded frame back in ffmpeg. Promote to a later pin
|
||||
# only after a future phase closes cleanly.
|
||||
_commit=f55b2cd002afdfd08f3c093627317f92e4929074
|
||||
_commit=481279c9bffd19e32c8f3299897e9b63fc5a24aa
|
||||
|
||||
# 0.1.0 (pre-1.0) + commit count + short sha. Bump the .Y on each
|
||||
# Phase 8.x close. pkgver() recomputes at build time.
|
||||
pkgver=0.1.0.r16.f55b2cd
|
||||
pkgrel=2 # pkgrel=2 — corrected hallucinated _commit (was f55b2cdab... not in repo)
|
||||
pkgver=0.1.0.r18.481279c
|
||||
pkgrel=1 # reset for new upstream pin (481279c — Phase 8.13 close)
|
||||
pkgdesc="Userspace daemon for the daedalus-v4l2 V4L2 stateless decoder shim (VP9/AV1/H.264 on Pi 5 / CM5)"
|
||||
arch=('aarch64')
|
||||
url="https://git.reauktion.de/reauktion/daedalus-v4l2"
|
||||
@@ -40,9 +40,12 @@ depends=('ffmpeg' 'libdrm')
|
||||
makedepends=('cmake' 'ninja' 'pkgconf' 'git' 'ffmpeg')
|
||||
optdepends=('daedalus-v4l2-dkms: kernel module providing /dev/video0 + /dev/daedalus-v4l2'
|
||||
'libva-v4l2-request-fourier: VA-API consumer routing through this daemon')
|
||||
install="${pkgname}.install"
|
||||
|
||||
source=("git+https://git.reauktion.de/reauktion/daedalus-v4l2.git#commit=${_commit}")
|
||||
sha256sums=('SKIP')
|
||||
source=("git+https://git.reauktion.de/reauktion/daedalus-v4l2.git#commit=${_commit}"
|
||||
"${pkgname}.install")
|
||||
sha256sums=('SKIP'
|
||||
'SKIP')
|
||||
|
||||
pkgver() {
|
||||
cd "${srcdir}/${_upstreampkg}"
|
||||
@@ -83,6 +86,14 @@ package() {
|
||||
install -Dm644 include/daedalus_v4l2_proto.h \
|
||||
"${pkgdir}/usr/include/daedalus_v4l2_proto.h"
|
||||
|
||||
# systemd unit + module autoload — without these the daemon never
|
||||
# starts and the libva/VAAPI consumer's REQ_DECODE has nobody on
|
||||
# the other end of /dev/daedalus-v4l2.
|
||||
install -Dm644 packaging/systemd/daedalus-v4l2.service \
|
||||
"${pkgdir}/usr/lib/systemd/system/daedalus-v4l2.service"
|
||||
install -Dm644 packaging/systemd/daedalus-v4l2.modules-load \
|
||||
"${pkgdir}/usr/lib/modules-load.d/daedalus-v4l2.conf"
|
||||
|
||||
# Documentation
|
||||
install -Dm644 README.md \
|
||||
"${pkgdir}/usr/share/doc/${pkgname}/README.md"
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
# post_install / post_upgrade for daedalus-v4l2.
|
||||
#
|
||||
# Enables (but doesn't start — leave that to the operator) the
|
||||
# daemon service so it comes up on next boot. Reloads systemd
|
||||
# so the new unit file is visible. Triggers modules-load so the
|
||||
# kernel module loads without a reboot if daedalus-v4l2-dkms is
|
||||
# also installed.
|
||||
|
||||
_activate() {
|
||||
systemctl daemon-reload >/dev/null 2>&1 || true
|
||||
systemctl enable daedalus-v4l2.service >/dev/null 2>&1 || true
|
||||
|
||||
# Trigger /usr/lib/modules-load.d/daedalus-v4l2.conf without a
|
||||
# reboot. Safe if the module is already loaded.
|
||||
systemd-modules-load >/dev/null 2>&1 || true
|
||||
|
||||
cat >&2 <<EOF
|
||||
==> daedalus-v4l2: service enabled, will start on next boot.
|
||||
==> To start now (requires the kernel module to be loaded):
|
||||
==> sudo systemctl start daedalus-v4l2.service
|
||||
==> Verify decode path:
|
||||
==> journalctl -u daedalus-v4l2.service -f
|
||||
EOF
|
||||
}
|
||||
|
||||
post_install() {
|
||||
_activate
|
||||
}
|
||||
|
||||
post_upgrade() {
|
||||
_activate
|
||||
systemctl try-restart daedalus-v4l2.service >/dev/null 2>&1 || true
|
||||
}
|
||||
|
||||
pre_remove() {
|
||||
systemctl stop daedalus-v4l2.service >/dev/null 2>&1 || true
|
||||
systemctl disable daedalus-v4l2.service >/dev/null 2>&1 || true
|
||||
}
|
||||
|
||||
post_remove() {
|
||||
systemctl daemon-reload >/dev/null 2>&1 || true
|
||||
}
|
||||
@@ -13,7 +13,7 @@
|
||||
|
||||
pkgname=firefox-fourier
|
||||
pkgver=150.0.1
|
||||
pkgrel=6
|
||||
pkgrel=7
|
||||
pkgdesc='Firefox with V4L2 stateless HW video decode unlocked for mainline Linux Rockchip'
|
||||
arch=('aarch64' 'x86_64')
|
||||
url='https://www.mozilla.org/firefox'
|
||||
@@ -91,8 +91,11 @@ source=(
|
||||
# Vendor-default prefs that gate the patched VAAPI path on RK3399 —
|
||||
# widget.dmabuf.force-enabled etc. See marfrit-packages#8 for evidence.
|
||||
'rockchip-fourier-defaults.js'
|
||||
# Plasma/GNOME start-menu entry — categorises under Internet, picks the
|
||||
# 128px firefox icon shipped under /usr/lib/firefox-fourier/browser/.
|
||||
'firefox-fourier.desktop'
|
||||
)
|
||||
sha256sums=('SKIP' 'SKIP' 'SKIP' 'SKIP' 'SKIP' 'SKIP' 'SKIP' 'SKIP' 'SKIP' 'SKIP' 'SKIP')
|
||||
sha256sums=('SKIP' 'SKIP' 'SKIP' 'SKIP' 'SKIP' 'SKIP' 'SKIP' 'SKIP' 'SKIP' 'SKIP' 'SKIP' 'SKIP')
|
||||
|
||||
prepare() {
|
||||
cd "${srcdir}/firefox-${pkgver}"
|
||||
@@ -180,4 +183,11 @@ LAUNCHER
|
||||
# VAAPI_VLD` + dmabuf surfaces locking end-to-end.
|
||||
install -Dm644 "${srcdir}/rockchip-fourier-defaults.js" \
|
||||
"${pkgdir}/usr/lib/firefox-fourier/defaults/preferences/rockchip-fourier-defaults.js"
|
||||
|
||||
# Desktop entry — fileless install would leave the package without a
|
||||
# start-menu entry (stock firefox.desktop disappears when our `provides`
|
||||
# replaces stock firefox). Plasma & GNOME pick this up via the
|
||||
# `Categories=Network;WebBrowser;` line → "Internet" submenu.
|
||||
install -Dm644 "${srcdir}/firefox-fourier.desktop" \
|
||||
"${pkgdir}/usr/share/applications/firefox-fourier.desktop"
|
||||
}
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
[Desktop Entry]
|
||||
Version=1.0
|
||||
Type=Application
|
||||
Name=Firefox (Fourier — V4L2 HW decode)
|
||||
GenericName=Web Browser
|
||||
Comment=Browse the Web with V4L2 stateless HW video decode (RK3588/RK3566)
|
||||
Exec=/usr/bin/firefox-fourier %u
|
||||
Icon=/usr/lib/firefox-fourier/browser/chrome/icons/default/default128.png
|
||||
Terminal=false
|
||||
StartupNotify=true
|
||||
StartupWMClass=firefox-fourier
|
||||
Categories=Network;WebBrowser;
|
||||
MimeType=text/html;text/xml;application/xhtml+xml;application/vnd.mozilla.xul+xml;application/rss+xml;application/rdf+xml;image/gif;image/jpeg;image/png;image/svg+xml;image/webp;image/avif;application/json;application/pdf;audio/flac;audio/ogg;audio/webm;video/ogg;video/webm;x-scheme-handler/http;x-scheme-handler/https;x-scheme-handler/chrome;x-scheme-handler/mailto;
|
||||
Actions=new-window;new-private-window;
|
||||
|
||||
[Desktop Action new-window]
|
||||
Name=Open a New Window
|
||||
Exec=/usr/bin/firefox-fourier --new-window %u
|
||||
|
||||
[Desktop Action new-private-window]
|
||||
Name=Open a New Private Window
|
||||
Exec=/usr/bin/firefox-fourier --private-window %u
|
||||
@@ -0,0 +1,57 @@
|
||||
From: claude-noether (on behalf of mfritsche)
|
||||
Date: 2026-05-19
|
||||
Subject: panvk: expose VK_KHR/EXT_robustness2 + nullDescriptor on Bifrost (PAN_ARCH 6/7)
|
||||
|
||||
Without this, Mesa's Zink driver refuses to use PanVk-Bifrost as its Vulkan
|
||||
backend, falling back silently to llvmpipe (software rasterizer) for all
|
||||
GL-via-Zink on Bifrost SBCs. That defeats the entire purpose of having a
|
||||
Vulkan driver on Bifrost — GL acceleration via Zink is the most natural
|
||||
near-term consumer.
|
||||
|
||||
panvk_vX_nir_lower_descriptors.c:1309 and panvk_vX_shader.c:1355 already
|
||||
plumb dev->vk.enabled_features.nullDescriptor arch-agnostically — the gate
|
||||
at panvk_vX_physical_device.c was set conservatively when Bifrost was
|
||||
unmaintained, not because of hardware incapability.
|
||||
|
||||
iter1–7 of the panvk-bifrost campaign proved fundamental driver functions
|
||||
on Mali-G52 r1 MC1 (PAN_ARCH=7). This patch is the iter8 follow-up.
|
||||
|
||||
robustBufferAccess2 and robustImageAccess2 are NOT flipped — they're
|
||||
independent rb2 features Zink doesn't require, gated differently
|
||||
(robustBufferAccess2 = PAN_ARCH >= 11, robustImageAccess2 = false), and
|
||||
out of scope for iter8.
|
||||
|
||||
---
|
||||
src/panfrost/vulkan/panvk_vX_physical_device.c | 6 +++---
|
||||
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/panfrost/vulkan/panvk_vX_physical_device.c b/src/panfrost/vulkan/panvk_vX_physical_device.c
|
||||
--- a/src/panfrost/vulkan/panvk_vX_physical_device.c
|
||||
+++ b/src/panfrost/vulkan/panvk_vX_physical_device.c
|
||||
@@ -91,7 +91,7 @@ get_device_extensions(const struct panvk_physical_device *device,
|
||||
.KHR_pipeline_binary = true,
|
||||
.KHR_pipeline_executable_properties = true,
|
||||
.KHR_pipeline_library = true,
|
||||
- .KHR_robustness2 = PAN_ARCH >= 10,
|
||||
+ .KHR_robustness2 = true,
|
||||
.KHR_sampler_mirror_clamp_to_edge = true,
|
||||
.KHR_sampler_ycbcr_conversion = true,
|
||||
.KHR_separate_depth_stencil_layouts = true,
|
||||
@@ -168,7 +168,7 @@ get_device_extensions(const struct panvk_physical_device *device,
|
||||
.EXT_queue_family_foreign = true,
|
||||
.EXT_robustness = pan_arch(device->kmod.dev->props.gpu_id) >= 9,
|
||||
.EXT_image_robustness = true,
|
||||
- .EXT_robustness2 = PAN_ARCH >= 10,
|
||||
+ .EXT_robustness2 = true,
|
||||
.EXT_sampler_filter_minmax = PAN_ARCH >= 10,
|
||||
.EXT_scalar_block_layout = true,
|
||||
.EXT_separate_stencil_usage = true,
|
||||
@@ -493,7 +493,7 @@ get_device_features(const struct panvk_physical_device *device,
|
||||
/* VK_KHR_robustness2 */
|
||||
.robustBufferAccess2 = PAN_ARCH >= 11,
|
||||
.robustImageAccess2 = false,
|
||||
- .nullDescriptor = PAN_ARCH >= 10,
|
||||
+ .nullDescriptor = true,
|
||||
|
||||
/* VK_KHR_shader_clock */
|
||||
.shaderSubgroupClock = device->kmod.dev->props.gpu_can_query_timestamp,
|
||||
@@ -0,0 +1,47 @@
|
||||
From: claude-noether (on behalf of mfritsche)
|
||||
Date: 2026-05-20
|
||||
Subject: panvk: expose Vulkan 1.1 + 1.2 on Bifrost (PAN_ARCH 6/7)
|
||||
|
||||
ANGLE (Chromium's GL stack) requires apiVersion >= 1.1 to initialize. Without
|
||||
this, Brave / Chromium's GPU process fails at GL info collection:
|
||||
|
||||
vk_renderer.cpp:2659 (initialize): ANGLE Requires a minimum Vulkan device
|
||||
version of 1.1
|
||||
Display::initialize error 0: Internal Vulkan error (-9): The requested
|
||||
version of Vulkan is not supported by the driver
|
||||
|
||||
Stack-up with iter8's robustness2 patch enables ANGLE → PanVk-Bifrost →
|
||||
Skia (via --enable-features=Vulkan) on Bifrost SBCs.
|
||||
|
||||
PanVk-Bifrost already supports the bulk of 1.1-promoted features as extensions
|
||||
(multiview, maintenance1-3, descriptor update template, 16-bit storage,
|
||||
descriptor update template, sampler ycbcr, variable pointers, etc. — all
|
||||
visible in iter0 vulkaninfo). The version bump primarily bundles them.
|
||||
|
||||
Risk: Vulkan 1.1 has features beyond what iter1–7 exercised (protected memory,
|
||||
full subgroup ops). Specific app failures will be characterizable.
|
||||
|
||||
1.2 is also flipped — Brave's Vulkan path may want descriptor indexing,
|
||||
buffer device address, etc. (all listed in iter0 vulkaninfo as supported
|
||||
extensions, just gated as 1.0-with-extensions, not 1.2-core).
|
||||
|
||||
---
|
||||
src/panfrost/vulkan/panvk_vX_physical_device.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/panfrost/vulkan/panvk_vX_physical_device.c b/src/panfrost/vulkan/panvk_vX_physical_device.c
|
||||
--- a/src/panfrost/vulkan/panvk_vX_physical_device.c
|
||||
+++ b/src/panfrost/vulkan/panvk_vX_physical_device.c
|
||||
@@ -38,8 +38,8 @@ get_device_extensions(const struct panvk_physical_device *device,
|
||||
struct vk_device_extension_table *ext)
|
||||
{
|
||||
*ext = (struct vk_device_extension_table){
|
||||
- .KHR_8bit_storage = true,
|
||||
- .KHR_16bit_storage = true,
|
||||
- bool has_vk1_1 = PAN_ARCH >= 10;
|
||||
- bool has_vk1_2 = PAN_ARCH >= 10;
|
||||
+ .KHR_8bit_storage = true,
|
||||
+ .KHR_16bit_storage = true,
|
||||
+ bool has_vk1_1 = true;
|
||||
+ bool has_vk1_2 = true;
|
||||
*ext = (struct vk_device_extension_table){
|
||||
@@ -0,0 +1,165 @@
|
||||
# Maintainer: Markus Fritsche <fritsche.markus@gmail.com>
|
||||
#
|
||||
# mesa-panvk-bifrost — patched Mesa libvulkan_panfrost.so that exposes
|
||||
# Bifrost-gen Mali (Mali-G31/G52/G72/G76, PAN_ARCH 6/7) to Chromium-family
|
||||
# browsers' Vulkan compositor.
|
||||
#
|
||||
# Campaign: ~/src/panvk-bifrost/ — iter9 close (technical milestone
|
||||
# 2026-05-20, operator-confirmed Brave window). Goal close requires
|
||||
# this package built + published + installable per the
|
||||
# feedback_package_done_means_installable.md 3-point check.
|
||||
#
|
||||
# What it does:
|
||||
# - Builds Mesa 26.0.6 (matching ohm's stock mesa pkg) with two
|
||||
# patches against src/panfrost/vulkan/panvk_vX_physical_device.c:
|
||||
# (1) expose VK_KHR/EXT_robustness2 + nullDescriptor on PAN_ARCH 6/7
|
||||
# (2) set has_vk1_1/has_vk1_2 to true on Bifrost
|
||||
# - Installs the patched libvulkan_panfrost.so to /usr/lib/panvk-bifrost/
|
||||
# (NOT /usr/lib — co-installs alongside stock mesa).
|
||||
# - Registers a custom ICD JSON at a non-default path so the system
|
||||
# Vulkan loader only picks up our driver when VK_ICD_FILENAMES is set.
|
||||
# - Ships /usr/bin/brave-vulkan launcher that wires up env vars + flags.
|
||||
#
|
||||
# Co-existence: stock /usr/lib/libvulkan_panfrost.so is untouched. Stock
|
||||
# /usr/share/vulkan/icd.d/panfrost_icd.json is untouched. Users opt in
|
||||
# via brave-vulkan (or by setting VK_ICD_FILENAMES manually).
|
||||
#
|
||||
# Build target: arch-aarch64 runner via marfrit-packages Gitea Actions.
|
||||
# Mesa build is slow (~30-60min on Cortex-A55). Build deps installed
|
||||
# inside the runner via pacman -S in the workflow.
|
||||
|
||||
pkgname=mesa-panvk-bifrost
|
||||
_mesaver=26.0.6
|
||||
pkgver=26.0.6.r2
|
||||
pkgrel=2
|
||||
pkgdesc="Patched Mesa libvulkan_panfrost.so exposing Bifrost-gen Mali to Vulkan apps (panvk-bifrost campaign)"
|
||||
arch=('aarch64')
|
||||
url="https://github.com/marfrit/panvk-bifrost"
|
||||
license=('MIT')
|
||||
|
||||
# We co-install at /usr/lib/panvk-bifrost/ so no conflicts with stock mesa.
|
||||
# We DO provide a script that requires brave to be installed.
|
||||
depends=(
|
||||
'mesa' # for shared mesa runtime libs (libgallium-mesa etc.)
|
||||
'libdrm'
|
||||
'wayland'
|
||||
'libxcb'
|
||||
'libx11'
|
||||
'libxshmfence'
|
||||
'zlib'
|
||||
'zstd'
|
||||
'libdisplay-info'
|
||||
'expat'
|
||||
'systemd-libs' # libudev
|
||||
'spirv-tools'
|
||||
)
|
||||
optdepends=(
|
||||
'brave-bin: for the brave-vulkan launcher script'
|
||||
)
|
||||
makedepends=(
|
||||
'meson'
|
||||
'ninja'
|
||||
'pkgconf'
|
||||
'bison'
|
||||
'flex'
|
||||
'python'
|
||||
'python-yaml'
|
||||
'python-mako'
|
||||
'glslang'
|
||||
'spirv-tools'
|
||||
'llvm'
|
||||
'clang'
|
||||
'libclc'
|
||||
'spirv-llvm-translator'
|
||||
'vulkan-headers'
|
||||
'wayland-protocols'
|
||||
)
|
||||
|
||||
source=(
|
||||
"https://archive.mesa3d.org/mesa-${_mesaver}.tar.xz"
|
||||
"0001-panvk-expose-robustness2-nullDescriptor-bifrost.patch"
|
||||
"0002-panvk-expose-vulkan-1.1-1.2-on-bifrost.patch"
|
||||
"brave-vulkan"
|
||||
"icd.json"
|
||||
)
|
||||
sha256sums=(
|
||||
'1d3c3b8a8363b8cc354175bb4a684ad8b035211cc1d6fa17aeb9b9623c513f89' # mesa-26.0.6.tar.xz from archive.mesa3d.org, pinned 2026-05-20 (iter10)
|
||||
'SKIP'
|
||||
'SKIP'
|
||||
'SKIP'
|
||||
'SKIP'
|
||||
)
|
||||
|
||||
prepare() {
|
||||
cd "mesa-${_mesaver}"
|
||||
# iter8 patch: robustness2 + nullDescriptor exposure on Bifrost.
|
||||
# Three hunks in panvk_vX_physical_device.c. Apply via sed since
|
||||
# the upstream context drifts between Mesa releases and unified-diff
|
||||
# patching is brittle (we hit hunk-rejects during manual application).
|
||||
sed -i 's|\.KHR_robustness2 = PAN_ARCH >= 10,|.KHR_robustness2 = true,|' src/panfrost/vulkan/panvk_vX_physical_device.c
|
||||
sed -i 's|\.EXT_robustness2 = PAN_ARCH >= 10,|.EXT_robustness2 = true,|' src/panfrost/vulkan/panvk_vX_physical_device.c
|
||||
sed -i 's|\.nullDescriptor = PAN_ARCH >= 10,|.nullDescriptor = true,|' src/panfrost/vulkan/panvk_vX_physical_device.c
|
||||
# iter9 patch: bump api version to 1.1/1.2 for Bifrost. NOTE: this only
|
||||
# affects extension exposure flags, NOT the reported apiVersion (which
|
||||
# is set by get_api_version() further down and gated separately).
|
||||
# The brave-vulkan launcher sets MESA_VK_VERSION_OVERRIDE=1.2 at runtime
|
||||
# to deal with the latter — no source change needed for that path.
|
||||
sed -i 's|bool has_vk1_1 = PAN_ARCH >= 10;|bool has_vk1_1 = true;|' src/panfrost/vulkan/panvk_vX_physical_device.c
|
||||
sed -i 's|bool has_vk1_2 = PAN_ARCH >= 10;|bool has_vk1_2 = true;|' src/panfrost/vulkan/panvk_vX_physical_device.c
|
||||
|
||||
# Sanity-check the patches landed.
|
||||
grep -q "KHR_robustness2 = true," src/panfrost/vulkan/panvk_vX_physical_device.c
|
||||
grep -q "EXT_robustness2 = true," src/panfrost/vulkan/panvk_vX_physical_device.c
|
||||
grep -q "nullDescriptor = true," src/panfrost/vulkan/panvk_vX_physical_device.c
|
||||
grep -q "has_vk1_1 = true;" src/panfrost/vulkan/panvk_vX_physical_device.c
|
||||
grep -q "has_vk1_2 = true;" src/panfrost/vulkan/panvk_vX_physical_device.c
|
||||
}
|
||||
|
||||
build() {
|
||||
cd "mesa-${_mesaver}"
|
||||
# Minimal Mesa build — only the panvk Vulkan driver. No GLES/GLX/EGL/
|
||||
# gallium drivers — keeps the build narrower and avoids pulling in
|
||||
# the entire Mesa runtime in this package's dep graph.
|
||||
meson setup build/ \
|
||||
--prefix=/usr \
|
||||
--libdir=lib \
|
||||
--buildtype=release \
|
||||
-Dvulkan-drivers=panfrost \
|
||||
-Dgallium-drivers= \
|
||||
-Dplatforms=wayland,x11 \
|
||||
-Dglx=disabled \
|
||||
-Degl=disabled \
|
||||
-Dgles1=disabled \
|
||||
-Dgles2=disabled \
|
||||
-Dvulkan-layers= \
|
||||
-Dtools= \
|
||||
-Dgallium-rusticl=false \
|
||||
-Dmicrosoft-clc=disabled
|
||||
meson compile -C build
|
||||
}
|
||||
|
||||
package() {
|
||||
cd "${srcdir}/mesa-${_mesaver}"
|
||||
|
||||
# Patched lib — co-install path, NOT /usr/lib (to avoid clashing
|
||||
# with stock mesa's libvulkan_panfrost.so binary).
|
||||
install -Dm755 build/src/panfrost/vulkan/libvulkan_panfrost.so \
|
||||
"$pkgdir/usr/lib/panvk-bifrost/libvulkan_panfrost.so"
|
||||
|
||||
# ICD JSON at the standard Vulkan loader search path. The '00-'
|
||||
# filename prefix gives optical priority but is NOT spec-backed —
|
||||
# Vulkan loader readdir-order is implementation-defined per Khronos
|
||||
# LoaderDriverInterface. The brave-vulkan wrapper sets
|
||||
# VK_LOADER_DRIVERS_SELECT='00-panvk-bifrost*' to make the selection
|
||||
# deterministic across filesystems. This avoids the VK_ICD_FILENAMES
|
||||
# full-path override (whose GPU-sandbox survival is fragile) while
|
||||
# still letting the loader work normally. iter10 result + Phase 5
|
||||
# hardening.
|
||||
install -Dm644 "$srcdir/icd.json" \
|
||||
"$pkgdir/usr/share/vulkan/icd.d/00-panvk-bifrost.json"
|
||||
|
||||
# The brave-vulkan launcher wires up env + flags. iter10: no longer
|
||||
# sets VK_ICD_FILENAMES, no longer passes --no-sandbox /
|
||||
# --disable-gpu-sandbox.
|
||||
install -Dm755 "$srcdir/brave-vulkan" "$pkgdir/usr/bin/brave-vulkan"
|
||||
}
|
||||
@@ -0,0 +1,86 @@
|
||||
# mesa-panvk-bifrost
|
||||
|
||||
Patched Mesa `libvulkan_panfrost.so` exposing Bifrost-gen Mali GPUs
|
||||
(Mali-G31/G52/G72/G76, PAN_ARCH 6/7) to Chromium-family browsers'
|
||||
Vulkan compositor.
|
||||
|
||||
Result of the **panvk-bifrost** campaign ([`~/src/panvk-bifrost/`](../../../panvk-bifrost/)),
|
||||
iter9 close 2026-05-20 (technical milestone — operator-confirmed Brave
|
||||
window) followed by this package as the actual delivery.
|
||||
|
||||
## What it solves
|
||||
|
||||
Stock Chromium / Brave on Bifrost SBCs (PineTab2, etc.) currently dies
|
||||
at GL bindings init:
|
||||
|
||||
```
|
||||
ERROR: ui/gl/gl_context_egl.cc:120 GLES3 is unsupported and ES version fallback is disabled
|
||||
ERROR: ui/gl/init/gl_factory.cc:111 Requested GL implementation not found
|
||||
ERROR: components/viz/service/main/viz_main_impl.cc:189 Exiting GPU process due to errors during initialization
|
||||
```
|
||||
|
||||
This package makes Brave's **Vulkan compositor path** work on Bifrost,
|
||||
side-stepping the failing GL stack. Browser chrome and standard page
|
||||
rendering work.
|
||||
|
||||
## Known limitations (not addressed)
|
||||
|
||||
- **WebGL / WebGL2** in-page: blocked. ANGLE needs `VK_EXT_transform_feedback`
|
||||
to expose GLES3 contexts; PanVk-Bifrost doesn't currently support that.
|
||||
Sites using WebGL will degrade or refuse.
|
||||
- **VAAPI hardware video decode**: unrelated to this package — see the
|
||||
`libva-v4l2-request-fourier` package for that path.
|
||||
|
||||
## Install
|
||||
|
||||
```sh
|
||||
# Ensure [marfrit] is in /etc/pacman.conf, then:
|
||||
sudo pacman -Sy mesa-panvk-bifrost
|
||||
```
|
||||
|
||||
## Use
|
||||
|
||||
```sh
|
||||
brave-vulkan # launches Brave with Vulkan
|
||||
brave-vulkan https://www.example.com
|
||||
brave-vulkan --your-flags-here # extra args passed through
|
||||
```
|
||||
|
||||
The launcher sets:
|
||||
|
||||
- `PAN_I_WANT_A_BROKEN_VULKAN_DRIVER=1` (Mesa upstream gate)
|
||||
- `MESA_VK_VERSION_OVERRIDE=1.2` (apiVersion bump for ANGLE)
|
||||
- Brave flags: `--use-gl=disabled --enable-features=Vulkan --use-vulkan=native --ozone-platform=x11 --ignore-gpu-blocklist`
|
||||
|
||||
iter10 dropped `VK_ICD_FILENAMES` (ICD now at `/usr/share/vulkan/icd.d/00-panvk-bifrost.json` so the Vulkan loader auto-picks it, pinned deterministically via `VK_LOADER_DRIVERS_SELECT='00-panvk-bifrost*'`) and `--no-sandbox` / `--disable-gpu-sandbox` (env vars survive the GPU sandbox boundary without bypass).
|
||||
|
||||
## What's in the package
|
||||
|
||||
- `/usr/lib/panvk-bifrost/libvulkan_panfrost.so` — patched Mesa Vulkan driver (Mesa 26.0.6 + 2 sed-applied patches)
|
||||
- `/usr/share/vulkan/icd.d/00-panvk-bifrost.json` — Vulkan ICD JSON pointing at the patched .so (Vulkan loader picks it deterministically via `VK_LOADER_DRIVERS_SELECT='00-panvk-bifrost*'` set by the launcher)
|
||||
- `/usr/bin/brave-vulkan` — launcher script
|
||||
|
||||
System Mesa's binary `/usr/lib/libvulkan_panfrost.so` is untouched. The
|
||||
stock `panfrost_icd.json` is also untouched and continues to enumerate
|
||||
the same Mali-G52 device — apps see both drivers in
|
||||
`vkEnumeratePhysicalDevices` and pick by index (ANGLE picks first, which
|
||||
becomes ours by alphabetical priority).
|
||||
|
||||
## Co-existence
|
||||
|
||||
Both stock Mesa and this package can be installed. Stock Vulkan apps
|
||||
(`vulkaninfo`, `vkcube`, etc.) use the stock driver by default. Only
|
||||
apps started via `brave-vulkan` (or with `VK_ICD_FILENAMES` manually
|
||||
set to our path) use the patched driver.
|
||||
|
||||
## Campaign close criterion
|
||||
|
||||
Per [`feedback_package_done_means_installable`](file:///home/mfritsche/.claude/projects/-home-mfritsche-src/memory/feedback_package_done_means_installable.md)
|
||||
three-point check:
|
||||
|
||||
1. PR merged to `marfrit-packages`
|
||||
2. CI green AND `packages.reauktion.de/arch/aarch64/mesa-panvk-bifrost-*.pkg.tar.zst` exists
|
||||
3. `pacman -Ss mesa-panvk-bifrost` on a fresh consumer host (e.g. ohm
|
||||
after `pacman -Syu` from clean state) returns the package + brave-vulkan launches
|
||||
|
||||
When all three pass, panvk-bifrost iter9 closes.
|
||||
@@ -0,0 +1,68 @@
|
||||
#!/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 \
|
||||
"$@"
|
||||
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"ICD": {
|
||||
"api_version": "1.4.335",
|
||||
"library_path": "/usr/lib/panvk-bifrost/libvulkan_panfrost.so"
|
||||
},
|
||||
"file_format_version": "1.0.1"
|
||||
}
|
||||
+4
-4
@@ -14,9 +14,9 @@
|
||||
# Sibling userspace package: ../daedalus-v4l2/build-deb.sh
|
||||
set -euo pipefail
|
||||
|
||||
UPSTREAM_COMMIT=f55b2cd002afdfd08f3c093627317f92e4929074
|
||||
PKGVER=0.1.0+r16+gf55b2cd
|
||||
PKGREL=2 # pkgrel=2 — corrected upstream commit SHA
|
||||
UPSTREAM_COMMIT=481279c9bffd19e32c8f3299897e9b63fc5a24aa
|
||||
PKGVER=0.1.0+r18+g481279c
|
||||
PKGREL=1 # reset for new upstream pin (481279c — Phase 8.13 close)
|
||||
MODULE_NAME=daedalus_v4l2
|
||||
|
||||
HERE=$(dirname "$(readlink -f "$0")")
|
||||
@@ -153,7 +153,7 @@ Section: kernel
|
||||
Priority: optional
|
||||
Architecture: all
|
||||
Depends: dkms (>= 2.1.0.0)
|
||||
Recommends: daedalus-v4l2, linux-headers-generic | linux-headers
|
||||
Recommends: daedalus-v4l2, linux-headers-rpi-2712 | linux-headers-rpi | linux-headers-generic | linux-headers
|
||||
Maintainer: Markus Fritsche <mfritsche@reauktion.de>
|
||||
Homepage: https://git.reauktion.de/reauktion/daedalus-v4l2
|
||||
Description: V4L2 stateless decoder shim kernel module (DKMS) — Pi 5 / CM5
|
||||
|
||||
+25
@@ -1,3 +1,28 @@
|
||||
daedalus-v4l2-dkms (0.1.0+r18+g481279c-1) bookworm trixie; urgency=medium
|
||||
|
||||
* Bump to 481279c in lockstep with the userspace daedalus-v4l2
|
||||
package (which ships the new systemd unit + modules-load.d
|
||||
drop-in). No kernel-module behaviour change in this commit —
|
||||
bump is purely to keep DKMS pkgver and userspace pkgver aligned
|
||||
so /etc/modules-load.d/daedalus-v4l2.conf has a module to load.
|
||||
|
||||
-- Markus Fritsche <mfritsche@reauktion.de> Wed, 20 May 2026 16:00:00 +0000
|
||||
|
||||
daedalus-v4l2-dkms (0.1.0+r17+gf0cd29a-1) bookworm trixie; urgency=medium
|
||||
|
||||
* Bump to f0cd29a — Linux 6.18 compatibility fix. v4l2_fh_add /
|
||||
v4l2_fh_del gained a `struct file *filp` second argument at
|
||||
v6.18; module source now uses LINUX_VERSION_CODE conditional so
|
||||
it builds against 6.12 (Pi 5 stock RPi-2712 kernel) AND 6.18+
|
||||
(RPi-2712 / arm64). Verified DKMS rebuild on higgs
|
||||
(6.18.29+rpt-rpi-2712) succeeds + /dev/daedalus-v4l2 appears.
|
||||
* Recommends widened so apt pulls the right kernel-headers
|
||||
metapackage on RPi OS: linux-headers-rpi-2712 first, then
|
||||
linux-headers-rpi, then linux-headers-generic, then
|
||||
linux-headers.
|
||||
|
||||
-- Markus Fritsche <mfritsche@reauktion.de> Tue, 20 May 2026 10:30:00 +0000
|
||||
|
||||
daedalus-v4l2-dkms (0.1.0+r16+gf55b2cd-1) bookworm trixie; urgency=medium
|
||||
|
||||
* Initial Debian DKMS packaging for the daedalus_v4l2 kernel module.
|
||||
|
||||
+1
-1
@@ -10,7 +10,7 @@ Package: daedalus-v4l2-dkms
|
||||
Architecture: all
|
||||
Depends: ${misc:Depends}, dkms (>= 2.1.0.0)
|
||||
Recommends: daedalus-v4l2,
|
||||
linux-headers-generic | linux-headers
|
||||
linux-headers-rpi-2712 | linux-headers-rpi | linux-headers-generic | linux-headers
|
||||
Description: V4L2 stateless decoder shim kernel module (DKMS) — Pi 5 / CM5
|
||||
Out-of-tree V4L2 m2m kernel module for the daedalus-v4l2 stack on
|
||||
Raspberry Pi 5 / CM5. Registers /dev/videoNN (V4L2 stateless m2m
|
||||
|
||||
Vendored
+80
-5
@@ -11,13 +11,13 @@
|
||||
# Upstream repo: https://git.reauktion.de/reauktion/daedalus-v4l2
|
||||
set -euo pipefail
|
||||
|
||||
# Same pin as the Arch PKGBUILD. f55b2cd = "Phase 8.13: byte-exact
|
||||
# Same pin as the Arch PKGBUILD. 481279c = "Phase 8.13: byte-exact
|
||||
# end-to-end via libva (consumer target hit)" — first commit where the
|
||||
# full ffmpeg -hwaccel vaapi → libva → /dev/video0 → daemon path lands
|
||||
# a pixel-correct decoded frame back in ffmpeg.
|
||||
UPSTREAM_COMMIT=f55b2cd002afdfd08f3c093627317f92e4929074
|
||||
PKGVER=0.1.0+r16+gf55b2cd
|
||||
PKGREL=3 # pkgrel=3 — corrected upstream commit SHA (was hallucinated) (Path A SONAME .so.62)
|
||||
UPSTREAM_COMMIT=481279c9bffd19e32c8f3299897e9b63fc5a24aa
|
||||
PKGVER=0.1.0+r18+g481279c
|
||||
PKGREL=1 # reset for new upstream pin (481279c — Phase 8.13 close)
|
||||
|
||||
HERE=$(dirname "$(readlink -f "$0")")
|
||||
|
||||
@@ -50,7 +50,9 @@ mkdir -p "$ROOT/DEBIAN" \
|
||||
"$ROOT/usr/bin" \
|
||||
"$ROOT/usr/libexec/daedalus-v4l2" \
|
||||
"$ROOT/usr/include" \
|
||||
"$ROOT/usr/share/doc/daedalus-v4l2"
|
||||
"$ROOT/usr/share/doc/daedalus-v4l2" \
|
||||
"$ROOT/lib/systemd/system" \
|
||||
"$ROOT/usr/lib/modules-load.d"
|
||||
|
||||
install -m 755 "$work/$SRCDIR/daemon/build/daedalus_v4l2_daemon" \
|
||||
"$ROOT/usr/bin/daedalus_v4l2_daemon"
|
||||
@@ -65,6 +67,14 @@ install -m 755 "$work/$SRCDIR/tools/test_m2m_stream" \
|
||||
install -m 644 "$work/$SRCDIR/include/daedalus_v4l2_proto.h" \
|
||||
"$ROOT/usr/include/daedalus_v4l2_proto.h"
|
||||
|
||||
# systemd unit + module autoload — without these the daemon never
|
||||
# starts and the libva/VAAPI consumer's REQ_DECODE has nobody on
|
||||
# the other end of /dev/daedalus-v4l2.
|
||||
install -m 644 "$work/$SRCDIR/packaging/systemd/daedalus-v4l2.service" \
|
||||
"$ROOT/lib/systemd/system/daedalus-v4l2.service"
|
||||
install -m 644 "$work/$SRCDIR/packaging/systemd/daedalus-v4l2.modules-load" \
|
||||
"$ROOT/usr/lib/modules-load.d/daedalus-v4l2.conf"
|
||||
|
||||
install -m 644 "$work/$SRCDIR/README.md" \
|
||||
"$ROOT/usr/share/doc/daedalus-v4l2/README.md"
|
||||
for d in "$work/$SRCDIR/docs/"*.md; do
|
||||
@@ -75,6 +85,71 @@ install -Dm644 "$HERE/debian/copyright" "$ROOT/usr/share/doc/daedalus-v4l2/copyr
|
||||
install -Dm644 "$HERE/debian/changelog" "$ROOT/usr/share/doc/daedalus-v4l2/changelog.Debian"
|
||||
gzip -9 -n "$ROOT/usr/share/doc/daedalus-v4l2/changelog.Debian"
|
||||
|
||||
# DEBIAN/postinst — enable service + reload modules-load.d so the
|
||||
# kernel module loads now if daedalus-v4l2-dkms is also installed.
|
||||
# Does NOT auto-start the service — that requires /dev/daedalus-v4l2
|
||||
# to already exist (the ConditionPathExists= in the .service file)
|
||||
# which may not be true on the very first install before the user
|
||||
# reboots or manually modprobes. Operator decides when to start.
|
||||
cat > "$ROOT/DEBIAN/postinst" <<'POSTINST'
|
||||
#!/bin/sh
|
||||
set -e
|
||||
|
||||
if [ "$1" = "configure" ]; then
|
||||
# Reload systemd so the new unit file is visible.
|
||||
if command -v systemctl >/dev/null 2>&1; then
|
||||
systemctl daemon-reload >/dev/null 2>&1 || true
|
||||
systemctl enable daedalus-v4l2.service >/dev/null 2>&1 || true
|
||||
fi
|
||||
|
||||
# Trigger /usr/lib/modules-load.d/daedalus-v4l2.conf without a
|
||||
# reboot. Harmless if the module is already loaded; logs to
|
||||
# journal if it can't load (most common cause: dkms hasn't built
|
||||
# the module yet for the running kernel — see daedalus-v4l2-dkms
|
||||
# postinst for the loud-warning path).
|
||||
if command -v systemd-modules-load >/dev/null 2>&1; then
|
||||
systemd-modules-load >/dev/null 2>&1 || true
|
||||
fi
|
||||
|
||||
# Auto-start if /dev/daedalus-v4l2 came up (i.e. module loaded
|
||||
# successfully). ConditionPathExists in the unit file means
|
||||
# `systemctl start` is a no-op if the device isn't there yet —
|
||||
# avoids spurious failures during apt install on a host where
|
||||
# daedalus-v4l2-dkms hasn't built yet.
|
||||
if [ -e /dev/daedalus-v4l2 ] && command -v systemctl >/dev/null 2>&1; then
|
||||
systemctl start daedalus-v4l2.service >/dev/null 2>&1 || true
|
||||
fi
|
||||
fi
|
||||
|
||||
#DEBHELPER#
|
||||
POSTINST
|
||||
chmod 755 "$ROOT/DEBIAN/postinst"
|
||||
|
||||
cat > "$ROOT/DEBIAN/prerm" <<'PRERM'
|
||||
#!/bin/sh
|
||||
set -e
|
||||
|
||||
if [ "$1" = "remove" ] && command -v systemctl >/dev/null 2>&1; then
|
||||
systemctl stop daedalus-v4l2.service >/dev/null 2>&1 || true
|
||||
systemctl disable daedalus-v4l2.service >/dev/null 2>&1 || true
|
||||
fi
|
||||
|
||||
#DEBHELPER#
|
||||
PRERM
|
||||
chmod 755 "$ROOT/DEBIAN/prerm"
|
||||
|
||||
cat > "$ROOT/DEBIAN/postrm" <<'POSTRM'
|
||||
#!/bin/sh
|
||||
set -e
|
||||
|
||||
if command -v systemctl >/dev/null 2>&1; then
|
||||
systemctl daemon-reload >/dev/null 2>&1 || true
|
||||
fi
|
||||
|
||||
#DEBHELPER#
|
||||
POSTRM
|
||||
chmod 755 "$ROOT/DEBIAN/postrm"
|
||||
|
||||
cat > "$ROOT/DEBIAN/control" <<EOF
|
||||
Package: daedalus-v4l2
|
||||
Version: ${PKGVER}-${PKGREL}
|
||||
|
||||
+25
@@ -1,3 +1,28 @@
|
||||
daedalus-v4l2 (0.1.0+r18+g481279c-1) bookworm trixie; urgency=medium
|
||||
|
||||
* Bump to 481279c. Upstream landed the systemd unit + modules-load.d
|
||||
drop-in (packaging/systemd/daedalus-v4l2.{service,modules-load}).
|
||||
* Package now ships /lib/systemd/system/daedalus-v4l2.service and
|
||||
/usr/lib/modules-load.d/daedalus-v4l2.conf.
|
||||
* postinst: daemon-reload, enable the service, trigger
|
||||
systemd-modules-load, and start if /dev/daedalus-v4l2 is already
|
||||
present. Operator no longer needs to remember the modprobe +
|
||||
systemctl-enable dance after install.
|
||||
* prerm/postrm: stop + disable + daemon-reload.
|
||||
|
||||
-- Markus Fritsche <mfritsche@reauktion.de> Wed, 20 May 2026 16:00:00 +0000
|
||||
|
||||
daedalus-v4l2 (0.1.0+r17+gf0cd29a-1) bookworm trixie; urgency=medium
|
||||
|
||||
* Bump to f0cd29a alongside daedalus-v4l2-dkms. No userspace
|
||||
change — the daemon binary in this release is bit-identical to
|
||||
the f55b2cd one (the f0cd29a commit only touches kernel/). Bump
|
||||
keeps the userspace + DKMS pkgver lockstep so depmod /
|
||||
LIBVA_DRIVER_NAME selection stays correct on hosts that
|
||||
upgrade.
|
||||
|
||||
-- Markus Fritsche <mfritsche@reauktion.de> Tue, 20 May 2026 10:30:00 +0000
|
||||
|
||||
daedalus-v4l2 (0.1.0+r16+gf55b2cd-1) bookworm trixie; urgency=medium
|
||||
|
||||
* Initial Debian packaging for the daedalus-v4l2 userspace daemon.
|
||||
|
||||
Reference in New Issue
Block a user