No description
Find a file
2025-05-17 20:31:37 +00:00
xpack Tune xpack to improve bc1 compression performance a little (possibly breaks format) 2024-11-11 11:17:24 +03:00
.gitignore Initial commit 2024-09-25 18:58:58 +02:00
audio_opensles.h Upload SLES audio 2025-03-05 15:09:31 +03:00
audio_pipe.cpp Audio pipe: stop cpu wasting on underrun 2025-03-26 07:30:59 +03:00
bitstream.h Optimize slice header building 2024-10-12 02:20:47 +03:00
comp.comp Demo from https://github.com/Erkaman/vulkan_minimal_compute/, remove STL and fix validation layer 2024-09-25 20:08:35 +03:00
compress-bc1.comp Add betsy bc1 compression (ugly, not tuned) 2024-11-07 09:47:00 +03:00
compress_bc1.h Redirect all xrm/vulkan related log to xrm_log, fix creating instance on android 2025-01-08 02:29:13 +03:00
compress_xpack.h xpack decompressor wrapper 2024-11-25 04:47:29 +03:00
conversion.glsl Add decompose threshold 2025-03-22 04:21:51 +03:00
decoder_ffmpeg.h ffmpeg: fix crash on wrong video size 2025-02-01 17:31:09 +00:00
decoder_mediacodec.h Increase reduceDelay threshold 2025-03-03 07:29:08 +03:00
decompose.comp Only run heavy fxaa in reconstruction center (saves at least 3-4ms) 2025-03-22 05:45:27 +03:00
decomposer.h Use sampler for foveation 2025-03-13 07:26:03 +03:00
filter.sh Add rhmd rebase script 2025-05-17 20:13:07 +00:00
fovcenter.vert Octogon-shaped rendering 2025-03-14 06:59:52 +03:00
fovrec.frag Simplify foveation functions, try tune reconstruction better 2025-03-18 04:52:04 +03:00
fovsimple.frag Prepare reconstruction pipelines for foveated reconstruction/rendering 2025-03-10 04:56:15 +03:00
fractal-image.comp Move decomposer and compressors to separate files, separate fractal pipeline, decomposer image input 2024-11-16 01:35:29 +03:00
glsl_shared.h Add 888S and 565L conversions 2024-11-11 11:15:08 +03:00
image-decomposite.comp Add betsy bc1 compression (ugly, not tuned) 2024-11-07 09:47:00 +03:00
image.comp Restore 10 bit switch 2024-10-12 02:44:21 +03:00
imgui_virtual_keyboard.h Relative imgui include for keyboard 2025-02-21 00:02:41 +03:00
LICENSE Initial commit 2024-09-25 18:58:58 +02:00
octogon.vert Octogon-shaped rendering 2025-03-14 06:59:52 +03:00
octostrip.vert Octogon-shaped rendering 2025-03-14 06:59:52 +03:00
positional_utl.h Add overloadSet utility 2024-12-27 05:18:41 +03:00
quad.comp Specialize compute pipeline resolution, split different resolution constants preparing for real reconstruction pipeline 2024-10-29 22:32:50 +03:00
quad.frag Simplify foveation functions, try tune reconstruction better 2025-03-18 04:52:04 +03:00
quad.vert Create ycbcr quad sampler pipeline, convert ffmpeg frame to nv12 2024-10-28 23:44:11 +03:00
README.md Write project status/roadmap 2025-03-21 18:00:21 +00:00
reconstruction.comp Try fix frong reconstruction offsets (bad rounding) 2025-03-19 20:33:29 +00:00
reconstruction.frag Try fix frong reconstruction offsets (bad rounding) 2025-03-19 20:33:29 +00:00
reconstructor.h Octogon-shaped rendering 2025-03-14 06:59:52 +03:00
streamer_shared.h Draft some streamer shared structures 2024-11-29 05:06:59 +03:00
triangle.frag Implement graphics pipeline utilities, port Overv's triangle demo 2024-10-14 03:37:21 +03:00
triangle.vert Implement graphics pipeline utilities, port Overv's triangle demo 2024-10-14 03:37:21 +03:00
tristrip.vert Adjust quads sizes 2025-03-12 04:19:14 +03:00
vaapi-recorder-hevc.cpp Use async chain of 4 frames with separate command buffers 2024-10-08 04:46:19 +03:00
vaapi-recorder.cpp Refactor h264 encoder, allow switch in runtime 2024-10-12 04:26:44 +03:00
vaapi-recorder.h Use async chain of 4 frames with separate command buffers 2024-10-08 04:46:19 +03:00
vaapi_encoder.h Fix crash on double destroy 2024-12-23 03:06:29 +03:00
vaapi_encoder_h264.h Fix encoder GOP overflow 2025-01-09 15:06:18 +00:00
vaapi_encoder_hevc.h Detect HEVC features 2025-03-08 19:33:44 +00:00
vkcapture.cpp Fix capture test 2025-05-17 20:01:21 +00:00
vkcompute.cpp Refactor h264 encoder, allow switch in runtime 2024-10-12 04:26:44 +03:00
vkcompute2.cpp Fix decompose compute shader test 2025-05-17 19:51:26 +00:00
vkgraphics.cpp Video decoder and reconstruction source template, packeted video stream 2024-11-29 04:51:21 +03:00
vkplayer.cpp xpack compression 2024-11-11 11:18:28 +03:00
vkplayer2.cpp Partially fix vulkan player test 2025-05-17 20:31:37 +00:00
vulkan_contructors.h Redirect all xrm/vulkan related log to xrm_log, fix creating instance on android 2025-01-08 02:29:13 +03:00
vulkan_framebuffer_utl.h Fix image layouts 2025-03-10 20:28:21 +00:00
vulkan_pipeline_utl.h Compute pipeline push constants support 2025-02-28 05:15:33 +03:00
vulkan_texture_utl.h Support user textures in imgui 2025-02-06 03:27:08 +03:00
vulkan_utl.h Make mediacodec produce frames 2025-01-08 10:24:29 +03:00
xrapp.cpp Android decoder prototype (not tested) 2025-01-06 06:21:49 +03:00
xrm_counter.h Variant union utility 2024-12-27 05:19:41 +03:00
xrm_imgui_vk.h Prepare reconstruction pipelines for foveated reconstruction/rendering 2025-03-10 04:56:15 +03:00
xrm_loader.h Variant union utility 2024-12-27 05:19:41 +03:00
xrm_log.h Fix android build 2025-01-04 04:33:31 +03:00
xrm_openxr.h Set performance and projection settings 2025-03-09 23:33:03 +03:00
xrm_protocol.h Fix audio delay 2025-03-26 07:32:43 +03:00
xrm_utils.h Add overloadSet utility 2024-12-27 05:18:41 +03:00
xrm_variant.h Variant: add union constructor 2024-12-28 07:34:40 +03:00
xrmote_server.cpp Fix unitialized data and wrong framebuffer size 2025-03-13 22:39:19 +00:00
xrmote_server.h Fix audio delay 2025-03-26 07:32:43 +03:00
xrmote_server_emulator.cpp Emulator FFR 2025-03-21 18:00:48 +00:00
xrmote_server_gui.h Fix audio delay 2025-03-26 07:32:43 +03:00

vulkan-playground

xrm-streamer server grows here

Components

  • server: Running directly on target device with OpenXR runtime. Receives layers and sound from clients and renders it. Contains all GUI settings
  • streamer client: Driver or library, implementing openxr/openvr, receives tracking and streams video. There might be multiple client implementations (monado driver, monado in-process compositor, steamvr driver, OpenComposite driver)
  • audio client: connects alsa/jack/pulseaudio to server with udp streams
  • reconstructor/decomposer: stream encoding/decoding using Haar wavelet transform and video codec

Status

Server:

  • TCP listener
  • Receiving projection stream
  • Connection/tracking with single client
  • Very dumb audio streaming (does not use protocol)
  • GUI prototype rendering (basic monitoring only, configuration does nothing)
  • Android (Pico 4) and monado linux support (build scripts are not published yet)
  • GUI server emulator (works without openxr runtime)

Clients:

  • Audio with fifo pipes (tested with jack-stdio, should work with pulseaudio pipe sink/sources too)
  • Monado driver with comp_target (monado interaction not published yet, WIP)
  • Custom monado pacer synchronized with app for smoother framerate
  • Monado builder with dynamic controller type switch (register all controller types)

Decomposer/Reconstructor:

  • H264/HEVC VAAPI encoder (no ffmpeg used), linux only
  • Haar decomposer compute pipeline
  • BC1 reconstruction texture compression
  • FXAA filter
  • Android decoder
  • ffmpeg decoder (software)
  • Compute reconstruction pipeline (slow on Adreno)
  • Graphics pipeline
  • Foveated rendering (hard-coded scale)

Roadmap

Common:

  • Choose better naming/branding
  • Refactoring, better project structure (split utilities)
  • Choose build system
  • Code style (it's AWFUL now!!!)
  • Imporve logging (use fmt_util if possible, remove extra \n)
  • Shader combos to workaround SPIRV limitations
  • Template combos (reduce unneeded branching)
  • Improve vulkan utility
  • New thread utility
  • Optimize data layout to prevent false sharing

Server:

  • Rec/Dec runtime configuration
  • Configuration storage format
  • GUI moving/toggle
  • Improve gui monitoring (implot maybe)
  • Interaction profile switches
  • Emulate controllers in emulator GUI
  • Timing information
  • TCP streaming
  • TCP keep-alive and reconnection
  • UDP/mDNS broadcast
  • SGSR/SGSR2 upscaling for reconstruction texture
  • ffmpeg hwdec
  • Multiple layers support (quad/cylinder layers)
  • Depth/ASW in reconstruction data (16 bit or rgba block format)
  • Disabling reconstruction (video rendering only)

Clients:

  • Full jack/alsa/pulse audio clients
  • HMDInfo shared cache, so runtime can start without server connection
  • UDP listener for autoconnect
  • Monado compositor bypass (allow sending layers as is)
  • Monado in-process compositor (do we need IPC server when we already have server on HMD?)
  • Improve decomposer postprocessing
  • Passing depth to server (Seems to be unsupported with OpenComposite/monado now)
  • SteamVR driver
  • Vulkan Video encoder
  • External encoders (nvenc/amf/ffmpeg/x265) in separate process (TODO: can we use GPL software with IPC such way???)
  • OpenComposite driver (at least, we can send textures without extra swapchain copy and update overlays without xrEndFrame call, so this should be useful)
  • Windows support (at least in vulkan video mode)