Part of ILLIXR, the Illinios Extended Reality Benchmark Suite. This component is responsible for calculating image holograms (per-pixel phase masks) using the Weighted Gerchberg–Saxton (GSW) algorithm.
ILLIXR plugin interface file for integrating hologram into ILLIXR.
Host side kernel launch code.
CUDA kernel that propagates phases from the SLM plane to the depth plane using Fresnel summation.
CUDA kernel that sums up the per-thread block results from the propagateToSpotPositions() kernel.
CUDA kernel that calculates the error function at the depth planes and updates the SLM phases.
The original hologram implementation. This implementation did not support arbitrary SLM sizes and colored holograms.
Building hologram for ILLIXR is automatically done when building the whole ILLIXR project. Here is how to build it individually
To build shared library plugin for ILLIXR:
make plugin.dbg.so
or
make plugin.opt.so
To build a standalone executable for ILLIXR:
make hologram.dbg.exe
or
make hologram.opt.exe
The makefile contains seperate targets for compilation on an Nvidia Jetson Xavier
(Jetson Xavier AGX has Volta GPU which only supports --gpu-architecture=sm_72
).
To target Jetson Xavier, use the following make target template <target-name>.jetson.<compile-type>.<target-ext>
.
For example, to generate the debug executable for hologram, run:
make hologram.jetson.dbg.exe
Once compiled, run:
./hologram.jetson.dbg.exe <num-trials>
hologram
, computational holography, subscribes to atimewarp_gl
output signal indicating a
timewarped frame, which means hologram should start processing. Hologram takes depth buffer of the
frame to calculate a Spatial Light Modulator input. For more details of hologram, please refer to
our paper. Since we do not have an accurate prediction of vsync, hologram process is one frame
delayed.
Currently this component is for profiling purpose only. Performance-wise, hologram is input invariant. Current ILLIXR and monado do not support depth buffer from user application. Algorithms to calculate depth spots from depth buffer is also missing.
This component uses the logger to record its runtime.
- Asynchronously read
hologram_in
- Writes
hologram_out
This code is available under the LGPL license.