forked from marfrit/marfrit-packages
Compare commits
11 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 9580f33cb6 | |||
| eab66cfab8 | |||
| d2cecbcd05 | |||
| 2028eccc3c | |||
| 70c8c2b417 | |||
| 793187ff9e | |||
| 42bf6b1633 | |||
| 40719efc43 | |||
| e540384f50 | |||
| 9ca97374c8 | |||
| 902e855d92 |
+38
-30
@@ -924,11 +924,20 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
set -e
|
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() { 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 \
|
export DEBIAN_FRONTEND=noninteractive
|
||||||
dpkg openssh rsync curl base-devel git nasm yasm \
|
retry apt-get update -qq
|
||||||
linux-api-headers mesa alsa-lib bzip2 fontconfig fribidi gmp \
|
# Debian build-deps for the FFmpeg fourier-fork build. These
|
||||||
gnutls lame libass dav1d libdrm freetype2 libpulse libva \
|
# map 1:1 to the previous Arch list; libav*-dev intentionally
|
||||||
libvorbis libvpx libwebp x264 x265 libxml2 opus v4l-utils xz zlib
|
# absent (we are FFmpeg itself, providing those libs).
|
||||||
|
retry apt-get install -y --no-install-recommends \
|
||||||
|
build-essential git pkg-config nasm yasm \
|
||||||
|
linux-libc-dev libgl1-mesa-dev libasound2-dev libbz2-dev \
|
||||||
|
libfontconfig-dev libfribidi-dev libgmp-dev libgnutls28-dev \
|
||||||
|
libmp3lame-dev libass-dev libdav1d-dev libdrm-dev \
|
||||||
|
libfreetype-dev libpulse-dev libva-dev libvorbis-dev libvpx-dev \
|
||||||
|
libwebp-dev libx264-dev libx265-dev libxml2-dev libopus-dev \
|
||||||
|
v4l-utils liblzma-dev zlib1g-dev \
|
||||||
|
curl ca-certificates openssh-client rsync dpkg-dev
|
||||||
|
|
||||||
- name: install hertz deploy ssh key
|
- name: install hertz deploy ssh key
|
||||||
if: steps.skip-check.outputs.skip != '1'
|
if: steps.skip-check.outputs.skip != '1'
|
||||||
@@ -1063,31 +1072,30 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
set -e
|
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() { 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 \
|
export DEBIAN_FRONTEND=noninteractive
|
||||||
dpkg openssh rsync curl base-devel git meson ninja python-docutils \
|
retry apt-get update -qq
|
||||||
ladspa wayland-protocols vulkan-headers \
|
# Debian libav*-dev is ABI-compatible with the fourier ffmpeg
|
||||||
alsa-lib desktop-file-utils glibc hicolor-icon-theme jack lcms2 \
|
# fork at the header level; mpv link-binds against system
|
||||||
libarchive libass libbluray libcdio libcdio-paranoia libdisplay-info \
|
# libav at build time, runtime dlopen picks up the fourier
|
||||||
libdrm libdvdnav libdvdread libegl libgl libglvnd libjpeg-turbo \
|
# libs if installed. The previous [marfrit] pre-install of
|
||||||
libplacebo libpulse libsixel libva libvdpau libx11 libxext \
|
# ffmpeg-v4l2-request-fourier under pacman is unnecessary
|
||||||
libxkbcommon libxpresent libxrandr libxss libxv luajit mesa mujs \
|
# under apt: stock Debian libav*-dev provides the trixie
|
||||||
libpipewire rubberband sdl2 openal uchardet vapoursynth \
|
# ABI mpv-fourier's binary will encounter.
|
||||||
vulkan-icd-loader wayland zlib
|
retry apt-get install -y --no-install-recommends \
|
||||||
|
build-essential git meson ninja-build pkg-config python3-docutils \
|
||||||
- name: configure [marfrit] repo + pre-install ffmpeg-v4l2-request-fourier
|
ladspa-sdk wayland-protocols libvulkan-dev libwayland-dev \
|
||||||
if: steps.skip-check.outputs.skip != '1'
|
libasound2-dev desktop-file-utils libc6-dev hicolor-icon-theme \
|
||||||
run: |
|
libjack-jackd2-dev liblcms2-dev libarchive-dev libass-dev \
|
||||||
set -e
|
libbluray-dev libcdio-dev libcdio-paranoia-dev libdisplay-info-dev \
|
||||||
curl -sLo /tmp/marfrit.gpg https://packages.reauktion.de/marfrit.gpg
|
libdrm-dev libdvdnav-dev libdvdread-dev libegl-dev libgl-dev \
|
||||||
pacman-key --add /tmp/marfrit.gpg
|
libglvnd-dev libjpeg-dev libplacebo-dev libpulse-dev libsixel-dev \
|
||||||
pacman-key --lsign-key 92D5E96D8F63C75E4116AA1FF5C8C4603D0D250C
|
libva-dev libvdpau-dev libx11-dev libxext-dev libxkbcommon-dev \
|
||||||
rm -f /tmp/marfrit.gpg
|
libxpresent-dev libxrandr-dev libxss-dev libxv-dev libluajit-5.1-dev \
|
||||||
if ! grep -q '^\[marfrit\]' /etc/pacman.conf; then
|
libmujs-dev libpipewire-0.3-dev librubberband-dev libsdl2-dev \
|
||||||
printf '\n[marfrit]\nServer = https://packages.reauktion.de/arch/$arch\nSigLevel = Required\n' >> /etc/pacman.conf
|
libopenal-dev libuchardet-dev libvapoursynth-dev liblzma-dev \
|
||||||
fi
|
libavcodec-dev libavformat-dev libavutil-dev libswscale-dev libswresample-dev \
|
||||||
pacman -Sy --noconfirm
|
zlib1g-dev \
|
||||||
rm -f /var/cache/pacman/pkg/ffmpeg-v4l2-request-fourier-*-aarch64.pkg.tar.*
|
curl ca-certificates openssh-client rsync dpkg-dev
|
||||||
printf 'y\ny\ny\n' | pacman -S marfrit/ffmpeg-v4l2-request-fourier
|
|
||||||
|
|
||||||
- name: install hertz deploy ssh key
|
- name: install hertz deploy ssh key
|
||||||
if: steps.skip-check.outputs.skip != '1'
|
if: steps.skip-check.outputs.skip != '1'
|
||||||
|
|||||||
@@ -18,9 +18,9 @@ _module=daedalus_v4l2
|
|||||||
|
|
||||||
# Same pin as arch/daedalus-v4l2 — keep kernel module + daemon
|
# Same pin as arch/daedalus-v4l2 — keep kernel module + daemon
|
||||||
# bit-versioned together so the chardev wire protocol stays in sync.
|
# bit-versioned together so the chardev wire protocol stays in sync.
|
||||||
_commit=3dd0eb070a75893f78368ce819b9e9ebf08c124d
|
_commit=462aa4b4804972189d2f1b1ab5782f1ca1e8c423
|
||||||
|
|
||||||
pkgver=0.1.0.r20.3dd0eb0
|
pkgver=0.1.0.r22.462aa4b
|
||||||
pkgrel=1 # reset for new upstream pin (3dd0eb0 — DAEMON-PPS H.264 SPS/PPS NAL synth)
|
pkgrel=1 # reset for new upstream pin (3dd0eb0 — DAEMON-PPS H.264 SPS/PPS NAL synth)
|
||||||
pkgdesc="V4L2 stateless decoder shim kernel module (DKMS) — Pi 5 / CM5"
|
pkgdesc="V4L2 stateless decoder shim kernel module (DKMS) — Pi 5 / CM5"
|
||||||
arch=('any')
|
arch=('any')
|
||||||
|
|||||||
@@ -21,11 +21,11 @@ _upstreampkg=daedalus-v4l2
|
|||||||
# ffmpeg -hwaccel vaapi → libva → /dev/video0 → daemon path lands a
|
# ffmpeg -hwaccel vaapi → libva → /dev/video0 → daemon path lands a
|
||||||
# pixel-correct decoded frame back in ffmpeg. Promote to a later pin
|
# pixel-correct decoded frame back in ffmpeg. Promote to a later pin
|
||||||
# only after a future phase closes cleanly.
|
# only after a future phase closes cleanly.
|
||||||
_commit=3dd0eb070a75893f78368ce819b9e9ebf08c124d
|
_commit=462aa4b4804972189d2f1b1ab5782f1ca1e8c423
|
||||||
|
|
||||||
# 0.1.0 (pre-1.0) + commit count + short sha. Bump the .Y on each
|
# 0.1.0 (pre-1.0) + commit count + short sha. Bump the .Y on each
|
||||||
# Phase 8.x close. pkgver() recomputes at build time.
|
# Phase 8.x close. pkgver() recomputes at build time.
|
||||||
pkgver=0.1.0.r20.3dd0eb0
|
pkgver=0.1.0.r22.462aa4b
|
||||||
pkgrel=1 # reset for new upstream pin (3dd0eb0 — DAEMON-PPS H.264 SPS/PPS NAL synth)
|
pkgrel=1 # reset for new upstream pin (3dd0eb0 — DAEMON-PPS H.264 SPS/PPS NAL synth)
|
||||||
pkgdesc="Userspace daemon for the daedalus-v4l2 V4L2 stateless decoder shim (VP9/AV1/H.264 on Pi 5 / CM5)"
|
pkgdesc="Userspace daemon for the daedalus-v4l2 V4L2 stateless decoder shim (VP9/AV1/H.264 on Pi 5 / CM5)"
|
||||||
arch=('aarch64')
|
arch=('aarch64')
|
||||||
|
|||||||
@@ -24,31 +24,29 @@ pkgname=libva-v4l2-request-fourier
|
|||||||
epoch=1
|
epoch=1
|
||||||
_upstreampkg=libva-v4l2-request
|
_upstreampkg=libva-v4l2-request
|
||||||
|
|
||||||
# Pin the fork tip. de27e95 = "v4l2: log error_idx + failing ctrl id
|
# Pin the fork tip. 77f9236 = PR #12 merge "av1: populate
|
||||||
# on S_EXT_CTRLS failure" — Phase 8.13 diagnostic that surfaced the
|
# V4L2_CID_STATELESS_AV1_SEQUENCE in codec_set_controls (#11 libva side)"
|
||||||
# real root cause of the libva→daedalus_v4l2 request-completion
|
# — addresses the libva-side portion of marfrit/libva-v4l2-request-fourier#11.
|
||||||
# timeout (turned out the EINVAL libva was logging was a harmless
|
# Adds src/av1.{c,h} with av1_set_controls that maps VAAPI's
|
||||||
# H264/HEVC probe; actual VP9 stateless control SET worked all along).
|
# VAPictureParameterBufferAV1.seq_info_fields onto struct
|
||||||
|
# v4l2_ctrl_av1_sequence and queues V4L2_CID_STATELESS_AV1_SEQUENCE via
|
||||||
|
# S_EXT_CTRLS. The daedalus_v4l2 daemon track is the consumer that turns
|
||||||
|
# the ctrl into an OBU_SEQUENCE_HEADER and prepends it to the slice
|
||||||
|
# bitstream so libdav1d can parse the (sequence-header-stripped) OUTPUT
|
||||||
|
# buffer that ffmpeg-vaapi delivers. Until the daemon side lands the ctrl
|
||||||
|
# is just sitting in the request unused — no-cost no-op for HW decoders
|
||||||
|
# (vpu981 parses OBU bytes directly).
|
||||||
#
|
#
|
||||||
# Prior pin (7ac934e) was iter38b — fresnel-fourier multi-device probe
|
# Prior pin (c1bb444) = PR #9 merge — h264_set_controls
|
||||||
# + MAX_PROFILES bounds-check fix. de27e95 added the daedalus_v4l2
|
# max_num_ref_frames fallback + libva-boundary instrumentation for the
|
||||||
# probe slot (b5b3acf), the meson option gate (2146341), and the
|
# daedalus consumer-strict path (issue #8 libva side).
|
||||||
# S_EXT_CTRLS diagnostic (de27e95 itself). c332d34 (LIBVA-1) added
|
_commit=77f92364661419f6e5a7bd827c1b845b4e426569
|
||||||
# the per-codec dispatch: rpi-hevc-dec + daedalus_v4l2 both probe each
|
|
||||||
# other as alts, VP9/AV1/H.264 route to daedalus via new 'd' kind,
|
|
||||||
# HEVC stays on 'p' (rpi-hevc-dec). 9898331 (LIBVA-2) completes that
|
|
||||||
# by adding video_fd_daedalus to any_fd_supports_output_format's probe
|
|
||||||
# array — without it, H.264/VP9/AV1 profiles never got advertised on
|
|
||||||
# Pi 5 mixed deployments (rpi-hevc-dec primary, daedalus alt) and
|
|
||||||
# ffmpeg bailed with "No support for codec h264 profile 578" before
|
|
||||||
# the per-codec dispatch could fire.
|
|
||||||
_commit=989833114a7708ad999dc68309cbc181d9913bdb
|
|
||||||
|
|
||||||
# Project version from meson.build (1.0.0) + commit count + short sha,
|
# Project version from meson.build (1.0.0) + commit count + short sha,
|
||||||
# matching the ffmpeg-v4l2-request-fourier convention. Recomputed at
|
# matching the ffmpeg-v4l2-request-fourier convention. Recomputed at
|
||||||
# build time by pkgver() below; the static value here is a placeholder
|
# build time by pkgver() below; the static value here is a placeholder
|
||||||
# so AUR-style consumers see something coherent before src/ exists.
|
# so AUR-style consumers see something coherent before src/ exists.
|
||||||
pkgver=1.0.0.r380.9898331
|
pkgver=1.0.0.r386.77f9236
|
||||||
pkgrel=1
|
pkgrel=1
|
||||||
pkgdesc="VA-API backend for V4L2 stateless decoders (multiplanar fork — fourier umbrella)"
|
pkgdesc="VA-API backend for V4L2 stateless decoders (multiplanar fork — fourier umbrella)"
|
||||||
arch=('aarch64')
|
arch=('aarch64')
|
||||||
|
|||||||
@@ -0,0 +1,328 @@
|
|||||||
|
--- a/src/panfrost/vulkan/panvk_shader.h 2026-04-29 22:19:00.000000000 +0200
|
||||||
|
+++ b/src/panfrost/vulkan/panvk_shader.h 2026-05-20 18:52:53.312698258 +0200
|
||||||
|
@@ -150,6 +150,10 @@
|
||||||
|
struct {
|
||||||
|
#if PAN_ARCH < 9
|
||||||
|
int32_t raw_vertex_offset;
|
||||||
|
+ uint32_t num_vertices; /* iter13: XFB needs per-draw vertex count */
|
||||||
|
+ /* aligned_u64 attribute below inserts the 4-byte alignment gap
|
||||||
|
+ * after num_vertices automatically — no explicit pad needed. */
|
||||||
|
+ aligned_u64 xfb_address[4]; /* iter13: 4 transform feedback buffer base addresses */
|
||||||
|
#endif
|
||||||
|
int32_t first_vertex;
|
||||||
|
int32_t base_instance;
|
||||||
|
--- a/src/panfrost/vulkan/panvk_vX_physical_device.c 2026-05-20 19:09:29.711145446 +0200
|
||||||
|
+++ b/src/panfrost/vulkan/panvk_vX_physical_device.c 2026-05-20 18:52:54.832720445 +0200
|
||||||
|
@@ -169,6 +169,7 @@
|
||||||
|
.EXT_provoking_vertex = true,
|
||||||
|
.EXT_queue_family_foreign = true,
|
||||||
|
.EXT_robustness2 = true,
|
||||||
|
+ .EXT_transform_feedback = PAN_ARCH < 9, /* iter13: JM-class only for now */
|
||||||
|
.EXT_sampler_filter_minmax = PAN_ARCH >= 10,
|
||||||
|
.EXT_scalar_block_layout = true,
|
||||||
|
.EXT_separate_stencil_usage = true,
|
||||||
|
@@ -495,6 +496,10 @@
|
||||||
|
.robustImageAccess2 = false,
|
||||||
|
.nullDescriptor = true,
|
||||||
|
|
||||||
|
+ /* VK_EXT_transform_feedback (iter13) */
|
||||||
|
+ .transformFeedback = PAN_ARCH < 9,
|
||||||
|
+ .geometryStreams = false,
|
||||||
|
+
|
||||||
|
/* VK_KHR_shader_clock */
|
||||||
|
.shaderSubgroupClock = device->kmod.dev->props.gpu_can_query_timestamp,
|
||||||
|
.shaderDeviceClock = device->kmod.dev->props.timestamp_device_coherent,
|
||||||
|
@@ -1020,6 +1025,18 @@
|
||||||
|
.robustStorageBufferAccessSizeAlignment = 1,
|
||||||
|
.robustUniformBufferAccessSizeAlignment = 1,
|
||||||
|
|
||||||
|
+ /* VK_EXT_transform_feedback (iter13) */
|
||||||
|
+ .maxTransformFeedbackStreams = 1,
|
||||||
|
+ .maxTransformFeedbackBuffers = 4,
|
||||||
|
+ .maxTransformFeedbackBufferSize = UINT32_MAX,
|
||||||
|
+ .maxTransformFeedbackStreamDataSize = 512,
|
||||||
|
+ .maxTransformFeedbackBufferDataSize = 512,
|
||||||
|
+ .maxTransformFeedbackBufferDataStride = 2048,
|
||||||
|
+ .transformFeedbackQueries = false,
|
||||||
|
+ .transformFeedbackStreamsLinesTriangles = false,
|
||||||
|
+ .transformFeedbackRasterizationStreamSelect = false,
|
||||||
|
+ .transformFeedbackDraw = false,
|
||||||
|
+
|
||||||
|
/* VK_EXT_shader_object */
|
||||||
|
/* We do not currently support VK_EXT_shader_object but this is used
|
||||||
|
* internally by vk_shader
|
||||||
|
--- a/src/panfrost/vulkan/panvk_vX_shader.c 2026-04-29 22:19:00.000000000 +0200
|
||||||
|
+++ b/src/panfrost/vulkan/panvk_vX_shader.c 2026-05-20 18:52:56.556745611 +0200
|
||||||
|
@@ -21,6 +21,7 @@
|
||||||
|
#include "panvk_physical_device.h"
|
||||||
|
#include "panvk_sampler.h"
|
||||||
|
#include "panvk_shader.h"
|
||||||
|
+#include "pan_nir.h" /* iter13: pan_nir_lower_xfb */
|
||||||
|
|
||||||
|
#include "spirv/nir_spirv.h"
|
||||||
|
#include "util/memstream.h"
|
||||||
|
@@ -100,6 +101,20 @@
|
||||||
|
case nir_intrinsic_load_raw_vertex_offset_pan:
|
||||||
|
val = load_sysval(b, graphics, bit_size, vs.raw_vertex_offset);
|
||||||
|
break;
|
||||||
|
+ case nir_intrinsic_load_num_vertices: /* iter13: XFB index calc */
|
||||||
|
+ val = load_sysval(b, graphics, bit_size, vs.num_vertices);
|
||||||
|
+ break;
|
||||||
|
+ case nir_intrinsic_load_xfb_address: { /* iter13: XFB buffer N base address */
|
||||||
|
+ unsigned idx = nir_intrinsic_base(intr);
|
||||||
|
+ switch (idx) {
|
||||||
|
+ case 0: val = load_sysval(b, graphics, bit_size, vs.xfb_address[0]); break;
|
||||||
|
+ case 1: val = load_sysval(b, graphics, bit_size, vs.xfb_address[1]); break;
|
||||||
|
+ case 2: val = load_sysval(b, graphics, bit_size, vs.xfb_address[2]); break;
|
||||||
|
+ case 3: val = load_sysval(b, graphics, bit_size, vs.xfb_address[3]); break;
|
||||||
|
+ default: return false;
|
||||||
|
+ }
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
case nir_intrinsic_load_layer_id:
|
||||||
|
assert(b->shader->info.stage == MESA_SHADER_FRAGMENT);
|
||||||
|
val = load_sysval(b, graphics, bit_size, layer_id);
|
||||||
|
@@ -457,6 +472,7 @@
|
||||||
|
core_max_id);
|
||||||
|
|
||||||
|
pan_preprocess_nir(nir, pdev->kmod.dev->props.gpu_id);
|
||||||
|
+
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
@@ -870,6 +886,18 @@
|
||||||
|
nir_var_shader_in | nir_var_shader_out, UINT32_MAX);
|
||||||
|
NIR_PASS(_, nir, nir_lower_io, nir_var_shader_in | nir_var_shader_out,
|
||||||
|
glsl_type_size, nir_lower_io_use_interpolated_input_intrinsics);
|
||||||
|
+
|
||||||
|
+#if PAN_ARCH < 9
|
||||||
|
+ /* iter13: VK_EXT_transform_feedback — runs AFTER nir_lower_io so that
|
||||||
|
+ * shader outputs are now store_output intrinsics that pan_nir_lower_xfb
|
||||||
|
+ * can rewrite to nir_store_global+nir_load_xfb_address. */
|
||||||
|
+ if (nir->info.stage == MESA_SHADER_VERTEX &&
|
||||||
|
+ nir->info.has_transform_feedback_varyings) {
|
||||||
|
+ NIR_PASS(_, nir, nir_opt_constant_folding);
|
||||||
|
+ NIR_PASS(_, nir, nir_io_add_intrinsic_xfb_info);
|
||||||
|
+ NIR_PASS(_, nir, pan_nir_lower_xfb);
|
||||||
|
+ }
|
||||||
|
+#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
static VkResult
|
||||||
|
@@ -1288,6 +1316,9 @@
|
||||||
|
.view_mask = (state && state->rp) ? state->rp->view_mask : 0,
|
||||||
|
.robust2_modes = robust2_modes,
|
||||||
|
.robust_descriptors = dev->vk.enabled_features.nullDescriptor,
|
||||||
|
+ /* iter13: XFB shaders must disable IDVS (matches Panfrost-Gallium). */
|
||||||
|
+ .no_idvs = (info->stage == MESA_SHADER_VERTEX) &&
|
||||||
|
+ info->nir->info.has_transform_feedback_varyings,
|
||||||
|
};
|
||||||
|
|
||||||
|
switch (info->stage) {
|
||||||
|
--- a/src/panfrost/vulkan/panvk_cmd_draw.h 2026-04-29 22:19:00.000000000 +0200
|
||||||
|
+++ b/src/panfrost/vulkan/panvk_cmd_draw.h 2026-05-20 18:52:57.748763011 +0200
|
||||||
|
@@ -135,6 +135,19 @@
|
||||||
|
struct panvk_graphics_sysvals sysvals;
|
||||||
|
|
||||||
|
#if PAN_ARCH < 9
|
||||||
|
+ /* iter13: VK_EXT_transform_feedback state (JM-class only for now). */
|
||||||
|
+ struct {
|
||||||
|
+ bool active;
|
||||||
|
+ uint32_t buffer_count;
|
||||||
|
+ struct {
|
||||||
|
+ uint64_t addr;
|
||||||
|
+ uint64_t offset;
|
||||||
|
+ uint64_t size;
|
||||||
|
+ } buffers[4];
|
||||||
|
+ } xfb;
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
+#if PAN_ARCH < 9
|
||||||
|
struct panvk_shader_link link;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
--- a/src/panfrost/vulkan/panvk_vX_cmd_draw.c 2026-04-29 22:19:00.000000000 +0200
|
||||||
|
+++ b/src/panfrost/vulkan/panvk_vX_cmd_draw.c 2026-05-20 19:10:23.031919662 +0200
|
||||||
|
@@ -10,6 +10,7 @@
|
||||||
|
#include "panvk_entrypoints.h"
|
||||||
|
|
||||||
|
#include "pan_desc.h"
|
||||||
|
+#include "pan_compiler.h" /* PAN_SHADER_OOB_ADDRESS */
|
||||||
|
#include "pan_util.h"
|
||||||
|
|
||||||
|
static void
|
||||||
|
@@ -722,6 +723,35 @@
|
||||||
|
set_gfx_sysval(cmdbuf, dirty_sysvals, vs.raw_vertex_offset,
|
||||||
|
info->vertex.raw_offset);
|
||||||
|
set_gfx_sysval(cmdbuf, dirty_sysvals, layer_id, info->layer_id);
|
||||||
|
+
|
||||||
|
+ /* iter13: VK_EXT_transform_feedback sysvals — always set (per draw),
|
||||||
|
+ * reflect bound XFB state. set_gfx_sysval is a no-op if value unchanged. */
|
||||||
|
+ set_gfx_sysval(cmdbuf, dirty_sysvals, vs.num_vertices, info->vertex.count);
|
||||||
|
+ {
|
||||||
|
+ const struct panvk_cmd_graphics_state *_gfx = &cmdbuf->state.gfx;
|
||||||
|
+ /* iter13: default each XFB buffer address to PAN_SHADER_OOB_ADDRESS
|
||||||
|
+ * (= 1<<63). This is the Panfrost-Gallium memory-sink idiom — the
|
||||||
|
+ * Bifrost MMU silently discards stores to this address, so a pipeline
|
||||||
|
+ * with XFB outputs used in a non-XFB draw (or in an XFB draw with
|
||||||
|
+ * fewer bound buffers than the shader declares) is safe instead of
|
||||||
|
+ * faulting. See gallium/drivers/panfrost/pan_cmdstream.c PAN_SYSVAL_XFB. */
|
||||||
|
+ uint64_t _xa0 = PAN_SHADER_OOB_ADDRESS, _xa1 = PAN_SHADER_OOB_ADDRESS,
|
||||||
|
+ _xa2 = PAN_SHADER_OOB_ADDRESS, _xa3 = PAN_SHADER_OOB_ADDRESS;
|
||||||
|
+ if (_gfx->xfb.active) {
|
||||||
|
+ if (_gfx->xfb.buffer_count > 0 && _gfx->xfb.buffers[0].addr)
|
||||||
|
+ _xa0 = _gfx->xfb.buffers[0].addr + _gfx->xfb.buffers[0].offset;
|
||||||
|
+ if (_gfx->xfb.buffer_count > 1 && _gfx->xfb.buffers[1].addr)
|
||||||
|
+ _xa1 = _gfx->xfb.buffers[1].addr + _gfx->xfb.buffers[1].offset;
|
||||||
|
+ if (_gfx->xfb.buffer_count > 2 && _gfx->xfb.buffers[2].addr)
|
||||||
|
+ _xa2 = _gfx->xfb.buffers[2].addr + _gfx->xfb.buffers[2].offset;
|
||||||
|
+ if (_gfx->xfb.buffer_count > 3 && _gfx->xfb.buffers[3].addr)
|
||||||
|
+ _xa3 = _gfx->xfb.buffers[3].addr + _gfx->xfb.buffers[3].offset;
|
||||||
|
+ }
|
||||||
|
+ set_gfx_sysval(cmdbuf, dirty_sysvals, vs.xfb_address[0], _xa0);
|
||||||
|
+ set_gfx_sysval(cmdbuf, dirty_sysvals, vs.xfb_address[1], _xa1);
|
||||||
|
+ set_gfx_sysval(cmdbuf, dirty_sysvals, vs.xfb_address[2], _xa2);
|
||||||
|
+ set_gfx_sysval(cmdbuf, dirty_sysvals, vs.xfb_address[3], _xa3);
|
||||||
|
+ }
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (dyn_gfx_state_dirty(cmdbuf, CB_BLEND_CONSTANTS)) {
|
||||||
|
--- a/src/panfrost/vulkan/meson.build 2026-04-29 22:19:00.000000000 +0200
|
||||||
|
+++ b/src/panfrost/vulkan/meson.build 2026-05-20 18:53:04.484861338 +0200
|
||||||
|
@@ -73,6 +73,7 @@
|
||||||
|
jm_inc_dir = ['jm']
|
||||||
|
jm_files = [
|
||||||
|
'jm/panvk_vX_bind_queue.c',
|
||||||
|
+ 'jm/panvk_vX_cmd_xfb.c', # iter13
|
||||||
|
'jm/panvk_vX_cmd_buffer.c',
|
||||||
|
'jm/panvk_vX_cmd_dispatch.c',
|
||||||
|
'jm/panvk_vX_cmd_draw.c',
|
||||||
|
--- a/src/panfrost/vulkan/jm/panvk_vX_cmd_buffer.c 2026-04-29 22:19:00.000000000 +0200
|
||||||
|
+++ b/src/panfrost/vulkan/jm/panvk_vX_cmd_buffer.c 2026-05-20 19:10:26.163965149 +0200
|
||||||
|
@@ -473,5 +473,12 @@
|
||||||
|
|
||||||
|
vk_command_buffer_begin(&cmdbuf->vk, pBeginInfo);
|
||||||
|
|
||||||
|
+#if PAN_ARCH < 9
|
||||||
|
+ /* iter13: clear XFB state on Begin so a reused command buffer does not
|
||||||
|
+ * inherit stale xfb.buffer_count / xfb.active / xfb.buffers[] from a
|
||||||
|
+ * prior recording. */
|
||||||
|
+ memset(&cmdbuf->state.gfx.xfb, 0, sizeof(cmdbuf->state.gfx.xfb));
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
return VK_SUCCESS;
|
||||||
|
}
|
||||||
|
--- a/src/panfrost/vulkan/jm/panvk_vX_cmd_xfb.c 2026-05-18 12:50:53.067999996 +0200
|
||||||
|
+++ b/src/panfrost/vulkan/jm/panvk_vX_cmd_xfb.c 2026-05-20 19:10:27.175979847 +0200
|
||||||
|
@@ -0,0 +1,111 @@
|
||||||
|
+/*
|
||||||
|
+ * Copyright © 2026 mfritsche / claude-noether
|
||||||
|
+ * SPDX-License-Identifier: MIT
|
||||||
|
+ *
|
||||||
|
+ * iter13: VK_EXT_transform_feedback command handlers for the JM
|
||||||
|
+ * architecture path (Bifrost v6/v7 + Valhall-JM v9).
|
||||||
|
+ *
|
||||||
|
+ * The runtime contract:
|
||||||
|
+ * - vkCmdBindTransformFeedbackBuffersEXT: stash (gpu_addr, offset, size)
|
||||||
|
+ * for each slot into cmdbuf->state.gfx.xfb.buffers[].
|
||||||
|
+ * - vkCmdBeginTransformFeedbackEXT: set cmdbuf->state.gfx.xfb.active = true.
|
||||||
|
+ * Mark sysvals dirty so the next draw re-emits vs.xfb_address[].
|
||||||
|
+ * - vkCmdEndTransformFeedbackEXT: set active = false.
|
||||||
|
+ *
|
||||||
|
+ * Counter buffers (firstCounterBuffer/counterBufferCount/pCounterBuffers/
|
||||||
|
+ * pCounterBufferOffsets) are accepted by API but ignored — v1 doesn't
|
||||||
|
+ * support pause/resume. transformFeedbackDraw is advertised as false.
|
||||||
|
+ *
|
||||||
|
+ * Per-draw integration: jm/panvk_vX_cmd_draw.c reads cmdbuf->state.gfx.xfb
|
||||||
|
+ * and populates vs.xfb_address[i] for shader use. The pan_nir_lower_xfb
|
||||||
|
+ * pass in panvk_vX_shader.c emits nir_load_xfb_address(i) which lowers
|
||||||
|
+ * (via panvk_vX_shader.c sysval handler) to a load from the per-draw
|
||||||
|
+ * sysval push area.
|
||||||
|
+ */
|
||||||
|
+
|
||||||
|
+#include "vk_log.h"
|
||||||
|
+#include "util/log.h"
|
||||||
|
+
|
||||||
|
+#include "panvk_cmd_buffer.h"
|
||||||
|
+#include "panvk_cmd_draw.h"
|
||||||
|
+#include "panvk_buffer.h"
|
||||||
|
+#include "panvk_entrypoints.h"
|
||||||
|
+
|
||||||
|
+VKAPI_ATTR void VKAPI_CALL
|
||||||
|
+panvk_per_arch(CmdBindTransformFeedbackBuffersEXT)(
|
||||||
|
+ VkCommandBuffer commandBuffer,
|
||||||
|
+ uint32_t firstBinding,
|
||||||
|
+ uint32_t bindingCount,
|
||||||
|
+ const VkBuffer *pBuffers,
|
||||||
|
+ const VkDeviceSize *pOffsets,
|
||||||
|
+ const VkDeviceSize *pSizes)
|
||||||
|
+{
|
||||||
|
+ VK_FROM_HANDLE(panvk_cmd_buffer, cmdbuf, commandBuffer);
|
||||||
|
+ struct panvk_cmd_graphics_state *gfx = &cmdbuf->state.gfx;
|
||||||
|
+
|
||||||
|
+ for (uint32_t i = 0; i < bindingCount; i++) {
|
||||||
|
+ uint32_t slot = firstBinding + i;
|
||||||
|
+ if (slot >= 4)
|
||||||
|
+ continue;
|
||||||
|
+
|
||||||
|
+ VK_FROM_HANDLE(panvk_buffer, buf, pBuffers[i]);
|
||||||
|
+ gfx->xfb.buffers[slot].addr = panvk_buffer_gpu_ptr(buf, 0);
|
||||||
|
+ gfx->xfb.buffers[slot].offset = pOffsets[i];
|
||||||
|
+ gfx->xfb.buffers[slot].size =
|
||||||
|
+ (pSizes != NULL && pSizes[i] != VK_WHOLE_SIZE)
|
||||||
|
+ ? pSizes[i]
|
||||||
|
+ : (buf->vk.size - pOffsets[i]);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (firstBinding + bindingCount > gfx->xfb.buffer_count)
|
||||||
|
+ gfx->xfb.buffer_count = firstBinding + bindingCount;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+VKAPI_ATTR void VKAPI_CALL
|
||||||
|
+panvk_per_arch(CmdBeginTransformFeedbackEXT)(
|
||||||
|
+ VkCommandBuffer commandBuffer,
|
||||||
|
+ uint32_t firstCounterBuffer,
|
||||||
|
+ uint32_t counterBufferCount,
|
||||||
|
+ const VkBuffer *pCounterBuffers,
|
||||||
|
+ const VkDeviceSize *pCounterBufferOffsets)
|
||||||
|
+{
|
||||||
|
+ VK_FROM_HANDLE(panvk_cmd_buffer, cmdbuf, commandBuffer);
|
||||||
|
+ struct panvk_cmd_graphics_state *gfx = &cmdbuf->state.gfx;
|
||||||
|
+
|
||||||
|
+ /* Counter buffers ignored in v1 — see VkPhysicalDeviceTransformFeedback
|
||||||
|
+ * PropertiesEXT.transformFeedbackDraw = false in panvk_vX_physical_device.c.
|
||||||
|
+ * App is spec-compliant if it does not pass counter buffers (which our
|
||||||
|
+ * features advertisement allows), but warn loudly if it does so we do not
|
||||||
|
+ * silently produce wrong capture state. */
|
||||||
|
+ (void)firstCounterBuffer;
|
||||||
|
+ (void)pCounterBufferOffsets;
|
||||||
|
+ if (counterBufferCount > 0 && pCounterBuffers != NULL) {
|
||||||
|
+ mesa_logw("panvk: CmdBeginTransformFeedbackEXT: counter buffers not "
|
||||||
|
+ "implemented (transformFeedbackDraw=false); XFB resume will "
|
||||||
|
+ "restart at buffer offset 0");
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ gfx->xfb.active = true;
|
||||||
|
+ /* Per-draw set_gfx_sysval picks up the change automatically — no
|
||||||
|
+ * explicit dirty marking required (set_gfx_sysval uses memcmp +
|
||||||
|
+ * BITSET to detect state diffs and re-emit sysvals). */
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+VKAPI_ATTR void VKAPI_CALL
|
||||||
|
+panvk_per_arch(CmdEndTransformFeedbackEXT)(
|
||||||
|
+ VkCommandBuffer commandBuffer,
|
||||||
|
+ uint32_t firstCounterBuffer,
|
||||||
|
+ uint32_t counterBufferCount,
|
||||||
|
+ const VkBuffer *pCounterBuffers,
|
||||||
|
+ const VkDeviceSize *pCounterBufferOffsets)
|
||||||
|
+{
|
||||||
|
+ VK_FROM_HANDLE(panvk_cmd_buffer, cmdbuf, commandBuffer);
|
||||||
|
+ struct panvk_cmd_graphics_state *gfx = &cmdbuf->state.gfx;
|
||||||
|
+
|
||||||
|
+ (void)firstCounterBuffer;
|
||||||
|
+ (void)counterBufferCount;
|
||||||
|
+ (void)pCounterBuffers;
|
||||||
|
+ (void)pCounterBufferOffsets;
|
||||||
|
+
|
||||||
|
+ gfx->xfb.active = false;
|
||||||
|
+}
|
||||||
@@ -30,7 +30,7 @@
|
|||||||
|
|
||||||
pkgname=mesa-panvk-bifrost
|
pkgname=mesa-panvk-bifrost
|
||||||
_mesaver=26.0.6
|
_mesaver=26.0.6
|
||||||
pkgver=26.0.6.r2
|
pkgver=26.0.6.r3
|
||||||
pkgrel=1
|
pkgrel=1
|
||||||
pkgdesc="Patched Mesa libvulkan_panfrost.so exposing Bifrost-gen Mali to Vulkan apps (panvk-bifrost campaign)"
|
pkgdesc="Patched Mesa libvulkan_panfrost.so exposing Bifrost-gen Mali to Vulkan apps (panvk-bifrost campaign)"
|
||||||
arch=('aarch64')
|
arch=('aarch64')
|
||||||
@@ -79,6 +79,7 @@ source=(
|
|||||||
"https://archive.mesa3d.org/mesa-${_mesaver}.tar.xz"
|
"https://archive.mesa3d.org/mesa-${_mesaver}.tar.xz"
|
||||||
"0001-panvk-expose-robustness2-nullDescriptor-bifrost.patch"
|
"0001-panvk-expose-robustness2-nullDescriptor-bifrost.patch"
|
||||||
"0002-panvk-expose-vulkan-1.1-1.2-on-bifrost.patch"
|
"0002-panvk-expose-vulkan-1.1-1.2-on-bifrost.patch"
|
||||||
|
"0003-panvk-bifrost-vk-ext-transform-feedback.patch"
|
||||||
"brave-vulkan"
|
"brave-vulkan"
|
||||||
"icd.json"
|
"icd.json"
|
||||||
)
|
)
|
||||||
@@ -88,6 +89,7 @@ sha256sums=(
|
|||||||
'SKIP'
|
'SKIP'
|
||||||
'SKIP'
|
'SKIP'
|
||||||
'SKIP'
|
'SKIP'
|
||||||
|
'SKIP'
|
||||||
)
|
)
|
||||||
|
|
||||||
prepare() {
|
prepare() {
|
||||||
@@ -107,12 +109,23 @@ prepare() {
|
|||||||
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_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
|
sed -i 's|bool has_vk1_2 = PAN_ARCH >= 10;|bool has_vk1_2 = true;|' src/panfrost/vulkan/panvk_vX_physical_device.c
|
||||||
|
|
||||||
|
# iter13: VK_EXT_transform_feedback implementation for Bifrost (PAN_ARCH<9).
|
||||||
|
# Applied as a real unified-diff patch — the change is too large for sed.
|
||||||
|
# Phase-doc context: ~/src/panvk-bifrost/phase{4,5,6}_iter13_close.md.
|
||||||
|
# Unlocks ANGLE-Vulkan → GLES3 → WebGL2 / WebGPU on Brave (chrome://gpu
|
||||||
|
# reports "Hardware accelerated" across the board for the affected paths).
|
||||||
|
patch -p1 < "${srcdir}/0003-panvk-bifrost-vk-ext-transform-feedback.patch"
|
||||||
|
|
||||||
# Sanity-check the patches landed.
|
# Sanity-check the patches landed.
|
||||||
grep -q "KHR_robustness2 = true," src/panfrost/vulkan/panvk_vX_physical_device.c
|
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 "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 "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_1 = true;" src/panfrost/vulkan/panvk_vX_physical_device.c
|
||||||
grep -q "has_vk1_2 = true;" src/panfrost/vulkan/panvk_vX_physical_device.c
|
grep -q "has_vk1_2 = true;" src/panfrost/vulkan/panvk_vX_physical_device.c
|
||||||
|
# iter13 sanity:
|
||||||
|
grep -q "EXT_transform_feedback = PAN_ARCH < 9," src/panfrost/vulkan/panvk_vX_physical_device.c
|
||||||
|
grep -q "pan_nir_lower_xfb" src/panfrost/vulkan/panvk_vX_shader.c
|
||||||
|
test -f src/panfrost/vulkan/jm/panvk_vX_cmd_xfb.c
|
||||||
}
|
}
|
||||||
|
|
||||||
build() {
|
build() {
|
||||||
|
|||||||
+2
-2
@@ -14,8 +14,8 @@
|
|||||||
# Sibling userspace package: ../daedalus-v4l2/build-deb.sh
|
# Sibling userspace package: ../daedalus-v4l2/build-deb.sh
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
UPSTREAM_COMMIT=3dd0eb070a75893f78368ce819b9e9ebf08c124d
|
UPSTREAM_COMMIT=462aa4b4804972189d2f1b1ab5782f1ca1e8c423
|
||||||
PKGVER=0.1.0+r20+g3dd0eb0
|
PKGVER=0.1.0+r22+g462aa4b
|
||||||
PKGREL=1 # reset for new upstream pin (3dd0eb0 — DAEMON-PPS H.264 SPS/PPS NAL synth)
|
PKGREL=1 # reset for new upstream pin (3dd0eb0 — DAEMON-PPS H.264 SPS/PPS NAL synth)
|
||||||
MODULE_NAME=daedalus_v4l2
|
MODULE_NAME=daedalus_v4l2
|
||||||
|
|
||||||
|
|||||||
+13
@@ -1,3 +1,16 @@
|
|||||||
|
daedalus-v4l2-dkms (0.1.0+r22+g462aa4b-1) bookworm trixie; urgency=medium
|
||||||
|
|
||||||
|
* Bump to 462aa4b — kernel device_run() now calls
|
||||||
|
v4l2_ctrl_request_setup() before reading the H.264 stateless
|
||||||
|
control values from the bound media_request, so the values
|
||||||
|
daedalus ships to the userspace daemon match what the V4L2
|
||||||
|
client (libva-v4l2-request-fourier) actually set. Closes the
|
||||||
|
libva→kernel control-binding gap that was causing decoded
|
||||||
|
frames to come back as best-effort zero garbage from libavcodec.
|
||||||
|
* Wire-ABI lockstep with daedalus-v4l2 0.1.0+r22+g462aa4b.
|
||||||
|
|
||||||
|
-- Markus Fritsche <mfritsche@reauktion.de> Wed, 20 May 2026 22:00:00 +0000
|
||||||
|
|
||||||
daedalus-v4l2-dkms (0.1.0+r20+g3dd0eb0-1) bookworm trixie; urgency=medium
|
daedalus-v4l2-dkms (0.1.0+r20+g3dd0eb0-1) bookworm trixie; urgency=medium
|
||||||
|
|
||||||
* Bump to 3dd0eb0 — DAEMON-PPS kernel-side changes. device_run()
|
* Bump to 3dd0eb0 — DAEMON-PPS kernel-side changes. device_run()
|
||||||
|
|||||||
Vendored
+2
-2
@@ -15,8 +15,8 @@ set -euo pipefail
|
|||||||
# end-to-end via libva (consumer target hit)" — first commit where the
|
# end-to-end via libva (consumer target hit)" — first commit where the
|
||||||
# full ffmpeg -hwaccel vaapi → libva → /dev/video0 → daemon path lands
|
# full ffmpeg -hwaccel vaapi → libva → /dev/video0 → daemon path lands
|
||||||
# a pixel-correct decoded frame back in ffmpeg.
|
# a pixel-correct decoded frame back in ffmpeg.
|
||||||
UPSTREAM_COMMIT=3dd0eb070a75893f78368ce819b9e9ebf08c124d
|
UPSTREAM_COMMIT=462aa4b4804972189d2f1b1ab5782f1ca1e8c423
|
||||||
PKGVER=0.1.0+r20+g3dd0eb0
|
PKGVER=0.1.0+r22+g462aa4b
|
||||||
PKGREL=1 # reset for new upstream pin (3dd0eb0 — DAEMON-PPS H.264 SPS/PPS NAL synth)
|
PKGREL=1 # reset for new upstream pin (3dd0eb0 — DAEMON-PPS H.264 SPS/PPS NAL synth)
|
||||||
|
|
||||||
HERE=$(dirname "$(readlink -f "$0")")
|
HERE=$(dirname "$(readlink -f "$0")")
|
||||||
|
|||||||
+16
@@ -1,3 +1,19 @@
|
|||||||
|
daedalus-v4l2 (0.1.0+r22+g462aa4b-1) bookworm trixie; urgency=medium
|
||||||
|
|
||||||
|
* Bump to 462aa4b — kernel-side fix for control-binding gap that
|
||||||
|
closes the libva→daemon SPS/PPS pipeline. Kernel device_run now
|
||||||
|
calls v4l2_ctrl_request_setup() before reading ctrl->p_cur, so
|
||||||
|
the daemon's daedalus_h264_meta block actually carries THIS
|
||||||
|
request's V4L2 stateless H.264 control values instead of stale
|
||||||
|
/default ones. Pairs with libva-v4l2-request-fourier r382+gc1bb444
|
||||||
|
(Fix 3 + Fix 4 from issue libva-v4l2-request-fourier#8).
|
||||||
|
* After-fix on higgs (Pi CM5): ffmpeg -hwaccel vaapi -i h264.mp4
|
||||||
|
produces unique decoded P-frames (per-frame fnv1a hashes differ)
|
||||||
|
and zero "error while decoding MB" / "reference frames exceeds
|
||||||
|
max" warnings.
|
||||||
|
|
||||||
|
-- Markus Fritsche <mfritsche@reauktion.de> Wed, 20 May 2026 22:00:00 +0000
|
||||||
|
|
||||||
daedalus-v4l2 (0.1.0+r20+g3dd0eb0-1) bookworm trixie; urgency=medium
|
daedalus-v4l2 (0.1.0+r20+g3dd0eb0-1) bookworm trixie; urgency=medium
|
||||||
|
|
||||||
* Bump to 3dd0eb0 — DAEMON-PPS H.264 SPS/PPS NAL synthesiser.
|
* Bump to 3dd0eb0 — DAEMON-PPS H.264 SPS/PPS NAL synthesiser.
|
||||||
|
|||||||
+16
-9
@@ -10,15 +10,22 @@
|
|||||||
# Upstream fork: https://git.reauktion.de/marfrit/libva-v4l2-request-fourier
|
# Upstream fork: https://git.reauktion.de/marfrit/libva-v4l2-request-fourier
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
# Same pin as the Arch PKGBUILD. 9898331 = LIBVA-2 close — completes
|
# Same pin as the Arch PKGBUILD. 77f9236 = PR #12 merge "av1:
|
||||||
# the per-codec dispatch from c332d34 (LIBVA-1) by adding video_fd_
|
# populate V4L2_CID_STATELESS_AV1_SEQUENCE in codec_set_controls
|
||||||
# daedalus to any_fd_supports_output_format's probe array. Without
|
# (#11 libva side)" — adds src/av1.{c,h} with av1_set_controls that
|
||||||
# it, H.264/VP9/AV1 profiles never got advertised on Pi 5 mixed
|
# maps VAAPI's VAPictureParameterBufferAV1.seq_info_fields onto
|
||||||
# deployments (rpi-hevc-dec primary, daedalus_v4l2 alt) — ffmpeg
|
# struct v4l2_ctrl_av1_sequence and queues V4L2_CID_STATELESS_AV1_
|
||||||
# bailed with "No support for codec h264 profile 578" before the
|
# SEQUENCE via S_EXT_CTRLS. The daedalus_v4l2 daemon track is the
|
||||||
# per-codec dispatch could even fire.
|
# consumer that turns the ctrl into an OBU_SEQUENCE_HEADER and
|
||||||
UPSTREAM_COMMIT=989833114a7708ad999dc68309cbc181d9913bdb
|
# prepends it to the slice bitstream so libdav1d can parse the
|
||||||
PKGVER=1.0.0+r380+g9898331
|
# (sequence-header-stripped) OUTPUT buffer that ffmpeg-vaapi
|
||||||
|
# delivers.
|
||||||
|
#
|
||||||
|
# Prior pin (c1bb444) = PR #9 merge — h264_set_controls
|
||||||
|
# max_num_ref_frames fallback + libva-boundary instrumentation for
|
||||||
|
# the daedalus consumer-strict path (issue #8 libva side).
|
||||||
|
UPSTREAM_COMMIT=77f92364661419f6e5a7bd827c1b845b4e426569
|
||||||
|
PKGVER=1.0.0+r386+g77f9236
|
||||||
PKGREL=1
|
PKGREL=1
|
||||||
|
|
||||||
HERE=$(dirname "$(readlink -f "$0")")
|
HERE=$(dirname "$(readlink -f "$0")")
|
||||||
|
|||||||
Reference in New Issue
Block a user