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:
@@ -0,0 +1,21 @@
|
||||
//! The Vulkan session presenter (punktfunk-planning `linux-client-rearchitecture.md`,
|
||||
//! Phase 1): an SDL3 window + ash swapchain that presents the shared session pump's
|
||||
//! decoded frames, captures input on the `ui_stream` state-machine contract, and reports
|
||||
//! the unified stats window on stdout. No UI toolkit anywhere in the dependency tree.
|
||||
//!
|
||||
//! Phase 1 is the software path: `CpuFrame` RGBA uploads + a transfer-only letterbox
|
||||
//! blit (no graphics pipeline, no shaders — those arrive with the Phase 2 dmabuf/CSC
|
||||
//! pass). A hardware (dmabuf) frame slipping through demotes the decoder to software via
|
||||
//! the session pump's `force_software` contract, same as the GTK presenter.
|
||||
|
||||
#[cfg(target_os = "linux")]
|
||||
pub mod input;
|
||||
#[cfg(target_os = "linux")]
|
||||
pub mod keymap_sdl;
|
||||
#[cfg(target_os = "linux")]
|
||||
mod run;
|
||||
#[cfg(target_os = "linux")]
|
||||
pub mod vk;
|
||||
|
||||
#[cfg(target_os = "linux")]
|
||||
pub use run::{run_session, Outcome, SessionOpts};
|
||||
Reference in New Issue
Block a user