a02d0a2e9f
The decoder's NV12 dmabuf imports per-plane (R8 + GR88, explicit DRM format modifier, dedicated dup'd-fd import, FOREIGN→graphics acquire) and a fullscreen-triangle render pass converts it into the presenter's video image with the CICP-driven coefficients ported from video_gl.rs (same tests, plus a rows-vs-matrix agreement check). SPIR-V is committed (shaders/build.sh regenerates) so builds and CI need no toolchain. The import extension set is probed at device creation; unsupported boxes and 3-failure streaks demote the decoder to software via the existing force_software contract. The session binary now honors the Settings decoder preference instead of forcing software. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
27 lines
1.1 KiB
Rust
27 lines
1.1 KiB
Rust
//! 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.
|
|
//!
|
|
//! Two frame paths: software (`CpuFrame` RGBA staging upload) and hardware (the
|
|
//! decoder's NV12 dmabuf imported per-plane into Vulkan + the CICP-driven CSC pass —
|
|
//! `dmabuf.rs`/`csc.rs`), both composited by a letterboxed blit. Devices without the
|
|
//! import extensions, and any import/present failure streak, demote the decoder to
|
|
//! software via the session pump's `force_software` contract, same as the GTK presenter.
|
|
|
|
#[cfg(target_os = "linux")]
|
|
pub mod csc;
|
|
#[cfg(target_os = "linux")]
|
|
pub mod dmabuf;
|
|
#[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};
|