No description
  • C++ 53.9%
  • C 36%
  • GLSL 5.8%
  • Python 4.2%
  • Shell 0.1%
Find a file
2026-05-07 07:16:51 +03:00
android Fix manifest 2025-11-25 09:45:39 +03:00
scripts/waflib Fix invalid -isystem includes on android ndk25+ 2025-11-25 09:48:28 +03:00
xpack
.gitignore
analyze_rate_control.comp Workaround for older glslc versions 2025-11-21 02:42:20 +03:00
analyze_rate_control_finalize.comp Upload pyrowave shaders 2025-11-20 21:37:35 +00:00
audio_opensles.h
audio_pipe.cpp fix ipv4 support for audio 2026-04-04 17:19:45 +03:00
bitstream.h
block_packing.comp Workaround for older glslc versions 2025-11-21 02:42:20 +03:00
comp.comp
compress-bc1.comp
compress_bc1.h Fix wrong pipeline stage in gpu-to-host barriers, use compute-to-transfer barrier for staging buffer case 2026-05-06 23:20:31 +00:00
compress_xpack.h
config_test.cpp
constants.h Add missing pyrowave files 2025-11-20 21:41:15 +00:00
conversion.glsl Pass most shader parameters into combos 2025-11-20 21:34:56 +00:00
decoder_ffmpeg.h Add single-plane color config for pyrowave idwtfragment 2026-04-15 12:58:32 +03:00
decoder_mediacodec.h Add single-plane color config for pyrowave idwtfragment 2026-04-15 12:58:32 +03:00
decompose.comp PW444 support, implement manual multi-planar ycbcr conversion 2026-04-10 02:52:14 +00:00
decomposer.h Allow dedicated allocation on size mismatch (nvidia workaround) 2026-05-07 07:16:51 +03:00
dwt.comp Upload pyrowave shaders 2025-11-20 21:37:35 +00:00
dwt_common.h Upload pyrowave shaders 2025-11-20 21:37:35 +00:00
dwt_quant_scale.h Upload pyrowave shaders 2025-11-20 21:37:35 +00:00
dwt_swizzle.h Upload pyrowave shaders 2025-11-20 21:37:35 +00:00
filter.sh
fovcenter.vert
fovrec.frag
fovsimple.frag
fractal-image.comp Pass most shader parameters into combos 2025-11-20 21:34:56 +00:00
fxaa.glsl
gen_shader_bundle.py
glsl_shared.h Pass most shader parameters into combos 2025-11-20 21:34:56 +00:00
idwt.comp Add missing pyrowave files 2025-11-20 21:41:15 +00:00
idwt.frag Add single-plane color config for pyrowave idwtfragment 2026-04-15 12:58:32 +03:00
idwt.vert Add missing pyrowave files 2025-11-20 21:41:15 +00:00
image-decomposite.comp Pass most shader parameters into combos 2025-11-20 21:34:56 +00:00
image.comp
imgui_virtual_keyboard.h
LICENSE
nodecompose.comp Fix nodecompose shader, set separatePlanes before decoder init 2026-04-15 20:01:16 +00:00
octogon.vert
octogon2.vert
octostrip.vert
patch_spirv_composite.py
positional_utl.h
pwtest.cpp
pyrowave_common.h
pyrowave_decoder.h Add single-plane color config for pyrowave idwtfragment 2026-04-15 12:58:32 +03:00
pyrowave_encoder.h Fix wrong pipeline stage in gpu-to-host barriers, use compute-to-transfer barrier for staging buffer case 2026-05-06 23:20:31 +00:00
quad.comp
quad.frag PW444 support, implement manual multi-planar ycbcr conversion 2026-04-10 02:52:14 +00:00
quad.vert
README.md
reconstruction.comp Pass most shader parameters into combos 2025-11-20 21:34:56 +00:00
reconstruction.frag PW444 support, implement manual multi-planar ycbcr conversion 2026-04-10 02:52:14 +00:00
reconstructor.h Add single-plane color config for pyrowave idwtfragment 2026-04-15 12:58:32 +03:00
resolve_rate_control.comp Upload pyrowave shaders 2025-11-20 21:37:35 +00:00
sgsr.frag PW444 support, implement manual multi-planar ycbcr conversion 2026-04-10 02:52:14 +00:00
streamer_shared.h
triangle.frag
triangle.vert
tristrip.vert
vaapi-recorder-hevc.cpp
vaapi-recorder.cpp
vaapi-recorder.h
vaapi_encoder.h More host/software texture modes (everything except PutImage) 2026-04-26 00:18:02 +00:00
vaapi_encoder_h264.h Support vaapi planes on separate fds, use dedicated allocations (fix nvenc vaapi wrapper) 2026-04-24 08:02:39 +03:00
vaapi_encoder_hevc.h Support vaapi planes on separate fds, use dedicated allocations (fix nvenc vaapi wrapper) 2026-04-24 08:02:39 +03:00
vkcapture.cpp
vkcompute.cpp
vkcompute2.cpp
vkgraphics.cpp
vkplayer.cpp
vkplayer2.cpp
vulkan_contructors.h
vulkan_framebuffer_utl.h
vulkan_pipeline_utl.h
vulkan_resource_utl.h
vulkan_texture_utl.h
vulkan_utl.h
waf
wavelet_dequant.comp Workaround for older glslc versions 2025-11-21 02:42:20 +03:00
wavelet_quant.comp Workaround for older glslc versions 2025-11-21 02:42:20 +03:00
wscript wscript: Android apk build 2025-11-24 15:24:09 +00:00
xrapp.cpp
xrm_config.h Fix 4to6 network address map 2026-04-06 21:13:27 +00:00
xrm_counter.h
xrm_imgui_vk.h
xrm_ini.h
xrm_loader.h
xrm_log.h
xrm_openxr.h
xrm_protocol.h Implement reconstruction reading with staging buffer 2026-04-06 21:17:00 +00:00
xrm_shaders.h
xrm_structreflect.h
xrm_utils.h
xrm_variant.h
xrmote_server.cpp acquire multicast lock on android 2026-04-03 07:48:07 +03:00
xrmote_server.h Fix nodecompose shader, set separatePlanes before decoder init 2026-04-15 20:01:16 +00:00
xrmote_server_emulator.cpp
xrmote_server_gui.h Add single-plane color config for pyrowave idwtfragment 2026-04-15 12:58:32 +03:00

vulkan-playground

xrmitter 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
  • PyroWave support
  • Make reconstruction optional (allow using video only)
  • Center position offset
  • Refactoring, better project structure (split utilities)
  • Choose build system
  • Code style (it's AWFUL now!!!)
  • Lost frame notification
  • 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
  • Foveated view configuration
  • 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
  • Do something with shitty mediacodec on Android 14 (custom native window???)
  • Make builder optional (restore static controller configuration)
  • HMDInfo shared cache, so runtime can start without server connection
  • Try send something from server to make ipv6 address availiable (udp broadcast???)
  • Allow dynamic fov/resolution change (hack/bypass compositor?)
  • 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/pyrowave mode)