feat(client): Vulkan session binary — SDL3 + ash presenter MVP (phase 1)

punktfunk-session streams one --connect session in an SDL3 window: ash
swapchain with a transfer-only letterboxed blit of the software-decode
path (no graphics pipeline until the phase-2 dmabuf/CSC pass), the
ui_stream input-capture state machine on SDL events (scancode→VK table
cross-checked against the evdev one), gamepads via a new caller-pumped
GamepadService mode (SDL video owns the main thread here), and the
shell↔session stdout contract: {"ready":true}, per-window stats:
lines, JSON error + exit codes 0/2/3/4. Strict trust — no pin, no
connect. Design: punktfunk-planning linux-client-rearchitecture.md.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-07 16:55:07 +02:00
parent 0ab97b597c
commit 89d45f2a55
12 changed files with 2014 additions and 27 deletions
Generated
+26
View File
@@ -2766,6 +2766,19 @@ dependencies = [
"bytemuck",
]
[[package]]
name = "pf-presenter"
version = "0.8.2"
dependencies = [
"anyhow",
"ash",
"async-channel",
"pf-client-core",
"punktfunk-core",
"sdl3",
"tracing",
]
[[package]]
name = "pin-project-lite"
version = "0.2.17"
@@ -2956,6 +2969,18 @@ dependencies = [
"tracing-subscriber",
]
[[package]]
name = "punktfunk-client-session"
version = "0.8.2"
dependencies = [
"anyhow",
"pf-client-core",
"pf-presenter",
"punktfunk-core",
"tracing",
"tracing-subscriber",
]
[[package]]
name = "punktfunk-client-windows"
version = "0.8.2"
@@ -3703,6 +3728,7 @@ version = "0.6.6+SDL-3.4.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "04e7f134def04ed72e6f55187c6c29c72f7dab5d359c4be0dd49c9b97fef59c7"
dependencies = [
"ash",
"cc",
"cmake",
"pkg-config",