Verify compatibility with RetroArch shader presets
Rule: Fix issues in our filter chain system (src/render/filter_chain/), not in shader files themselves
Reference: https://github.com/libretro/slang-shaders/blob/master/spec/SHADER_SPEC.md
- (Known issues to be populated as discovered)
Minimize end-to-end latency while maintaining code quality
Example Areas (tasks uncertain, use Tracy for measurement):
- Compositor frame delivery latency
- DMA-BUF import overhead
- Shader pass execution time
- Uniform buffer updates
- Render pass barriers/transitions
- Queue submission overhead
- CPU-GPU synchronization points
This roadmap covers core infrastructure work focused on establishing robust compositor-based frame capture and shader processing capabilities.
Prevent regressions in filter chain when adding new features
- Catch SPIR-V compilation errors early
- Report shader compilation failures with diagnostics
- Golden image generation for reference outputs
- Comparison against golden images (pixel-by-pixel or perceptual)
- Automated regression detection for various shader presets
- Automated test runner for shader validation
- Add Tracy GPU profiling support (Vulkan)
- Single-process Tracy timeline profiling, context
- Integrate cpptrace for stack traces on errors
- Hook into existing error handling (
tl::expected) - Configure for debug/release builds
Extend nested compositor to support broader app compatibility
Current State: Headless wlroots compositor with XDG Shell, XWayland, basic input
Missing Capabilities (blocking specific app types):
- Layer Shell (
wlr_layer_shell_v1) - Game launcher overlays (Steam, Epic), desktop panels - Presentation Time (
wlr_presentation_time) - Frame pacing, tear-free presentation, VRR - Data Device (
wl_data_device_manager) - Clipboard and drag-and-drop for launchers - DRM Lease (
wlr_drm_lease_v1) - VR applications (SteamVR) - Idle Inhibit (
zwlr_idle_inhibit_v1) - Prevent screensaver during video playback - Touch Input (
wlr_touch) - Mobile/touchscreen game ports - Text Input (
zwlr_text_input_v3) - IME support for CJK languages
Nice-to-Have Enhancements:
- Primary Selection (
zwlr_primary_selection_v1) - Middle-click paste - Output Management (
wlr_output_manager_v1) - Multi-monitor display configuration - Fractional Scaling (
wp_fractional_scale_v1) - HiDPI text rendering - Tablet/Stylus (
wlr_tablet_tool) - Drawing applications - Session Lock (
ext_session_lock_manager_v1) - Screen locker support - Gamma Control (
wlr_gamma_control_manager) - Color management - xdg-activation - Window focus tokens for multi-window launchers
- Keyboard Shortcuts Inhibit (
zwp_keyboard_shortcuts_inhibit_v1) - Global hotkeys - Tearing Control (
wp_tearing_control_v1) - Reduced latency mode - Cursor Shape (
wp_cursor_shape_v1) - Custom cursor themes
Extend local frame capture to network-capable streaming with encoding and transport.
Potential Approaches:
- GStreamer pipeline integration for encoding (H.264/H.265/AV1)
- Streaming protocols: RTSP, WebRTC, or custom UDP-based protocol
- Hardware encoding via VAAPI/NVENC
- Investigate Moonlight/Sunshine protocol compatibility